使用文件而不是 stdin 和 stdout 将 aplay 管道传输到 arecord

aplay piping to arecord using a file instead of stdin and stdout

以下命令将从默认设备记录数据并将其输出到标准输出,aplay 将从标准输入播放数据。

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

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

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

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

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