Я пытаюсь сохранить сообщения голосовой почты с телефона Verizon Fios в лучшем качестве. Сообщения голосовой почты доступны онлайн , но только для воспроизведения (проигрыватель на основе Java), без сохранения. Официально не существует способа сохранить оригинальные цифровые голосовые сообщения в виде файлов из службы Fios Digital Voice (нет платных услуг, нет ничего, нет причин, почему).
Моя единственная идея состояла в том, чтобы записывать цифровые данные с плеера, пока он находится на звуковой карте. Я попробовал конфигурацию Linux ALSA с помощью петлевого устройства.
# cat /etc/asound.conf
# default device
pcm.!default {
type plug
slave.pcm "loop"
}
# output device
pcm.loopout {
type dmix
ipc_key 328211
slave.pcm "hw:Loopback,0,0"
}
# input device
pcm.loopin {
type dsnoop
ipc_key 686592
slave.pcm "hw:Loopback,1,0"
}
# duplex plug device
pcm.loop {
type plug
slave {
pcm {
type asym
playback.pcm "loopout"
capture.pcm "loopin"
}
}
}
Кажется, это работает и записывает звук, например, при воспроизведении чего-либо на Youtube аудиовыход поступает на петлевое устройство (аудиовыход по умолчанию), и я могу захватить его (не уверен, как именно он работает, я тестировал как 44,1 кГц, так и 48 кГц )
arecord -f cd -D loop | aplay -f cd -D hw:0,0
arecord -f dat -D loop | aplay -f dat -D hw:0,0
Но когда я попытался захватить вывод аудиоплеера Verizon Java, он искажен, и длина, кажется, не совпадает. Я подозреваю, что это может быть моно на 8 кГц, и я пробовал разные вещи, меняя частоту и форматы, но ничего не помогло.
У вас есть идеи, что здесь не так и как записывать сообщения? Проблема в конфигурации ALSA? Или, возможно, проблема с ядром? (Я использую 3.4.88). Любые идеи будут очень приветствоваться.
Ответы:
Интересный вопрос: давным-давно я думал о простой записи цифрового аудио и видео, возможной через некоторые виртуальные аудио и видео драйверы, но так и не получил ее.
Я использовал ваш файл конфигурации, и у меня была точно такая же проблема, как вы описали. (Я, конечно, удалил драйверы совместимости OSS из ALSA, протестировал разные ядра - похоже, не имеет значения, и использовал Debian Wheezy)
все вышеперечисленные команды хорошо воспроизводят колонки
теперь запись с петли и воспроизведение на фронт
все посылают аудио в петлю и воспроизводят на колонки ОК
но тут звук сломан - сильно искажен !!! Просто игра на устройстве по умолчанию. Воспроизведение, указанное с помощью цикла, сработало!
Попробовав различные изменения, я протестировал эту модификацию asound.conf
Это решило проблему! Когда устройство по умолчанию - loopout, оно работает. Попытка
arecord -f cd -D loopin | aplay -f cd -D front
не имела никакого эффекта. Не уверен, как работает петля, но это было в состоянии захватить звук. Или ошибка в ALSA? Вы используете Debian? Работает ли это для вас?Примечания к другим предложениям по решению проблемы:
Чтобы сбросить сетевой поток: я предполагаю, что если приложение не хочет, чтобы вы сохраняли данные, передача была бы зашифрована (https ???). Если игрок не проверяет сертификат сервера, как вы собираете данные? Какой твой любимый быстрый и простой способ, как стать человеком посередине и поймать поток?
Pulseaudio: Как мне запустить его на Debian Wheezy? Вики говорят, что это просто работает. Это не так.
Как мне устранить неполадки, что происходит? (Инструменты, диаг?)
Джек: Я не нашел простых инструкций, как установить Джек. Это кажется довольно сложным. Предполагается, что Pulseaudio работает? Документация сбивает с толку. У вас есть ссылка на хороший быстрый старт (как установить и проверить, чтобы убедиться, что он работает?)
Предполагаете ли вы, что большинство аудиоприложений (например, проигрыватель Fios Voicemail Java) смогут воспроизводить на Pulseaudio или Jack, а не отправлять звук в ALSA?
источник
Вы помните "modprobe snd-aloop"? Я попробовал это, и это работает для меня с вашим asound.conf на YouTube, Pandora, Tunein, Vonage, и этот Java-плеер . Может быть что-то особенное для Fios, но у меня нет Fios для тестирования. Можете ли вы найти другой общедоступный сайт, который также вызывает проблему?
Также попробуйте выполнить запись в файл, а затем воспроизведите его:
источник
Лучшая идея
Во-первых, читая ваш вопрос, я бы так не поступил. Я бы отслеживал сеть и пытался захватить поток. Вероятно, это довольно предсказуемое место, которое можно записать с помощью простого вызова
tshark
. Это еще один вопрос.Улучшение по сравнению с ALSA
Хотя ваш метод является правильным подходом, я бы не стал использовать ALSA. ALSA - это уровень аппаратной абстракции. Я бы использовал звукового демона, который есть практически везде PulseAudio. Это имеет больше смысла. Создать нулевую раковину.
Эта команда вернет вам
module id
. Это бесполезно для нас.Теперь просто установите переменную среды
PULSE_SINK
. (имя_пути в приведенном выше примере - «MySink»)Или запустите программу,
PULSE_SINK=MySink
и этот нулевой приемник перехватит поток.Всякий раз, когда вы хотите передать его в файл, просто запустите:
Опус с низким битрейтом - лучший выбор для записи телефонных разговоров.
Примечания:
sox
в поток для этого. Смотритеman sox
, ищитеvad
.--downmix-mono
на стереопотоке. Возможно, вы захотите поэкспериментировать с отправкойchannels=1
аргументаmodule-null-sink
на первом шаге. Телефоны все моно.источник
Потратив более часа на тщательную настройку петлевого устройства ALSA в Debian, наиболее эффективным и наименее трудоемким решением была пайка реального устройства за 5 минут.
Серьезно, я перекомпилировал ядро для включения обратной петли ALSA, настроил /etc/asound.conf и ~ / .asound.rc безрезультатно.
источник
Я настоятельно рекомендую использовать JACK. Это рекурсивная аббревиатура для JACK Audio Connection Kit. Он предназначен именно для того, что вы делаете, перенаправляя аудио из одного программного обеспечения, в вашем случае, инструмента воспроизведения Java, в другое, записывающее программное обеспечение. Это очень хорошо для записи с низкой задержкой, которая, я думаю, может помочь вам получить качество, которое вы ищете.
С его помощью вы можете легко перенаправить звук с любого источника на вашем компьютере на множество различных инструментов записи. На самом деле, есть очень хороший графический интерфейс для этого, называемый QjackCtl .
На этой странице рассказывается, как направить аудио из браузера (Flash и, возможно, вашего инструмента Java) в Jack. Как это сделать, зависит от вашей системы.
Например:
Изменить ваш
~/.asoundrc
или~/asound.conf
:Тогда вы должны быть в состоянии использовать
источник
pavucontrol
будет делать то же самоеQjackCtl
, что и вы, и вы всегда можете двигатьсяpacmd move-sink-input
.pasuspender -- jackd
. Тем не менее, если у постера возникают проблемы с качеством, может быть полезно попробовать что-то очень простое. Кроме того, QjackCtl позволяет очень легко настраивать параметры, которые дают видимую обратную связь по задержке и xruns, которые обычно являются причиной искаженного звука .