Ruby:生成Morsecode声音文件

Ruby:生成Morsecode声音文件,ruby,audio,morse-code,Ruby,Audio,Morse Code,我正在训练用耳朵读莫尔斯电码;) 为了训练自己,我编写了一个小ruby脚本,使用命令行sox(见下文)生成声音文件。它基本上只需要预先制作的声音文件dits、dahs和多个空格(在dits和dahs之间,字母之间和单词之间)并将它们粘在一起。它可以工作,但是目标文件越大,速度就越慢 有没有一种更聪明的方法可以用ruby将声音生成为wav文件 使用MAc OS X命令生成包含Übungsende等(测试开始、测试结束、第一组、第二组等)的文件 say -v Steffi --file-forma

我正在训练用耳朵读莫尔斯电码;)

为了训练自己,我编写了一个小ruby脚本,使用命令行
sox
(见下文)生成声音文件。它基本上只需要预先制作的声音文件
dit
s、
dah
s和多个空格(在
dit
s和
dah
s之间,字母之间和单词之间)并将它们粘在一起。它可以工作,但是目标文件越大,速度就越慢

有没有一种更聪明的方法可以用ruby将声音生成为wav文件


使用MAc OS X命令生成包含
Übungsende
等(测试开始、测试结束、第一组、第二组等)的文件

say -v Steffi --file-format=WAVE --data-format=LEF32@22500 -o uebungsanfang.wav "Anfang der Übung."
我已将文件(最多“Gruppe 5”,即“第5组”)上传到此处:
https://docs.google.com/open?id=0B4QwMfBGRCjVbE5iZHpHMHBKT3c

我不懂ruby,所以我不能完全确定我知道你在做什么,但看起来你正在生成表示点、破折号、空格等的音频文件,然后使用sox将这些文件中的原始数据连接到一个新文件,然后使用lame将其转换为mp3

总而言之,这是非常低效的,主要是因为您对可以动态生成的原始文件进行了大量处理。也就是说,它可能不值得以最有效的方式重写——毕竟,执行所有文件IO使代码变得简单。因此,我会重写代码,使文件IO尽可能快。在这种情况下,反复打开和解析WAV文件,尤其是32位浮点WAV文件,可能会降低速度。对于你正在做的事情,你绝对不需要它。我将首先使用16位整数WAV文件


为了获得更高的速度,可以尝试一种更简单的格式作为中间格式,比如(如果足够好,可以使用u-定律,如果不够好,可以使用16位线性)。您也可以尝试使用“原始”文件,即“无头”文件——只需告诉sox和lame取样器、位深度、端度和要使用的样本数。然后,您不需要使用sox来连接原始数据,您可以使用“cat”unix工具,这可能会快一点。

谢谢,我怀疑IO是问题所在。我会尽快尝试你的建议。
sox -e floating-point -r 22500 -n -t wav - synth 0.3 sin 0 > letterspace.wav
say -v Steffi --file-format=WAVE --data-format=LEF32@22500 -o uebungsanfang.wav "Anfang der Übung."