SoX:我能同时发出声音吗?

时间:2018-03-02 16:41:09

标签: bash sox

我使用SoX生成这个声音:

$ play -n synth 1 pluck E3 repeat 2

我设法同时播放另一个模式一个新的终端标签,让我们说$ play -n synth 1.5 pluck C3 repeat 2。在同一个bash脚本中是否有同时出现这两种模式的方式?

2 个答案:

答案 0 :(得分:3)

这可以满足您的需要,在左声道播放E3,在右声道播放C3:

running every 2 seconds
_12
_13
_1
_11
_21
____ ,_1,,,,,,,,,,_11,_12,_13,,,,,,,,_21

如果要在两个通道上同时演奏两个音符,请添加通道效果:

$ play -n synth 1 pluck E3 pluck C3 repeat 2

摘录自SoX手册,合成效果 http://sox.sourceforge.net/sox.html

  

...可以合成多个合成器效果以产生更复杂的波形; ...

答案 1 :(得分:1)

要解决在同一终端中同时运行两个play命令的特定问题,以下是对将两个命令与&绑定时发生的情况的解释和变通方法:

$ play -n synth 1 pluck E3 & play -n synth 1 pluck E3
[1] 15682

(snipped information about audio file)

In:0.00% 00:00:01.02 [00:00:00.00] Out:48.0k [      |      ] Hd:0.0 Clip:0
Done.

[1]+  Stopped                 play -n synth 1 pluck E3
$ fg
play -n synth 1 pluck E3
In:0.00% 00:00:01.02 [00:00:00.00] Out:48.0k [      |      ] Hd:0.0 Clip:0  
Done.

看到[1]+ Stopped行吗?这意味着您的第一个play进程已进入睡眠状态。这就是为什么我必须运行fg来唤醒它并将其带到前台的原因。

为什么停止了?因为第一个play命令试图向终端读取或写入某些内容,所以只允许前台处理(第二个play命令)。作为后台进程,它收到了SIGTTIN或SIGTTOU信号,迫使其停止。

如何解决此问题?通过阻止背景play来向终端读取和写入任何内容:

play -n synth 1 pluck E3 < /dev/null > /dev/null 2>&1 & { sleep 0.5; play -n synth 1 pluck E3; }

--no-show-progress-q)和-V0选项似乎足够,尽管我不能保证您会在每种情况下都能正常工作,这与上面的命令相反:

play -q -V0 -n synth 1 pluck E3 & { sleep 0.5; play -n synth 1 pluck E3; }