获取pcm
先随便找个mp4,给转成pcm
ffmpeg -i 1.mp4 -ar 48000 -ac 2 -f s16le 1.pcm
示例代码
uint8_t* pcm_pos = NULL;
uint32_t buf_len = 0;
void cb(void* udata, Uint8* stream, int len)
{
if (buf_len <= 0 || !pcm_pos)
{
return;
}
SDL_memset(stream, 0, len);
len = len < buf_len ? len : buf_len;
SDL_MixAudio(stream, pcm_pos, len, SDL_MIX_MAXVOLUME);
pcm_pos += len;
buf_len -= len;
}
void PlayPCM()
{
SDL_Init(SDL_INIT_AUDIO);
FILE* wj = fopen("1.pcm", "rb");
if (NULL == wj)
{
std::cout << "fopen failed" << std::endl;
return;
}
std::vector<uint8_t> v(4096);
SDL_AudioSpec spec;
spec.freq = 44100;
spec.format = AUDIO_S16SYS;
spec.channels = 2;
spec.silence = 0;
spec.samples = 1024;
spec.callback = cb;
spec.userdata = NULL;
SDL_OpenAudio(&spec, NULL);
SDL_PauseAudio(0);
while (1)
{
buf_len = fread(v.data(), 1, v.size(), wj);
if (buf_len <= 0)
{
break;
}
pcm_pos = v.data();
if (pcm_pos < (v.data() + buf_len))
{
SDL_Delay(20);
}
}
fclose(wj);
SDL_Quit();
}
直接跑就行了