Проста междуплатформена безплатна аудио библиотека за необработен PCM?

Пиша междуплатформена програма, базирана на Qt, която от време на време трябва да възпроизвежда аудио, предоставено отвън (извън моя контрол) като необработен PCM. Точният формат е 16-битов PCM с малък порядък при различни общи честоти на дискретизация.

Първата ми очевидна идея беше да използвам собствения Phonon на Qt за аудио възпроизвеждане, но има два проблема с този подход:

  1. Доколкото виждам, Phonon не поддържа PCM данни без заглавие. Ще трябва да хакна това и да фалшифицирам WAV хедър всеки път, когато възпроизвеждането започне. Не е шоустопер обаче.
  2. More importantly: There doesn't seem to be any way to control how Phonon (and its backends such as xine, PulseAudio, DirectX, whatever) prebuffers. Its default behaviour seems to be something like 5 seconds of prebuffering, which is way too much for me. I'd prefer about 1 second, and I'd definitely like to be able to control this!

В момента разглеждам Gstreamer, FFMPEG и libvlc. някакви мисли? Тъй като аудиото ми е в много прост формат и не е необходимо да правя фантастични неща за миксиране (само контрол на силата на звука), бих искал прост, безплатен (както в Freedom), междуплатформена и широко достъпнабиблиотека.


person gspr    schedule 07.02.2010    source източник


Отговори (3)


Qt 4.6 има новия модул QtMultimedia.

https://doc.qt.io/archives/4.6/qtmultimedia.html

Класът QAudioOutput изглежда прави това, което искате - той просто възпроизвежда необработени PCM данни.

person BlackAura    schedule 07.02.2010
comment
Благодаря ти! QAudioOutput е точно това нещо, което търсех! Никога не съм го забелязвал, тъй като в момента съм на система с Qt 4.5 и просто прочетох документите за 4.5. - person gspr; 07.02.2010

ffmpeg, libvlc и gstreamer имат възможности отвъд raw pcm, като поддръжка на кодек.

За вашите цели, SDL (пример 1, пример 2), OpenAL, QAudioOutput са достатъчни. SDL е може би най-популярната опция.

Освен това, защо искате да контролирате буферирането? Голямото буфериране означава по-малко прекъсвания и по-ниска консумация на енергия.

person Tobu    schedule 07.02.2010

Гледали ли сте OpenAL?

person Manuel    schedule 07.02.2010