使用文件而不是stdin和stdout来播放到arecord的管道

时间:2018-06-07 17:52:01

标签: alsa libalsa

下面的命令将记录默认设备中的数据并将其输出到stdout上,aplay将播放stdin中的数据。

arecord -D hw:0  | aplay -D hw:1 -

为什么我们更喜欢stdin和stdout而不是写入文件并从中读取它?

arecord -D hw:0 test.wav | aplay -D hw:1 test.wav

1 个答案:

答案 0 :(得分:0)

使用管道进行此操作比使用文件更有效,因为以下原因:

1)管道(|)是一种进程间通信技术。使用基于内核的缓冲区将一个进程的输出直接发送到另一进程的输入。因此,与将某些内容写入硬盘中的文件并从中读取文件相比,这提供了更快的速度。但是,这也取决于其他因素。通常,内核还会从缓冲区和磁盘缓存中读写小文件。

2)使用进程间通信技术也有助于并行操作。相反,如果您必须先向文件中写入内容,然后再从文件中读取内容,则必须分步执行它,因此您将失去并发性。

我想你是说

arecord -D hw:0 test.wav && aplay -D hw:1 test.wav

代替

arecord -D hw:0 test.wav | aplay -D hw:1 test.wav