$ chuck 1. Simple Sine Wave.ck
查克(Chuck)有一系列发出噪音的校准器。我们将要探索的第一个单位生物体称为Sinosc。这是一个简单的正弦波,在440赫兹以半体积发射单个基本频率。使用=> oterator,将SINOSC“插入” DAC对象。 DAC对象或数字音频转换器是计算机与外部扬声器或声卡的连接。将=>运算符视为补丁电缆或将正弦波的音频输出连接到扬声器中的插头。
SinOsc s => dac;
s.gain(0.5);
s.freq(440);
仅此代码不会产生声音。要产生声音,我们必须告诉程序,声音将持续多长时间。查克将时间单元应用于现在的对象。现在代表当前时间加上现在“ chuck”到现在的额外时间。在此示例中,我们只想处理声音一秒钟。因此,我们“ Chuck” 1秒至现在。
1::second => now;
运行完整程序在440Hz(半体积)中产生平稳的音调,持续1秒钟。尝试使用设置。更改创建声音新变化的音调,音量或时间。咨询Chuck文档,然后将正弦波更改为锯齿或方波。这些声音有何不同?
让我们现在做一些音乐吧!在本课程中,我们将采用基本的基本原理表第一章,并简单地安排一系列笔记以制作简单的旋律。
音乐以其最基本的形式是在不同的音调,持续时间和间隔中播放的一系列声音事件。在此示例中,我们只需以1/4秒的间隔播放相同的持续时间。对于每个事件,我们都会播放一个简单的音调。
实现这一点并不困难。我们需要做的就是从第1章复制并粘贴代码,并构建4个注释事件的序列。在这一点上,我们可以更改每个音符事件的频率,并创建几乎听起来音乐音乐的事件模式。在这里,我们将第二个音符分为一半,将第三个音符乘以2,然后将最终音符乘以2.5。
// Set frequency (hertz) and volume of Sine Wave
s.gain(0.5);
s.freq(440);
// Process program for a duration of 1/4 second
0.25::second => now;
// Set frequency (hertz) and volume of Sine Wave
s.gain(0.5);
s.freq(220);
// Process program for a duration of 1/4 second
0.25::second => now;
// Set frequency (hertz) and volume of Sine Wave
s.gain(0.5);
s.freq(880);
// Process program for a duration of 1/4 second
0.25::second => now;
// Set frequency (hertz) and volume of Sine Wave
s.gain(0.5);
s.freq(1100);
// Process program for a duration of 1/4 second
0.25::second => now;
几次运行程序,看看您是否可以将序列更改为您喜欢的序列。您可以复制自己喜欢的歌曲之一吗?您将如何将赫兹转换为音符?像这样的音乐排序会让人感到尴尬吗?什么会使这更容易?
在第2章中,我们成功创建了第一个旋律。这是不小的壮举!计算机非常擅长根据一系列说明采取行动。鉴于我们已经知道的是,任何旋律或歌曲都可以通过复制和粘贴来复制。一段时间后,以这种方式创作音乐变得乏味和毫不动摇。必须有一种更简单的方法。
音乐旋律经常在所谓的短语中多次重复多次。短语本质上是循环。电子和嘻哈音乐层循环以创建多节律纹理,循环相互作用并互相发挥作用。对我们来说幸运的是,编程中有一个完美的控制结构来复制这种行为 - while循环。
可以重复指令来创建音乐短语,而不是复制和粘贴每个音符。在Chuck中,While循环由While关键字和卷曲括号构造,以包含将重复的指令序列。在此示例中,我们将无限地重复指令或直到程序终止。
// Loop Repeats while true is true (aka forever!)
while(true) {
//instructions go here
}
通常,我们不会用无限循环编写计算机程序!这通常是在编程中避免的,因为它将悬挂程序并防止程序执行其他零件或代码并将永远运行。在查克(Chuck),正如我们很快发现的那样,有多种方法可以终止和启动程序。在音乐中,我们可能想即兴创作,让无限的循环在一段时间内建立凹槽。
为了使循环更有趣,我们将介绍两个新库 - STD和数学。 STD代表标准库,是可以在我们程序中使用的有用实用方法的集合。 STD具有称为“ MTOF”或“ MIDI到频率”的方法。在计算机音乐中,钢琴上的12个音符比例表示为0-127之间的上升音高。八度音符是12个音符,有10个八度音阶。钢琴上的中间C代表60岁。如果您不限于音乐知识,请不要担心!使用0-127之间的任何值都将自动为我们提供标准的西方调整。 MIDI笔记当然可以更容易使用和理由。
MTOF是一种获取输入并返回值的方法。我们将输入一个MIDI音符值,例如60,MTOF将返回Hertz中的相应值。我们可以通过编写一个打印std.mtof(60)输出的小程序来观察这一点。 Chuck使用<<< >>>符号来打印返回值以进行调试目的。
<<< Std.mtof(60) >>>;
261.625565 :(float)
如您所见,当我们尝试将西方音符纳入旋律中时,赫兹中的歌曲开始变得越来越棘手。为了使事情变得更容易,我们将使用数学库生成一些随机笔记。数学具有称为Random2的函数,该函数的输入为2个数字。 2个数字代表第一和第二个数字之间的范围。
我们可以通过在一组数字之间随机化并乘以12个随机化八度,注释会出现12个音符。当我们将音符转换为频率时,SINOSC可以将频率作为输入并发出声音!
Std.mtof(60 + (Math.random2(0,3) * 12)) => s.freq;
将所有内容整合在一起,我们可以将算法包裹在当时的循环中。这是使用Code的音乐的优点之一。随着我们朝着更复杂的程序迈进,我们可以开始创建只能通过计算机编程才能实现的音乐。这被称为算法组成。
// Sine Wave connected to audio out
SinOsc s => dac;
while(true) {
// Set midi musical note
// with randomly selected octaves
Std.mtof(60 + (Math.random2(0,3) * 12)) => s.freq;
// Play for 1/4 of a second
0.25::second => now;
}
尝试更改序列的速度。当您将中间c笔记更改为另一个注释时会发生什么?听起来如何12或24个音符下降?如果您更改多重价值,这首歌是否会变得或多或少会成为音乐剧?当您听到足够多的声音时,就可以在键盘上击中CTRL-C!
即将推出!
即将推出!
即将推出!
即将推出!