Плохой аудиовыход в стереорежиме — переполнение стека FFMPEG PortAudio

Я снова здесь. На этот раз я работаю со звуком, у меня были проблемы с утечками памяти, но теперь они решены, на этот раз я нахожусь здесь с новой проблемой, когда я настраиваю portaudio на звук в стерео (channel = 2), аудио выводится в плохое качество.

Он хорошо выводит только в моно, в гугле почти нет решения (или я плохой «гуглер»), вот код:

Поток, который воспроизводит аудио:

int16_t* audioBuffer=(int16_t*)av_malloc(FRAME_SZ_AV);int sz = MEDIA->DecodeAudioFrame(audioBuffer,0);

if(sz==1)
Pa_WriteStream(MEDIA->output_stream,audioBuffer,MEDIA->_audio_ccontext->frame_size);

if(sz!=1)
MessageBox(0,"error","error",MB_OK);

ZeroMemory(audioBuffer,FRAME_SZ_AV);
av_freep(&audioBuffer);

Функция DecodeAudioFrame

int WbMedia::DecodeAudioFrame(int16_t *audio_buf, int buf_size){
int return_status=0;
AVPacket t_pack;

while(!audio_packets.empty()){
// Get new packet
WaitForSingleObject(Queue_Audio_Mutex,INFINITE);
t_pack = audio_packets.front();
audio_packets.pop();
ReleaseMutex(Queue_Audio_Mutex);

int obt_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
int consm = avcodec_decode_audio3(_audio_ccontext,audio_buf,&obt_size,&t_pack);
if(consm > 0 && obt_size > 0){
return_status=1;
break;
}
return_status=-1;
break;
}

av_free_packet(&t_pack);

return return_status;
}

Настройки PortAudio

output_params.device = Pa_GetDefaultOutputDevice(); //choosen_device.dev_index;
output_params.sampleFormat=paInt16;
output_params.channelCount=channel_count;
output_params.suggestedLatency=choosen_device.dev_inf->defaultLowOutputLatency;
output_params.hostApiSpecificStreamInfo=NULL;

// Start with PA opening
PaError pa_opening_err = Pa_OpenStream(&output_stream,
NULL,
&output_params,
sample_fr,
_audio_ccontext->frame_size,
paNoFlag,
NULL,
NULL
);

Почему звук выводится в плохом качестве в стерео, а не в моно? Как я могу это исправить?

1

Решение

Точно сказать не могу,

но вместо того, чтобы использовать paInt16 ты можешь использовать paInt24 (24-битный формат сэмпла) для лучшего качества звука. Я согласился bjornroche, что вы можете чередовать стерео выход между левым и правым, хотя, пожалуйста, проверьте функцию обратного вызова и вывод данных

0

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

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

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