ファイルからマイクにオーディオデータをフィードする方法を探しています。などのサードパーティアプリケーションやChromiumの「search by voice」機能などのマイクを使用している場合オーディオ入力の場合は、代わりにファイルからオーディオデータを受信します。Linuxパイプオーディオファイルからマイク入力
ここに私のシナリオ:私が書いたアプリケーションは、(ALSAを使って)マイクからオーディオデータを記録し、それをファイル(audioFile0.raw)に保存します。未知の時点では、未知の第三者アプリケーション(Chromium Webブラウザの「音声による検索」機能などの開発コントロールがないように、私が開発していないものもあります)のマイクを使用します音声データを取得する。サードパーティのアプリケーションが集めているオーディオデータを、実際のマイク自体ではなく、audioFile.rawから取得したいと思います。
デフォルトのオーディオ入力デバイスをオーディオファイルまたは名前付きパイプに変更して、cat audioFile0.raw > mypipe
のようなものを実行することができたと思っていました(別のアプリケーションがマイクから読み込もうとしたとき)。おそらくこれを行うもっと簡単な方法がありますか?
私は十分な詳細と明確さを提供したいと思います。何かが不明な場合は教えてください。
EDIT: は、だから私は自分のホームディレクトリに、次の.asoundrcファイルを作成することにより、仮想マイクを作る方法を考え出し:
pcm.!virtmic {
type file
slave.pcm "hw:0,0"
file /dev/null
infile "/home/charles/audioFiles/audioFile0.raw"
}
pcm.!default {
type hw
card 0
}
ctl.!default {
type hw
card 0
}
は、私は、コマンドラインからarecord test.raw -c 1 -f S16_LE -r 16000 -t raw -D virtmic
を呼び出し、私はaudioFile0.raw
にあるオーディオデータをtest.raw
に録音できます。
マイクにアクセスするアプリケーションが実際のマイク自体ではなくaudioFile0.raw
のオーディオデータを読み込むように、デフォルトのデバイスをマイクに置き換えることが私の目標です。だから私は、次のように表示されるように私の.asoundrcファイルを編集した:
pcm.!virtmic {
type file
slave.pcm "hw:0,0"
file /dev/null
infile "/home/charles/audioFiles/audioFile0.raw"
}
pcm.!default {
type asym
playback.pcm {
type hw
card 0
}
capture.pcm {
type plug
slave.pcm "virtmic"
}
}
ctl.!default {
type hw
card 0
}
それから私は、コマンドラインからarecord test.raw -c 1 -f S16_LE -r 16000 -t raw
と呼ばれます。私はtest.raw
を再生しましたが、それはマイク自体からの録音であり、audioFile0.raw
ではないようです。
私は間違っていますか?マイクの入力ではなくaudioFile0.raw
のデータを読み込むように、デフォルトのキャプチャデバイスをどのくらい正確に変更しますか?
EDIT 2:わかりましたので、私は正しい軌道に乗っていました。私は私が前に示した私のホームディレクトリに同じ.asoundrcファイルを使用しています。どこにデフォルトデバイスをvirtmicに変更しましたか? 、
# PulseAudio alsa plugin configuration file to set the pulseaudio plugin as
# default output for applications using alsa when pulseaudio is running.
hook_func.pulse_load_if_running {
lib "libasound_module_conf_pulse.so"
func "conf_pulse_hook_load_if_running"
}
@hooks [
{
func pulse_load_if_running
files [
# "/usr/share/alsa/pulse-alsa.conf"
"/home/charles/.asoundrc"
]
errors false
}
]
私がやった唯一の事は、ライン"/usr/share/alsa/pulse-alsa.conf"
をコメントアウトので、PulseAudioはプラグインがALSAを使用してアプリケーションのデフォルトではありません"/home/charles/.asoundrc"
に置き換えた:私は、ファイル/usr/share/alsa/alsa.conf.d/pulse.conf
を変更するために必要なので、それはこのようになりますむしろ私のバーチャルマイクをデフォルトとして使います。これは最良の解決策ではないかもしれませんが、機能します。
これは私がarecord test.raw -t raw -c 1 -f S16_LE -r 16000
をしたときに機能しました。マイクの代わりにaudiofile0.raw
のデータがあります。私は、コマンドlsof /dev/snd/*
を使用して、arecord
コマンドが実行されている間、オーディオデバイスに正確に何がアクセスしていたかを確認しました。次のように出力されました:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
pulseaudi 2044 charles 22u CHR 116,6 0t0 8977 /dev/snd/controlC0
pulseaudi 2044 charles 29u CHR 116,6 0t0 8977 /dev/snd/controlC0
arecord 4051 charles mem CHR 116,5 8976 /dev/snd/pcmC0D0c
arecord 4051 charles 4u CHR 116,5 0t0 8976 /dev/snd/pcmC0D0c
私はその後、クロムのブラウザの「検索音声による」機能を使用してみましたし、私はそれがaudioFile0.raw
から録音することができなかったことを見ました。次に、lsof /dev/snd/*
を使用して、オーディオデバイスに正確にアクセスしていたものを確認しました。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
pulseaudi 2044 charles mem CHR 116,5 8976 /dev/snd/pcmC0D0c
pulseaudi 2044 charles 22u CHR 116,6 0t0 8977 /dev/snd/controlC0
pulseaudi 2044 charles 29u CHR 116,6 0t0 8977 /dev/snd/controlC0
pulseaudi 2044 charles 30r CHR 116,33 0t0 7992 /dev/snd/timer
pulseaudi 2044 charles 31u CHR 116,5 0t0 8976 /dev/snd/pcmC0D0c
私は、彼らはすべての彼らはすべてのALSA経由つもりはない、PulseAudioはデーモンを使用している同じPID、2044を持っていることがわかります。
私の質問:私は、オーディオ入力のためのpulseaudioを通過するすべてのアプリケーションではなく、私のファイルではなく、マイクからの音声データを取得しますデフォルトでは、私の仮想マイクを使用するのpulseaudioを取得するにはどうすればよいですか?
[aplayからcentosのarecordへの出力パイプライン]の可能な複製(http://stackoverflow.com/questions/42843128/piping-output-from-aplay-to-arecord-in-centos) –
@CL。私が間違っていれば私を訂正してください。その場合、録音アプリケーションがわかっているようです(_arecord test.raw -r 8000 -t raw_)。私の場合、どのアプリケーションがマイクロフォンにアクセスするのかを制御することはできません。マイクから読み込んで、ファイルから読み込むアプリケーションが必要です。 – cheerupcharlie
'arecord'呼び出しはデバイス名を指定せず、デフォルトのデバイスを使用しています。 (そして、プログラムが明示的に別のデバイス名を使用することは常に可能です。) –