压电音乐:Adruino新手的入门指南

嘿,你。 是的,就是你。 你喜欢音乐吗? 你喜欢编码吗? 您是否碰巧挂了一个Arduino,一块面包板,一些电线和几个压电蜂鸣器? 如果您对所有这些回答都是肯定的,那么,男孩,我能为您提供一些启发性的信息吗?

通过拥有我问过的这些问题,您可以制作自己的现场合成音乐! 这是关于我如何做这样的事情的教程,并希望您也可以做这样的事情。

入门

在本教程中,我基本上将对音乐进行编码。 知道了这一点,能够使用高级语言(即Haskell,Ocaml等)编程就很好了,这样就可以抽象出机器的繁琐细节,就像我是莫扎特一样写音乐。

等一下,我听到的是什么? Ocaml有一个Arduino库吗? 大! 让我们下载并使用它。

嗯,好的,显然我需要一些依赖关系,这将使我永远无法找到并安装。 所以我想Ocaml是不行的。

那是什么? 您是否说过Haskell有一个Arduino库? 好吧,我只是看了一下,显然它只适用于较旧版本的Firmata(Arduino硬件的软件方面难以理解),所以我猜Haskell是不行的。

哦,多么方便! 有一个名为Juniper的功能性Langauge是为Arduino本身而构建的! 哦,不。显然,它只能在Windows和Linux上编译。而且我有Mac。

好吧,我想如果您真的想为您的Arduino项目使用高级语言,那将花费大量的时间和意愿。 如果您想出办法,请写一篇中型文章,并给我发送链接。 除此之外,对于该项目,我将使用C。 对于您的项目,您可以通过在Arduino IDE中编写C代码(或C ++代码,如果您没有骄傲的话)来轻松上手。

对于此项目,我强烈建议不要使用Arduino提供的本地声音功能,而应安装此功能。 这是我将要使用的库。

您将需要:一台笔记本电脑,一个Arduino,三个压电蜂鸣器,一个面包板,一些电线以及一些时间。

布线

首先,让我们通过一条黑线(任何颜色的工作原理相同,我选择的颜色仅用于组织)为整个面包板供电,就像我在这张图片中一样,将其从Arduino的GND点连接到角落电源轨:

现在,将压电蜂鸣器放在板子的黑色电线侧,其“正”端朝向电线。 现在,您可以通过将一条黄色电线从Arduino的每个引脚端口连接到每个蜂鸣器的正极,来选择哪个蜂鸣器代表哪个引脚。 要将蜂鸣器连接到电源,每个蜂鸣器的另一端必须通过蓝线连接到电源导轨。 这是一张更好的照片,描述了我的所作所为:

为了使声音更加优美,我在每个蜂鸣器的顶部都贴了胶带,以使其声音更大,音调不同。

编码音乐

让我们使用我告诉过的那个很棒的图书馆。

  #include  

为了更聪明,我将空音(静止或无声音)定义为-1。

  #定义NOTHING -1 

我们拥有的蜂鸣器数量就是我们拥有的乐器数量。

  const int numOfInst = 3; 
音调工具[numOfInst];

现在,我们可以将这些乐器分配给针脚本身。

  int pins_ [numOfInst] = {8,13,4}; 

让我们将一些和弦定义为三重音符。

  int c_major [3] = {NOTE_C4,NOTE_E4,NOTE_G4}; 
  int a_minor [3] = {NOTE_A4,NOTE_E4,NOTE_C4}; 
  int b_bass [3] = {NOTE_B2,没什么,没什么}; 
  int g_bass [3] = {NOTE_G2,没什么,没什么}; 
  int a_bass [3] = {NOTE_A2,没什么,没什么}; 
  int e_bass [3] = {NOTE_E2,没什么,没什么}; 
  int b_d_bass [3] = {NOTHING,NOTE_B3,NOTE_D3}; 
  int a_d_bass [3] = {NOTHING,NOTE_A3,NOTE_D3}; 
  int a_cs_bass [3] = {NOTHING,NOTE_A3,NOTE_CS3}; 

如何开始演奏这些和弦?

  void playChord(int * chrd){ 
对于(int i = 0; i <numOfInst; i ++){
if(chrd [i]!= NOTHING){Instruments [i] .play(chrd [i]);}
}
}

如何停止演奏这些和弦?

 无效stop_chord(){ 
for(int i = 0; i <numOfInst; i ++){Instruments [i] .stop();}
}

现在这里是一些重要信息。 请勿使用延迟功能。 有些人不喜欢延迟功能,因为它正在阻塞(即暂停该过程直到完成),但这对我来说还可以,实际上是我想要的功能。 但是,在使用该函数时,该函数在多个随机情况下开始不确定地运行,从而终止了我与其的亲密关系。 因此,只需创建您自己的延迟函数,这就是我的:

 无效my_delay(int milsec){ 
int c = 1;
为(int i = 0; i <milsec; i ++){
c = c *(-1); Serial.print(“延迟运行\ n”);
}
}

通过进行计算并为每个循环将一些内容打印到Serial上,我将一些东西放在了骨头上。 您不必像我一样奇怪。

现在让我们声明一个速度。

  int tempo = 22; 

这是我新建的音乐系统中的一种量度。

  //一项措施 
playChord(b_bass);
my_delay(节奏);
stop_chord();
  playChord(b_d_bass); 
my_delay(tempo / 2);
stop_chord();

my_delay(速度+(速度/ 2));

playChord(b_d_bass);
my_delay(速度/ 2);
stop_chord();
  my_delay(速度/ 2); 

在播放任何歌曲之前,必须将乐器初始化为各自的引脚。

  for(int i = 0; i <numOfInst; i ++){Instruments [i] .begin(pins_ [i]); 
}

最终产品

所以这是大家一直在等待的时刻。 这是我利用Arduino,压电蜂鸣器和INSANE夏威夷四弦琴的技巧所创造的。

为什么要这样?

好问题,显然是我的人。 作为音乐家,有许多方法可以与音乐制作联系起来。 人们经常在白天和黑夜之间比较声学乐器和计算机化乐器。 人们声称声学具有新颖性和传统性,而电子产品具有多样性和人造的性质。 但是,在大多数情况下,当我们的音乐家使用合成音乐时,我们与音乐本身的合成之间存在很大的吸引力。 我自己通过从头开始制作现场合成音乐,我发现在此过程中有很多新颖性和未开发的创造力。 它确实模糊了我们认为纯声学和纯合成之间的界限。

我通常希望人们对他们的音乐更具互动性和探索性。 这样做打开了可能从未想像过,从未感受到过的新感觉和新想法的大门。 如果那需要在Arduino作为您的后援歌手的夏威夷四弦琴上演奏Despacito,那就顺其自然了。

如果您喜欢黑客,我目前正在使用自己的编程语言,您可以在这里查看。

或者,如果您喜欢奇怪的音乐,请查看我的soundcloud。