我使用SoX生成这个声音:
$ play -n synth 1 pluck E3 repeat 2
我设法同时播放另一个模式一个新的终端标签,让我们说$ play -n synth 1.5 pluck C3 repeat 2
。在同一个bash脚本中是否有同时出现这两种模式的方式?
答案 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; }