将音频文件放入麦克风/录音设备

e7z*_*120 6 linux ubuntu audio

我需要使用现有录音来模拟录制音频文件的过程。

我正在运行 ubuntu 8.10 并认为这会很简单,但现在似乎并不那么简单。

我想要做的“概念”是,


$ cat myaudio.wav > /dev/mic
Run Code Online (Sandbox Code Playgroud)

还有另一个程序正在监听/等待输入。

编辑:也许我的解释方式并不清楚,但我想通过将预先录制的声音文件流式传输到麦克风设备来基本上欺骗麦克风输入。
我可以


$ cat /dev/dsp > myfile.au 
Run Code Online (Sandbox Code Playgroud)

捕获原始输入,以及


$ cat myfile.au > /dev/dsp
Run Code Online (Sandbox Code Playgroud)

将录制的输入流式传输到我的扬声器,所以我有点困惑为什么我不能用麦克风/录音功能做类似的事情?我仍然对 linux 上的低级声音几乎一无所知,但这似乎是不可能的。

e7z*_*120 1

感谢您的所有回复。事实证明这是一次很好的学习经历。特别是我了解到 Linux 仍然有一些粗糙的地方,声音设置是(也许是最大的)其中之一。

将麦克风输入放入文件(或套接字)中非常容易,直观上,将文件放入麦克风读取的任何内容中应该同样简单 - 以便从麦克风读取的任何内容都可以读取所述声音文件。然而,不幸的是事实并非如此。

结果,我最终修改了监听程序,以便它可以监听套接字而不是原始麦克风输入。然后我编写了一个简单的 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);
}
Run Code Online (Sandbox Code Playgroud)

在这个阶段,这就是我所需要的,但似乎需要付出比应有的更多努力。我已经想出了一个解决方案,但实际上我还没有回答我原来的问题,所以我将保持开放。

编辑:决定关闭它,因为它似乎没有引起更多关注。