ALSAループデバイスを使用してWebベースのオーディオプレーヤーでオーディオを録音する

ALSAループデバイスを使用してWebベースのオーディオプレーヤーでオーディオを録音する

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.1kHzと48Khzをテストしました)。 )

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 Audio Playerの出力をキャプチャしようとすると、歪んで長さが一致しないようです。 8kHzモノかもしれないと思います。周波数やフォーマットを変更するなど、さまざまな方法を試しましたが、役に立ちません。

ここで何が起こり、メッセージを記録するかを知っていますか? ALSAの設定に問題がありますか?それともカーネルの問題でしょうか? (私は3.4.88を使用しています)。どんなアイデアでも大歓迎です。

答え1

興味深い質問は、ずっと前に、仮想オーディオとビデオドライバを介して単にデジタルオーディオとビデオを録音することについて考えていましたが、決してそのようなことは起こりませんでした。

設定ファイルを使用しましたが、説明したのと同じ問題が発生しました。 (私はALSAからOSS互換ドライバを削除し、他のカーネルをテストしました。問題にならないようで、Debian Wheezyを使用しました)

$ alsaplayer -d front audio.mp3

$ mplayer -vo null -ao alsa:device=front video.mp4
AO: [alsa] 44100Hz 2ch s16le (2 bytes per sample)

$ mplayer -ao alsa:device=front audio.mp3
AO: [alsa] 44100Hz 2ch s16le (2 bytes per sample)

上記のコマンドはすべてスピーカーで正常に再生されます。

$ arecord -f cd -D loop | aplay -f cd -D front
Recording WAVE 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo

今ループで録音し、前方に再生します。

$ alsaplayer audio.mp3
$ alsaplayer -d loop audio.mp3

$ mplayer -vo null video.mp4
$ mplayer -vo null -ao alsa:device=loop video.mp4
AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample)

$ mplayer -ao alsa:device=loop audio.mp3
AO: [alsa] 48000Hz 2ch floatle (4 bytes per sample)

ループにオーディオを送信し、スピーカーで再生するすべてがうまく動作します。

$ mplayer audio.mp3
AO: [alsa] 48000Hz 2ch floatle (4 bytes per sample)

しかし、ここでは音が壊れていました。非常に歪んだ!プライマリデバイスでのみ再生されます。ループで指定された再生が有効です!

さまざまな変更を試した後、asound.confの修正をテストしました。

pcm.!default {
    type plug
    slave.pcm "loopout"
}

問題が解決しました!基本デバイスがループの場合に機能します。効果がありませんでしたarecord -f cd -D loopin | aplay -f cd -D front。ループがどのように機能するかはわかりませんが、オーディオをキャプチャできます。それともALSAのバグですか? Debian を使用していますか?あなたに効果がありますか?

トラブルシューティングのための追加提案に関する注意事項:

ネットワークストリームをダンプするには:アプリケーションがデータを保存したくない場合は、トランスポートが暗号化されるとします(https???)。プレイヤーがサーバー証明書を検証しない場合、データをキャプチャする方法は?仲介者になってストリームをキャプチャする最も迅速で簡単な方法は何ですか?

Pulseaudio:Debian Wheezyでどのように実行しますか?ウィキペディアうまくいくと言ってください。そうではありませんでした。

/etc/init.d/pulseaudio start
[warn] PulseAudio configured for per-user sessions ... (warning).

発生する問題をどのように解決しますか? (ツール、診断?)

Jack:Jackをインストールする方法の簡単な説明が見つかりませんでした。かなり複雑に見えます。 Pulseaudioが実行されていると仮定しますか?文書が混乱しています。クイックスタート(動作していることを確認するためにインストールしてテストする方法)へのリンクはありますか?

ほとんどのオーディオアプリケーション(Fios Voicemail Java Playerなど)はPulseaudioまたはJackを再生できますが、オーディオをALSAに送信できないと思いますか?

答え2

"modprobe snd-aloop"を覚えていますか?私はそれを試して、youtube、pandora、tunein、vonage、およびasound.confで動作しました。このJavaプレーヤー。 Fiosに関するものかもしれませんが、テストするFiosはありません。この問題を引き起こす他の公開ウェブサイトを見つけることはできますか?

また、ファイルに録音して再生してみてください。

arecord -f cd -D loop > recording.wav
aplay -f cd -D hw:0,0 recording.wav

答え3

最高のアイデア

まず、あなたの質問を読んだらそうではありません。私はネットワークを聞いてストリームをキャプチャしようとしました。おそらく、単純な呼び出しでスクリプトを書くことができるかなり予測可能な場所にありますtshark。しかし、それは別の質問です。

ALSAの改善点

あなたの方法は有効な方法ですが、私はALSAを使用しません。ALSAはハードウェア抽象化レイヤです。私はほぼどこでも使えるサウンドデーモンPulseAudioを使います。これはもっと意味があります。空の受信機を作成します。

$ pactl load-module module-null-sink sink_name=MySink

このコマンドmodule idは私たちには役に立ちません。

これで環境変数を設定するだけですPULSE_SINK。 (上記の例では、シンク_名前は「MySink」です)

export PULSE_SINK=MySink;

あるいは、プログラムを開始すると、ヌルリスナーがPULSE_SINK=MySinkストリームをキャプチャします。

ファイルにストリーミングしたい場合は、次の手順を実行してください。

parec -v -d MySink.monitor | opusenc --raw --downmix-mono --bitrate 64 - out.opus

低ビットレートの作成は、電話の会話を録音するのに最適な選択です。

脚注:

  • また、欲しいかもしれません打つ前後の沈黙から抜け出してください。soxこれを行うには、ストリームに追加します。見man soxてくださいvad
  • 私たちは--downmix-monoステレオストリームを使用しています。最初のステップでchannels=1パラメータを送信したいと思う誘惑を感じることもできます。module-null-sink通話はすべてモノラルです。

答え4

JACKを使用することをお勧めします。 JACK Audio Connection Kitの再帰的な略語です。これは、特定のソフトウェア(あなたのJava再生ツール)から別のソフトウェア(録音ソフトウェア)にオーディオをルーティングするなど、あなたが行っている作業に合わせて調整されました。遅延時間が短い録音に適しており、希望の品質を得るのに役立つと思います。

これにより、コンピュータのすべてのソースからさまざまな録音ツールにオーディオを簡単にルーティングできます。実際には、次のような非常にクールなGUIがあります。QjackCtl

このページブラウザ(FlashおよびJavaツールも利用可能)からJackにオーディオをルーティングする方法について説明します。これを行う方法はシステムによって異なります。

たとえば、

あなたのものを修正する~/.asoundrc~/asound.conf

pcm.rawjack {
    type jack
    playback_ports {
        0 system:playback_1
        1 system:playback_2
    }
    capture_ports {
        0 system:capture_1
        1 system:capture_2
    }
}

pcm.jack {
    type plug
    slave { pcm "rawjack" }
    hint {
    description "JACK Audio Connection Kit"
    }
}

それからあなたは利用可能でなければなりません

arecord -D pcm.jack <file>

関連情報