二郎音:如何将二郎音作为乐器来使用

2020-09-12 00:49:53

当大多数人想到Erlang时,他们会想到处理大量并发用户的庞大业务平台。这通常是准确的,但我们想展示一个不那么传统但有趣的项目,您可以在Erlang中完成。Sam Aaron的Sonic Pi是一个很棒的基于代码的音乐创作和表演工具。这是一项伟大的创新,利用了Erlang,它可能会成为音乐未来的重要组成部分。你可以在这里看到音速圆周率的一个例子。

我们受此启发,决定更进一步,展示如何用Erlang直接编码音乐。

在我们用Erlang创作音乐之前,有必要解释一下声音实际是什么背后的一些基本理论;这稍后会派上用场的。

频率是指每单位时间内重复事件的发生次数。它的基本单位是赫兹,这是每秒发生的次数。

周期是重复事件中一个周期的持续时间。周期是频率的倒数。

产生波的最简单方法是提供给定频率的正弦波。

计算机工作在离散域,而正弦波工作在连续域;因此,采样用于将材料从连续域转换为离散域。

我们近似的样本越多,我们的声音质量就越好,但这也会使我们存储近似的文件变得更大。

首先创建一个新项目。由于脚本很小,我将使用脚本模板:

要保存生成的wave,我们需要将浮点数列表转换为二进制表示形式,并将此二进制表示形式写入文件。

Save(Filename,Wave)->;Content=List:Foldl(Fun(Elem,ACC)->;<;<;ACC/Binary,ELEM/Float>;>;End,<;<;";>;&>;,Wave),ok=FILE:WRITE_FILE(文件名,内容)。

存储库中应该会显示一个名为out/first_wave e.raw的新文件。然后使用ffplay收听结果: