2013-05-11 3 views
1

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

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

Thread, который играет аудио:

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 
); 

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

+0

Возможно, вы смешиваете чередующиеся и неперемещенные аудио. –

+0

Хм, как это работает? Чередование аудио и планарного звука? Я знаю, что такое чередование, что такое плоское? Итак, мне нужно работать с чередованием для стерео? – Spamdark

+1

Промежуточное аудио отформатировано как чередующиеся левые и правые образцы: LRLRLRLR. Non-interleaved отформатирован как фрагмент слева, затем фрагмент справа: LLLLLRRRRR. Это может помочь: http://blog.bjornroche.com/2011/11/slides-from-fundamentals-of-audio.html –

ответ

0

не уверен,

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

 Смежные вопросы

  • Нет связанных вопросов^_^