SDL – Как асинхронно воспроизводить звук на C++, не останавливая выполнение кода?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 SDL – Как асинхронно воспроизводить звук на C++, не останавливая выполнение кода?

Сообщение Anonymous »

Я разрабатываю клон Asteroid на чистом C++, и для этой цели мне нужно добавить звуки к различным событиям, например, при выстреле пули и при взрыве. Проблема, однако, в том, что у меня нет опыта работы с аудиобиблиотеками.

Я использую Simple DirectMedia Layer (SDL) и написал функцию с именем playsound() для воспроизведения звук в случае возникновения определенного события. Однако проблема заключается в том, что при возникновении события вызывается playsound(), и выполнение кода останавливается до тех пор, пока звук не будет воспроизведен полностью или пока я не вернусь из функции (я задерживаю возврат, используя функцию задержки).

Я бы хотел, чтобы звук воспроизводился в фоновом режиме, не создавая каких-либо задержек в остальной части игры. Я занимаюсь разработкой на Ubuntu 16.04 и не могу использовать Windows PlaySound() для вызова флага ASYNC.

Вот функция:

void playsound(string path) {
// Initialize SDL.
if (SDL_Init(SDL_INIT_AUDIO) < 0)
return;

// local variables
Uint32 wav_length; // length of our sample
Uint8 *wav_buffer; // buffer containing our audio file
SDL_AudioSpec wav_spec;
if(SDL_LoadWAV(path.c_str(), &wav_spec, &wav_buffer, &wav_length) == NULL){
return;
}
SDL_AudioDeviceID deviceId = SDL_OpenAudioDevice(NULL, 0, &wav_spec, NULL, 0);
SDL_QueueAudio(deviceId, wav_buffer, wav_length);
SDL_PauseAudioDevice(deviceId, 0);
SDL_Delay(50);
SDL_CloseAudioDevice(deviceId);
SDL_FreeWAV(wav_buffer);
SDL_Quit();
}


Подробнее здесь: https://stackoverflow.com/questions/502 ... -execution
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»