| 前一修订版 |
— | learing:examples:tone [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1 |
---|
| ====== Play a Melody using the tone() function(使用tone功能播放乐曲) ====== |
| |
| <WRAP left round info 65%> |
| 这个例子演示了怎样使用tone命令来产生音符。播放一小段你之前可能听过的乐曲。 |
| </WRAP> |
| |
| <WRAP left round box 100%> |
| ===== ALPHA MEGA328-U核心 ===== |
| ==== 硬件 ==== |
| * [[ocrobot:alpha:parallelexpansion:index|ALPHA 并行扩展板]] |
| * [[ocrobot:alpha:mega328-u:main|ALPHA MEGA328-U]] |
| * [[[ocrobot:alpha:buzzer:main|ALPHA 蜂鸣器模块]] |
| ==== 搭建电路 ==== |
| - ALPHA MEGA328-U模块插入并行扩展版1号槽位。 |
| - ALPHA 蜂鸣器模块插入并行扩展板2号槽位。 |
| - USB线连接计算机与ALPHA MEGA328-U。 |
| ==== 代码 ==== |
| |
| |
| <code cpp>/* |
| Melody |
| 播放音乐 |
| */ |
| #include "pitches.h" |
| |
| // 乐曲中的音符: |
| int melody[] = { |
| NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4}; |
| |
| // 音符长度: 4 = 四分音符, 8 = 八分音符 |
| int noteDurations[] = { |
| 4, 8, 8, 4,4,4,4,4 }; |
| |
| void setup() { |
| // 遍历音符 |
| dy: |
| for (int thisNote = 0; thisNote < 8; thisNote++) { |
| |
| // 为了计算音符长度,用一秒除以音符类型. |
| // 比如四分音符= 1000 / 4, 八分音符= 1000/8,等等. |
| int noteDuration = 1000/noteDurations[thisNote]; |
| tone(8, melody[thisNote],noteDuration); |
| |
| // 为了区分音符,在它们之间设置最小时间 |
| // 音符长度 + 30%似乎很奏效: |
| int pauseBetweenNotes = noteDuration * 1.30; |
| delay(pauseBetweenNotes); |
| // 停止播放: |
| noTone(8); |
| } |
| } |
| |
| void loop() { |
| // 不需要重复. |
| }</code> |
| |
| |
| 上面的代码用到了pitches.h文件。这个文件包含了典型单音音高的值。例如NOTE_C4是中音c,NOTE_FS4是高音F。这个音符表是Brett Hagman原创的,tone命令就是基于此。当你想创作音乐的时候你会发现它太有用了。 |
| 为了得到pitches.h 文件,点击右上角的new Tab按钮 |
| 然后粘贴以下的代码 |
| |
| <code cpp>/************************************************* |
| * Public Constants |
| *************************************************/ |
| |
| #define NOTE_B0 31 |
| #define NOTE_C1 33 |
| #define NOTE_CS1 35 |
| #define NOTE_D1 37 |
| #define NOTE_DS1 39 |
| #define NOTE_E1 41 |
| #define NOTE_F1 44 |
| #define NOTE_FS1 46 |
| #define NOTE_G1 49 |
| #define NOTE_GS1 52 |
| #define NOTE_A1 55 |
| #define NOTE_AS1 58 |
| #define NOTE_B1 62 |
| #define NOTE_C2 65 |
| #define NOTE_CS2 69 |
| #define NOTE_D2 73 |
| #define NOTE_DS2 78 |
| #define NOTE_E2 82 |
| #define NOTE_F2 87 |
| #define NOTE_FS2 93 |
| #define NOTE_G2 98 |
| #define NOTE_GS2 104 |
| #define NOTE_A2 110 |
| #define NOTE_AS2 117 |
| #define NOTE_B2 123 |
| #define NOTE_C3 131 |
| #define NOTE_CS3 139 |
| #define NOTE_D3 147 |
| #define NOTE_DS3 156 |
| #define NOTE_E3 165 |
| #define NOTE_F3 175 |
| #define NOTE_FS3 185 |
| #define NOTE_G3 196 |
| #define NOTE_GS3 208 |
| #define NOTE_A3 220 |
| #define NOTE_AS3 233 |
| #define NOTE_B3 247 |
| #define NOTE_C4 262 |
| #define NOTE_CS4 277 |
| #define NOTE_D4 294 |
| #define NOTE_DS4 311 |
| #define NOTE_E4 330 |
| #define NOTE_F4 349 |
| #define NOTE_FS4 370 |
| #define NOTE_G4 392 |
| #define NOTE_GS4 415 |
| #define NOTE_A4 440 |
| #define NOTE_AS4 466 |
| #define NOTE_B4 494 |
| #define NOTE_C5 523 |
| #define NOTE_CS5 554 |
| #define NOTE_D5 587 |
| #define NOTE_DS5 622 |
| #define NOTE_E5 659 |
| #define NOTE_F5 698 |
| #define NOTE_FS5 740 |
| #define NOTE_G5 784 |
| #define NOTE_GS5 831 |
| #define NOTE_A5 880 |
| #define NOTE_AS5 932 |
| #define NOTE_B5 988 |
| #define NOTE_C6 1047 |
| #define NOTE_CS6 1109 |
| #define NOTE_D6 1175 |
| #define NOTE_DS6 1245 |
| #define NOTE_E6 1319 |
| #define NOTE_F6 1397 |
| #define NOTE_FS6 1480 |
| #define NOTE_G6 1568 |
| #define NOTE_GS6 1661 |
| #define NOTE_A6 1760 |
| #define NOTE_AS6 1865 |
| #define NOTE_B6 1976 |
| #define NOTE_C7 2093 |
| #define NOTE_CS7 2217 |
| #define NOTE_D7 2349 |
| #define NOTE_DS7 2489 |
| #define NOTE_E7 2637 |
| #define NOTE_F7 2794 |
| #define NOTE_FS7 2960 |
| #define NOTE_G7 3136 |
| #define NOTE_GS7 3322 |
| #define NOTE_A7 3520 |
| #define NOTE_AS7 3729 |
| #define NOTE_B7 3951 |
| #define NOTE_C8 4186 |
| #define NOTE_CS8 4435 |
| #define NOTE_D8 4699 |
| #define NOTE_DS8 4978 |
| </code> |
| |
| 保存并重命名为 pitches.h |
| |
| </WRAP> |
| |
| <WRAP left round box 100%> |
| ===== ALPHA 8F328D-U核心 ===== |
| ==== 硬件 ==== |
| |
| ==== 搭建电路 ==== |
| |
| ==== 代码 ==== |
| </WRAP> |
| |
| <WRAP left round box 100%> |
| ===== MangoII ===== |
| |
| ==== 硬件要求 ==== |
| |
| |OCROBOT控制器| |
| |压电蜂鸣器| |
| |连接线| |
| |电路图| |
| |
| ==== 代码 ==== |
| |
| 下面的代码用到了pitches.h文件。这个文件包含了典型单音音高的值。例如NOTE_C4是中音c,NOTE_FS4是高音F。这个音符表是Brett Hagman原创的,tone命令就是基于此。当你想创作音乐的时候你会发现它太有用了。 |
| |
| <code cpp>/* |
| Melody |
| 播放音乐 |
| */ |
| #include "pitches.h" |
| |
| // 乐曲中的音符: |
| int melody[] = { |
| NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4}; |
| |
| // 音符长度: 4 = 四分音符, 8 = 八分音符 |
| int noteDurations[] = { |
| 4, 8, 8, 4,4,4,4,4 }; |
| |
| void setup() { |
| // 遍历音符 |
| dy: |
| for (int thisNote = 0; thisNote < 8; thisNote++) { |
| |
| // 为了计算音符长度,用一秒除以音符类型. |
| // 比如四分音符= 1000 / 4, 八分音符= 1000/8,等等. |
| int noteDuration = 1000/noteDurations[thisNote]; |
| tone(8, melody[thisNote],noteDuration); |
| |
| // 为了区分音符,在它们之间设置最小时间 |
| // 音符长度 + 30%似乎很奏效: |
| int pauseBetweenNotes = noteDuration * 1.30; |
| delay(pauseBetweenNotes); |
| // 停止播放: |
| noTone(8); |
| } |
| } |
| |
| void loop() { |
| // 不需要重复. |
| }</code> |
| |
| |
| 为了得到pitches.h 文件,点击右上角的new Tab按钮 |
| |
| 然后粘贴以下的代码 |
| |
| <code cpp>/************************************************* |
| * Public Constants |
| *************************************************/ |
| |
| #define NOTE_B0 31 |
| #define NOTE_C1 33 |
| #define NOTE_CS1 35 |
| #define NOTE_D1 37 |
| #define NOTE_DS1 39 |
| #define NOTE_E1 41 |
| #define NOTE_F1 44 |
| #define NOTE_FS1 46 |
| #define NOTE_G1 49 |
| #define NOTE_GS1 52 |
| #define NOTE_A1 55 |
| #define NOTE_AS1 58 |
| #define NOTE_B1 62 |
| #define NOTE_C2 65 |
| #define NOTE_CS2 69 |
| #define NOTE_D2 73 |
| #define NOTE_DS2 78 |
| #define NOTE_E2 82 |
| #define NOTE_F2 87 |
| #define NOTE_FS2 93 |
| #define NOTE_G2 98 |
| #define NOTE_GS2 104 |
| #define NOTE_A2 110 |
| #define NOTE_AS2 117 |
| #define NOTE_B2 123 |
| #define NOTE_C3 131 |
| #define NOTE_CS3 139 |
| #define NOTE_D3 147 |
| #define NOTE_DS3 156 |
| #define NOTE_E3 165 |
| #define NOTE_F3 175 |
| #define NOTE_FS3 185 |
| #define NOTE_G3 196 |
| #define NOTE_GS3 208 |
| #define NOTE_A3 220 |
| #define NOTE_AS3 233 |
| #define NOTE_B3 247 |
| #define NOTE_C4 262 |
| #define NOTE_CS4 277 |
| #define NOTE_D4 294 |
| #define NOTE_DS4 311 |
| #define NOTE_E4 330 |
| #define NOTE_F4 349 |
| #define NOTE_FS4 370 |
| #define NOTE_G4 392 |
| #define NOTE_GS4 415 |
| #define NOTE_A4 440 |
| #define NOTE_AS4 466 |
| #define NOTE_B4 494 |
| #define NOTE_C5 523 |
| #define NOTE_CS5 554 |
| #define NOTE_D5 587 |
| #define NOTE_DS5 622 |
| #define NOTE_E5 659 |
| #define NOTE_F5 698 |
| #define NOTE_FS5 740 |
| #define NOTE_G5 784 |
| #define NOTE_GS5 831 |
| #define NOTE_A5 880 |
| #define NOTE_AS5 932 |
| #define NOTE_B5 988 |
| #define NOTE_C6 1047 |
| #define NOTE_CS6 1109 |
| #define NOTE_D6 1175 |
| #define NOTE_DS6 1245 |
| #define NOTE_E6 1319 |
| #define NOTE_F6 1397 |
| #define NOTE_FS6 1480 |
| #define NOTE_G6 1568 |
| #define NOTE_GS6 1661 |
| #define NOTE_A6 1760 |
| #define NOTE_AS6 1865 |
| #define NOTE_B6 1976 |
| #define NOTE_C7 2093 |
| #define NOTE_CS7 2217 |
| #define NOTE_D7 2349 |
| #define NOTE_DS7 2489 |
| #define NOTE_E7 2637 |
| #define NOTE_F7 2794 |
| #define NOTE_FS7 2960 |
| #define NOTE_G7 3136 |
| #define NOTE_GS7 3322 |
| #define NOTE_A7 3520 |
| #define NOTE_AS7 3729 |
| #define NOTE_B7 3951 |
| #define NOTE_C8 4186 |
| #define NOTE_CS8 4435 |
| #define NOTE_D8 4699 |
| #define NOTE_DS8 4978 |
| </code> |
| |
| 保存并重命名为 pitches.h |
| </WRAP> |
| |