示例#1
0
void ExportSoundNodeWave(const USoundNodeWave *Snd)
{
	// select bulk containing data
	const FByteBulkData *bulk = NULL;
	const char *ext = "unk";
	int extraHeaderSize = 0;

	if (Snd->RawData.ElementCount)
	{
		bulk = &Snd->RawData;
	}
	else if (Snd->CompressedPCData.ElementCount)
	{
		bulk = &Snd->CompressedPCData;
	}
	else if (Snd->CompressedXbox360Data.ElementCount)
	{
		bulk = &Snd->CompressedXbox360Data;
		ext  = "x360audio";
#if XMA_EXPORT
		if (SaveXMASound(Snd, bulk->BulkData, bulk->ElementCount, "xma")) return;
		// else - detect format by data tags, like for PC
#endif
	}
	else if (Snd->CompressedPS3Data.ElementCount)
	{
		bulk = &Snd->CompressedPS3Data;
		ext  = "ps3audio";
		extraHeaderSize = 16;
		//!! note: has up to 4 sounds in single object
		//!! bulk data starts with int32[4] holding sizes of all sounds
		//!! 0 means no data for particular object
		//!! data encoded in MP3 format
	}

	if (bulk)
	{
		SaveSound(Snd, OffsetPointer(bulk->BulkData, extraHeaderSize), bulk->ElementCount - extraHeaderSize, ext);
	}
}
示例#2
0
void ExportSoundWave4(const USoundWave *Snd)
{
	// select bulk containing data
	const FByteBulkData *bulk = NULL;
	const char *ext = "unk";
	int extraHeaderSize = 0;

	if (Snd->RawData.ElementCount)
	{
		bulk = &Snd->RawData;
	}
	else if (Snd->CompressedFormatData.Num())
	{
		bulk = &Snd->CompressedFormatData[0].Data;
		ext = *Snd->CompressedFormatData[0].FormatName; // "OGG"
	}

	if (bulk)
	{
		SaveSound(Snd, bulk->BulkData, bulk->ElementCount, ext);
	}
}
示例#3
0
////////////////////////////////////////////////////////////
/// Point d'entr�e du programme
///
/// \return Code d'erreur de l'application
///
////////////////////////////////////////////////////////////
int main_capture()
{
    int time_left = 0;

    // Initialisation d'OpenAL avec le device par d�faut
    if (!InitOpenAL_capture(NULL))
        return EXIT_FAILURE;

    // Initialisation de la capture
    if (!InitCapture(NULL))
        return EXIT_FAILURE;

    // Lancement de la capture
    alcCaptureStart(CaptureDevice);

    // On va stocker les �chantillons captur�s dans un tableau d'entiers sign�s 16 bits
    std::vector<ALshort> Samples;

    // ...Et c'est parti pour 5 secondes de capture
    time_t Start = time(NULL);

    while ((time_left = time(NULL) - Start) <= 5) // si x passe � 1, on stop la capture
    {
	std::cout << "\rSpeech capture in progress... " << std::fixed << std::setprecision(2) << 5-time_left << " sec left";
        // On r�cup�re le nombre d'�chantillons disponibles
        ALCint SamplesAvailable;
        alcGetIntegerv(CaptureDevice, ALC_CAPTURE_SAMPLES, 1, &SamplesAvailable);

        // On lit les �chantillons et on les ajoute au tableau
        if (SamplesAvailable > 0)
        {
            std::size_t Start = Samples.size();
            Samples.resize(Start + SamplesAvailable);
            alcCaptureSamples(CaptureDevice, &Samples[Start], SamplesAvailable);
        }
    }

    // On stoppe la capture
    alcCaptureStop(CaptureDevice);

    // On n'oublie pas les �ventuels �chantillons qu'il reste � r�cup�rer
    ALCint SamplesAvailable;
    alcGetIntegerv(CaptureDevice, ALC_CAPTURE_SAMPLES, 1, &SamplesAvailable);
    if (SamplesAvailable > 0)
    {
        std::size_t Start = Samples.size();
        Samples.resize(Start + SamplesAvailable);
        alcCaptureSamples(CaptureDevice, &Samples[Start], SamplesAvailable);
    }

	std::cout << "\rSpeech capture complete                   " << std::endl;

    // On sauvegarde les �chantillons captur�s dans un fichier
    SaveSound("vocal.wav", Samples);

    // Fermeture de la capture
    ShutdownCapture();

    // Fermeture d'OpenAL
    ShutdownOpenAL_capture();

    return EXIT_SUCCESS;
}
示例#4
0
void ExportSound(const USound *Snd)
{
	SaveSound(Snd, (void*)&Snd->RawData[0], Snd->RawData.Num(), "unk");
}