web-dev-qa-db-ja.com

オーディオファイルをマイク/録音デバイスに挿入します

既存の録音を使用して、オーディオファイルを録音するプロセスをシミュレートする必要があります。

私はubuntu8.10を実行していて、これは非常に簡単だと思っていましたが、今ではそれほど単純ではないようです。

私がやりたいことの私の「コンセプト」は、


$ cat myaudio.wav > /dev/mic

入力をリッスン/待機している別のプログラムがあります。

編集:これを説明した方法からは明らかではないかもしれませんが、基本的には、事前に録音されたサウンドファイルをマイクデバイスにストリーミングして、マイク入力をスプーフィングしたいと思います。
できます


$ cat /dev/dsp > myfile.au 

生の入力をキャプチャし、


$ cat myfile.au > /dev/dsp

録音された入力をスピーカーにストリーミングするために、マイク/録音機能と同様のことができない理由について少し混乱していますか? Linuxの低レベルのサウンドについてはまだほとんど何も知りませんが、これが不可能なのは奇妙に思えます。

4
e7zkw9120

すべての回答をありがとう。これはかなりの学習経験であることが判明しました。特に、Linuxにはまだいくつかの厄介な領域があり、サウンドのセットアップは(おそらく最大の)そのうちの1つであることを学びました。

マイク入力をファイル(またはソケット)にキャットするのは非常に簡単です。直感的には、マイクが読み取るものにファイルをキャットするのも同様に簡単である必要があります。これにより、マイクから読み取るものはすべて、サウンドファイルを読み取ることができます。ただし、残念ながらそうではありません。

その結果、生のマイク入力の代わりにソケットでリッスンできるようにリスニングプログラムを変更することになりました。次に、マイク入力をソケットにリダイレクトする簡単なPerlクライアントを作成しました。



#!/usr/bin/Perl -w                                                                                                           
use strict;
use warnings;
use IO::Socket;

my $dspdev = '/dev/dsp';
my $port   = 8000;
my $Host   = "127.0.0.1";

my $sock = new IO::Socket::INET(
    PeerAddr => $Host,
    PeerPort => $port,
    Type     => SOCK_STREAM,
    Proto    => "tcp",
    ) || die "Couldn't open socket: $!\n";

open(DSP, "<", $dspdev)||die "can't open $dspdev: $!\n";

while( 1 ) {
    my $rbuf = "";
    sysread(DSP, $rbuf, 4096);
    syswrite($sock, $rbuf);
}

この段階では、これで十分ですが、必要以上に手間がかかったようです。私は解決策を考え出しましたが、実際には元の質問に答えていないので、これは開いたままにしておきます。

編集:これ以上注目を集めていないようであるため、これを閉じることにしました。

0
e7zkw9120

デバイスノードを他のものに置き換えます

デバイスノードを移動するか、サウンドライブラリを再コンパイルして別のものを開きます。そうすれば、独自のFIFO、偽のループバックサウンドドライバーなどを組み込むことができます。

1
Anders Eurenius

最初のステップは、alsa-utilitiesパッケージのインストールでした(RHEL/CentOSとコマンドラインのみを想定):yum install alsa-utils

次に、alsaミキサーのコマンドラインテキストユーザーインターフェイスで再生を有効にします。alsamixer

設定をテストするために、スピーカーテストユーティリティを使用しました:sp​​eaker-test -c2

スピーカーテストが実際にできることに少し夢中になったので、ここに小動物を困らせる楽しいものがあります:スピーカーテスト-c2 -t sine -f 4400

最後の部分は、録音が次のコマンドで機能するかどうかを確認することでした:arecord -v -f cd> soundfile.sound

そしてそれを再生します:aplay soundfile.sound

0
ForgeMan

自分で演奏して録音する

録音ソースを出力に設定できないかどうかを確認し、その後再生します。これはサウンドカードの一般的な機能だと思いますが、ハードウェアにそうするように説得する必要があります。

0
Anders Eurenius

レコーディングツールもPulseAudioを使用していると仮定すると、PulseAudioでこれを行うことができます。 ALSAは、オーディオに別のソースを使用するように構成できると確信しています。答えは、録音に使用しているアプリケーションと、それらが使用しているスタックによって異なると思います。

0
David Pashley

Vsoundもこれを行うのに役立ちます。そして、クールなことは、サウンドを何にでもループできることです。試してみる。 vsound.org

0
Peter