Как перенаправить с аудиовыхода на микрофонный вход с помощью PulseAudio?
Я работаю над мобильным приложением для Maemo/MeeGo, а Maemo использует PulseAudio. Я хочу воспроизвести mp3 для звонящего (и отменить микрофон при его выполнении, а не прослушивать звонящего, все должно быть сделано на фоне), для этого мне нужно перенаправить аудиовыход с определенного (если это невозможно, все), подделать его как вход и сделать приложение для телефона.
На моем компьютере Ubuntu я сделал это с помощью pavucontrol. Я создал NULL-приемник, затем:
Audio Output (from Amarok) --> to NULL Output
Skype Input <-- NULL Output
Skype Output --> NULL
И это сработало, Амарок играл музыку, и она транслировалась в Skype, не играя мне, и я ничего не слышал обо всех процессах. Проблема заключается в следующем;
a) у Maemo нет павуконтроля.
б) Даже если бы это было (или если я его упакую), это не будет хорошим, так как это приложение только GUI, и я должен делать все это на фоне, без ввода пользователем. (среднее: CLI или API)
Отвечая на вопрос об этом на Freenode #pulseaudio, и полезный парень сказал: "Это можно сделать с помощью pactl или pacmd, команды, которые вы хотите, - это перемещение-приемник и вывод-вывод-выход, но вам нужно знать устройство и потоковые индексы". Итак, похоже, что pavucontrol - это всего лишь графический интерфейс, pactl и pacmd - это реальная сделка, и, самое главное, это приложения CLI.
Я очень благодарен ему, но я ничего не знаю о "pactl", "pacmd", "move-sink-input" или "device/stream indexes", поэтому мне нужна очень упрощенная страница руководства или источник аналогичного приложения, команда с одним слоем (две целые страницы команд?), просто дайте мне их! ^^) или кто-то с достаточным терпением, чтобы объяснить это мне.
Ответы
Ответ 1
Руководства для pactl
и pacmd
доступны, если вы дадите им поиск. Я нашел их здесь:
pactl
pacmd (pulse-cli-syntax)
Я думаю, что вас интересует следующий отрывок из руководства pactl
:
Идентификатор ввода-передачи-приемника SINK: Переместите указанный поток воспроизведения (обозначенный его числовым индексом) на указанный приемник (обозначенный его символическим именем или числовым индексом).
Вы должны использовать pactl list sink-inputs
, pactl list source-outputs
, pactl list sinks
и pactl list sources
в сочетании с некоторыми grep
и/или sed
или что-то в этом роде, чтобы программно определить правильный поток и потопить.