Потрескивание звука с использованием SDL2 и stb_vorbis

В проекте, над которым я работаю, я бы хотел использовать stb_vorbis для потоковой передачи аудио из файла ogg. Тем не менее, после реализации процессов, чтобы сделать это, я обнаружил, что звук был треск. Я чувствую, что проблема может быть похожа на этот вопрос, но я не вижу, где может быть проблема.

Вот мой код:

#include <SDL2/SDL.h>
#include <stb/vorbis.h>
#include <iostream>

void sdlAudioCallback(void* userData, Uint8* stream, int len)
{
stb_vorbis* myVorbis = (stb_vorbis*) userData;
SDL_memset(stream, 0, len);
stb_vorbis_get_frame_short_interleaved(myVorbis, 2, (short*) stream, len/sizeof(short));
}

int main()
{
if (SDL_Init(SDL_INIT_AUDIO) != 0)
return -1;

int error = 0;
stb_vorbis_alloc* alloc;
stb_vorbis* vorbis = stb_vorbis_open_filename("res/thingy.ogg", &error, alloc);

if (error != 0)
return -2;

stb_vorbis_info info = stb_vorbis_get_info(vorbis);

SDL_AudioSpec spec;
spec.freq = info.sample_rate;
spec.format = AUDIO_S16;
spec.channels = 2;
spec.samples = 1024;
spec.callback = sdlAudioCallback;
spec.userdata = vorbis;

if (SDL_OpenAudio(&spec, NULL) < 0) {
std::cout << "failed to open audio device: " << SDL_GetError() << std::endl;
SDL_Quit();
return -3;
}

SDL_PauseAudio(0);
SDL_Delay(5000);
}

Дополнительная информация:
thingy.ogg от Образцы Шона Барретта
сборка с g ++ на машине OSX

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]