LINUX.ORG.RU

Пара вопросов по работе со звуком

 , , ,


0

1

1) Мне нужно «слушать» в типа-реалтайме (-2 секунды не критично) аудио-вывод чужой программы. Желательно при этом отрубать этот аудио-вывод от системы - тобеш чтобы он не шел на «колонки».
Как это сделать? 2) Этот получившийся аудио поток нужно опять таки в реалтайме обрабатывать на предмет нахождения в нем короткого 1-2 секундного заранее подготовленного аудио паттерна. Под паттерном имеется ввиду имеющийся у меня звуковой файл. Как это сделать,



Предпочтительно работать с этим удовольствием из пистона.

Думал что это довольно тривиальные задачи и решаются элементарно, но гугл както меня обескуражил...

★★

Последнее исправление: genryRar (всего исправлений: 1)

Вопроса ты так и не задал, критерия наличия паттерна не привел, так что иди пока читай либо про Python + pulseaudio simple API, либо про Python + JACK.

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от t184256

поправил сообщение.

Python + pulseaudio simple API, либо про Python + JACK

это для получения вывода звука чужой проги, я так понял. а ткнуть носом можеш? В примерах что я нашел ничего похожего на это нету.

критерия наличия паттерна

эм? я предствляю себе сей процесс как получение некоего коэффициента совпадения с искомым паттерном 1-100 последних n секунд потока

genryRar ★★
() автор топика
Ответ на: комментарий от genryRar

Нет, тратить время не буду. Сам реши, что тебя устроит, сам найди, сам применяй.

я предствляю себе сей процесс как получение некоего коэффициента совпадения с искомым паттерном 1-100 последних n секунд потока

Пусть pattern = [1, 2, 4, 7, 8], последние пять сэмплов: [2, 0, 5, 3, 9]. Чему будет равен твой коэффициент?

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Оу, как все плохо... мои соболезнования дружище.

genryRar ★★
() автор топика

Если я правильно тебя понял, то смотри: твой паттерн является массивом значений. Соответственно, твоя задача последовательно, байт за байтом, строить что-то вроде карты соответствия потока с массивом в пределах заданной погрешности. Как только значение отличается слишком сильно, карта обнуляется и процесс поиска соответствия запускается сначала. Это общее решение второго вопроса. Первый решается через подключение вывода приложения-источника к фиктивному входу твоего приложения, а уже как ты это будешь делать, зависит только от тебя. Обычно подобное, насколько мне известно, проворачивают через звуковой сервер типа пшшаудио или Jack

XMs ★★★★★
()
Ответ на: комментарий от XMs

спасибо. да, ты понял меня правильно. но дело в том, что в общих чертах я все это понимаю. Из искомого семпла делаем паттерн, получаем из звукового потока скользящее окно +-n где n интервал проверки и в нем через какой нибуть scipy.correlate ищем наш паттерн. Получаем коэффициент соответствия и отсекаем по порогу, эксеперементально подобранному. Да и со вторым вроде тоже все понятно, в тойже пульсе «отцепляем» виртуальный звуковой канал, присабачиваем его в «трубу» (в терминах пульсы) и далее из нее слушаем.

НО как все это сделать в коде без лишних телодвижений и велосипедов?
Вот как паттерн состряпать из аудио файла искомого? ведь инструменты для этого все существуют, но не имея опыта хрен знает какой брать и как им пользоваться. а начинаеш гуглить - столько информации, вся разная, и что выбрать - неясно.

дальше, пульса.
вот если сделать так

pacmd

и там команду list-sink-inputs
то получим список приложений, выводящих звук. Нам там нужен INDEX.
теперь если сделать так
pactl load-module module-null-sink sink_name=steam
pactl move-sink-input $INDEX steam

то мы отсоединим звуковой канал приложения от системы и прифигачим его в новую трубу (терминоголию я возможно несавсем корректно использую, материала на русском ненашел)

тперь можно с этим каналом работать, читая из этой самой трубы
parec -d steam.monitor | oggenc -b 192 -o steam.ogg --raw -

все супер, то что нужно. НО как получить доступ к этой трубе из питона?

genryRar ★★
() автор топика
Ответ на: комментарий от genryRar

Увы, подсказать могу только общее решение и ключевые слова для поиска, так как питоном не владею, плюсовик я да сишник. Рекомендую для начала поискать питоновские биндинги к пщщаудио. То, что ты назвал «трубой» — обычный пайп (неименованный канал), в документации питона есть описание, как с этим работать

XMs ★★★★★
()
Ответ на: комментарий от XMs

у меня большие сомнения, что это обычный линуксовый пайп... покрайней мере доступ к нему, как к обычному именнованому каналу я получить несмог.

однако нашел вот такой пример http://freshfoo.com/posts/pulseaudio_monitoring/, они тут громкость мониторят. но работает. надо еще разобраться с кодом, но второй вопрос можно считать закрытым. осталось разобраться с первым.

genryRar ★★
() автор топика
Ответ на: комментарий от genryRar

и в нем через какой нибуть scipy.correlate ищем наш паттерн

Оу, как все плохо... мои соболезнования дружище.

t184256 ★★★★★
()

Хуякни его вейвлет-преобразованем, дальше ты понел

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.