Простая кроссплатформенная бесплатная аудиобиблиотека для raw PCM? - PullRequest
3 голосов
/ 07 февраля 2010

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

Моей первой очевидной идеей было использование собственного Phonon в Qt для воспроизведения звука, но с этим подходом есть две проблемы:

  1. Насколько я понимаю, Phonon не поддерживает данные PCM без заголовков. Мне придется взломать это и подделать WAV-заголовок каждый раз, когда начинается воспроизведение. Но не шоу-стоппер.
  2. Что еще более важно: похоже, нет никакого способа контролировать, как Phonon (и его бэкэнды, такие как xine, PulseAudio, DirectX и т. Д.) Буферизуют. Его поведение по умолчанию похоже на 5 секунд предварительной буферизации, что для меня слишком много . Я предпочел бы около 1 секунды, и я определенно хотел бы иметь возможность контролировать это!

В настоящее время я смотрю на Gstreamer, FFMPEG и libvlc. Какие-нибудь мысли? Поскольку мой звук в очень простом формате, и мне не нужно делать какие-то смешанные вещи (просто регулировку громкости), я бы хотел простой , бесплатный (как в свободе), крест -платформа и широко доступная библиотека .

Ответы [ 3 ]

6 голосов
/ 07 февраля 2010

Qt 4.6 имеет новый модуль QtMultimedia.

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

Класс QAudioOutput, кажется, делает то, что вы хотите - он просто воспроизводит необработанные данные PCM.

3 голосов
/ 07 февраля 2010

ffmpeg, libvlc и gstreamer имеют возможности, превышающие необработанный pcm, такие как поддержка кодеков.

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

Кроме того, почему вы хотите контролировать буферизацию? Большая буферизация означает меньшее количество прерываний и меньшее энергопотребление.

1 голос
/ 07 февраля 2010

Вы смотрели на OpenAL ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...