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


9

Verizon Fios電話からのボイスメールメッセージを可能な限り最高の品質で保存しようとしています。ボイスメールメッセージはオンラインで利用できますが、再生のみ(Javaベースのプレーヤー)の場合は保存できません。正式には、元のデジタルボイスメッセージをFiosデジタルボイスサービスからファイルとして保存する方法はサポートされていません(有料サービス、何もない、理由はありません)。

私の唯一のアイデアは、サウンドカードに行く途中でプレーヤーからデジタルデータを録音することでした。ループデバイスで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 kHzと48 Khzの両方をテストしました) )

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 kHzでモノラルかもしれないと思うので、周波数とフォーマットを変更してさまざまなことを試しましたが、何も役に立ちませんでした。

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


パルスではなく、なぜalsaを使用しているのですか?ブラウザレベルで作業したい場合でも、これはより良いオプションです。
エヴァンキャロル

@Evan Carroll-では、パルスを使用して問題をどのように解決しますか?
Martin Vegter、2014年

ベジーター:以下で私の答えを見つけてください。ただし、アプローチを再評価することを強くお勧めします。
エヴァンキャロル

回答:


5

興味深い質問ですが、昔、私は仮想オーディオおよびビデオドライバーを介して可能なデジタルオーディオおよびビデオの簡単な録音について考えていましたが、実現できませんでした。

私はあなたの設定ファイルを使用しましたが、あなたが説明したのとまったく同じ問題がありました。(私は確かに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).

何が起こっているのかトラブルシューティングするにはどうすればよいですか?(ツール、診断?)

ジャック:ジャックをインストールする簡単な手順は見つかりませんでした。かなり複雑に見えます。Pulseaudioが実行されていると想定していますか?ドキュメントは紛らわしいです。クイックスタートへのリンクはありますか(インストールしてテストし、動作することを確認する方法)。

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


よく働く!設定ファイルを変更した後、fiosから記録できるようになりました。どうもありがとう。
Martin Vegter 2014年

4

「modprobe snd-aloop」を覚えていますか?私はそれを試してみましたが、youtube、pandora、tunein、vonage、およびこのjavaプレーヤーの asound.confで動作します。Fiosに固有の可能性がありますが、テストするFiosがありません。問題の原因となっている別の公開サイトを見つけることができますか?

また、ファイルに録音してから再生します。

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

4

最高のアイデア

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

ALSAの改善

あなたの方法は有効なアプローチですが、私はALSAを使用しません。ALSAはハードウェアアブストラクションレイヤーです。PulseAudioのほぼすべてにあるサウンドデーモンを使用します。それはもっと理にかなっています。ヌルシンクを作成します。

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

そのコマンドはを返しますmodule id。それは私たちには役に立たない。

次に、環境変数を設定しますPULSE_SINK。(上記の例では、sink_nameは「MySink」です)

export PULSE_SINK=MySink;

または、プログラムを開始するとPULSE_SINK=MySink、そのnullシンクがストリームをキャプチャします。

それをファイルにストリーミングしたいときはいつでも、単に実行します:

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

低ビットレートのオーパスは、電話での会話を録音するのに最適です。

脚注:

  • また、前後の沈黙を取り除くこともできます。soxそのストリームに追加します。を見てman sox、を検索してくださいvad
  • --downmix-monoステレオストリームで使用しています。最初のステップでchannels=1引数をmodule-null-sinkに送信してみてください。電話はすべてモノラルです。

このソリューションを使用しようとすると、記録された出力に多くのスタッターとドロップアウトが含まれます。
H. Rittich

4

DebianでALSAループバックデバイスを無駄にセットアップするのに1時間以上費やした後、最も効果的で最も時間がかからないソリューションは、実際のデバイスを5分ではんだ付けすることでした。

真剣に、私はALSAループバックを有効にするためにカーネルを再コンパイルし、/ etc / asound.confと〜/ .asound.rcを微調整しましたが、結果は出ませんでした。

ループバックデバイス


0

JACKの使用を強くお勧めします。これは、JACK Audio Connection Kitの再帰的な頭字語です。それはまさにあなたがやっていることに合わせて調整され、オーディオをあるソフトウェアから、あなたの場合Java再生ツールから別のソフトウェア、つまり録音ソフトウェアにルーティングします。低レイテンシの録音に非常に適しており、探している品質を得るのに役立つと思います。

これを使用すると、コンピューター上の任意のソースからさまざまな録音ツールにオーディオを簡単にルーティングできます。実際、QjackCtlと呼ばれる非常に優れたGUIがあります。

このページでは、ブラウザー(FlashおよびおそらくJavaツール)からジャックにオーディオをルーティングする方法について説明します。これがどのように行われるかは、システムによって異なります。

例えば:

~/.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>

それだけの価値があるので、これはJACKを使用する理由としてまったく間違っています。JACKは低遅延です。pavucontrolあなたと同じことをしQjackCtl、いつでも動くことができますpacmd move-sink-input
エヴァンキャロル

1
ここで私の本物の好奇心。低レイテンシが悪いのはなぜですか?
TheHerk、2014年

そうではありません。ただし、デフォルトでJackを使用するディストリビューション2つあります。誰かがサウンドデーモンを、「低レイテンシ」以外の理由で事実上の選択になったものから変更することを主張することは、かなり悪い答えの方向です。
エヴァンキャロル2014年

あなたはプログラムをインストールすることは困難であるように聞こえる作るのpulseaudioと並んでちょうど罰金を運営しpasuspender -- jackd。それでも、ポスターに品質の問題がある場合は、とても簡単なことを試してみるとよいでしょう。また、QjackCtlを使用すると、レイテンシとxrunsに関する目に見えるフィードバックを提供する設定を非常に簡単に調整できます。これは、通常、オーディオが文字化けする原因です
TheHerk、2014年

そして、あるプログラムが(PulseではなくJACKで)nullシンクに対して再生しているために、Pulseドライバーを使用している他のものが動作を停止する理由をポスターが不思議に思ったとき、どうしますか?
エヴァンキャロル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.