звуки с низкой задержкой при нажатии клавиш - PullRequest
3 голосов
/ 23 февраля 2012

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

На этом сайте были и другие сообщения, касающиеся воспроизведения звуков при нажатии клавиш с использованием gstreamer в качестве системного вызова. Я также попробовал libcanberra, но оба, кажется, имеют значительные задержки между звуками. Я могу написать приложение на python или C, но, скорее всего, сделаю хотя бы кое-что на C.

Я также хочу упомянуть, что часть видео воспроизводится gstreamer. Я попытался создать два экземпляра gstreamer, чтобы избежать дорогостоящих системных вызовов, но этот экземпляр аудио, казалось, убивал приложение при вызове.

Если у кого-нибудь есть советы по созданию более быстрых звуков, я был бы очень признателен.

1 Ответ

4 голосов
/ 24 февраля 2012

Вы можете загрузить необработанный аудиосэмпл непосредственно в PulseAudio, чтобы не было декодирования и (возможно, сохранения) дополнительных переключателей, используя следующую функцию из Канберры:

http://developer.gnome.org/libcanberra/unstable/libcanberra-canberra.html#ca-context-cache

next ca_context_play () будет использовать его.

Однако самая большая проблема, с которой вы столкнетесь в этом сценарии (с одновременным воспроизведением видео), заключается в том, что аудиоустройство может быть настроено с большой задержкой с PulseAudio (до 1 /2 с или более для нормального воспроизведения).Возможно, было бы целесообразно подать ошибку в libcanberra для поддержки флага LOW_LATENCY, так как в настоящее время он не пытается минимизировать задержку для звуковых событий.Это было бы здорово иметь.

GStreamer Pulsesink, вероятно, тоже может иметь низкую задержку (у нее есть некоторые свойства для этого), но я боюсь, что она не будет такой же легкой, как libcanberra, и вы не будетевозможность кеширования образца, например.В идеале GStreamer может также научиться кэшировать сэмплы или предварительно заполнить PulseAudio ...

...