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); } }
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); } }
//////////////////////////////////////////////////////////// /// 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; }
void ExportSound(const USound *Snd) { SaveSound(Snd, (void*)&Snd->RawData[0], Snd->RawData.Num(), "unk"); }