2014年12月24日 星期三

Lab07-ARDUINO UNO R3 :第7個實驗練習-無源BUZZER MIDI 聖誕歌曲-Jingle Bell


//來應景下吧,送給親愛的人!
//Cooper Maa 之buzzer 聖誕版

#include "C:/pitches.h"  // "pitches.h" ==改成 "C:/pitches.h ,then compiler find it
// notes in the melody:
int melody[] = {
  NOTE_G4, NOTE_G4 ,NOTE_E5, NOTE_D5, NOTE_C5, NOTE_G4,//雪花隨風飄 1
  NOTE_G4, NOTE_G4, NOTE_E5, NOTE_D5, NOTE_C5, NOTE_A4,//花鹿在奔跑 2
  NOTE_A4, NOTE_A4, NOTE_F5, NOTE_E5, NOTE_D5, NOTE_A4,//聖誕老公公 3
  NOTE_G5, NOTE_G5, NOTE_F5, NOTE_D5, NOTE_E5, NOTE_C5,//駕著美麗雪橇 4
  NOTE_G4, NOTE_G4, NOTE_E5, NOTE_D5, NOTE_C5, NOTE_G4,//經過了原野 5
  NOTE_G4, NOTE_G4, NOTE_E5, NOTE_D5, NOTE_C5, NOTE_A4,//越過了小橋 6
  NOTE_A4, NOTE_F5, NOTE_E5, NOTE_D5, NOTE_G5, NOTE_G5, NOTE_G5, NOTE_G5,//跟著和平歡喜歌聲 7
  NOTE_A5, NOTE_G5, NOTE_F5, NOTE_D5, NOTE_C5,//翩然地來到 8/// 65421
  NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,//叮叮噹叮叮噹 9
  NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5, NOTE_E5,//鈴聲多響亮 10
  NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,//你看他呀不避風霜 11
  NOTE_E5, NOTE_D5, NOTE_D5, NOTE_C5, NOTE_D5, NOTE_G5,//面容多麼慈祥 12
  NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,//叮叮噹叮叮噹 13
  NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5, NOTE_E5,         //鈴聲多響亮 14
  NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,//他給我們帶來幸福 15
  NOTE_G5, NOTE_G5, NOTE_F5, NOTE_D5, NOTE_C5}; //家喜洋洋 16
  int duration[] = {
  250,250,250,250,250,500,  //1雪花隨風飄
  250,250,250,250,250,500,  //2花鹿在奔跑
  250,250,250,250,250,500,  //3聖誕老公公 
  250,250,250,250,250,1500, //4駕著美麗雪橇
  250,250,250,250,250,500,  //5經過了原野
  250,250,250,250,250,500,  //6越過了小橋
  250,250,250,250,250,250,250,250,//7跟著和平歡喜歌聲
  250,250,250,250,500,            //8翩然地來到
  250,250,500,250,250,500,        //9叮叮噹叮叮噹
  250,250,250,250,500,            //10鈴聲多響亮
  250,250,250,250,250,250,250,250,//11你看他呀不避風霜
  250,250,250,250,500,500,        //12面容多麼慈祥
  250,250,500,250,250,500,        //13叮叮噹叮叮噹-2
  250,250,250,250,500,            //14鈴聲多響亮-2
  250,250,250,250,250,250,250,250,//15他給我們帶來幸福
  250,250,250,250,1000};  //16大家喜洋洋
void setup() {
}
void loop() { 
  for (int thisNote = 0; thisNote < 98; thisNote++) {
    // 在 pin8 上輸出聲音,每個音階響 0.5 秒
    tone(8, melody[thisNote], 250);
    // 間隔一段時間後再播放下一個音階
    delay(duration[thisNote]);///////// 音節
  }
  // 兩秒後重新播放
  delay(2000);
}

將底下存成一個 pitches.h 存到 C:底下
/*************************************************

 * 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


硬體接線:

1.BUZZER 上有一個 +,接 D8 數位輸出(我用橘色線)  



實驗後結果



參考資料

1.Do Re Mi 音頻 關係 可以理解 pitches.h 內的 音頻 代表意思,C 是Do
   此程式 pitches.h 內 C4 :262 Hz ;C5:523 Hz C6:1047 Hz 
2.原始來源 ARDUINO.CC TONE() example. 轉移過來的簡化版 
 Duration 給予聲音長度.可以符合音節關係,我則是利用間隔時間與聽覺殘留來體現音節

應用思考題:

1.如何存放多首歌 ? 動態變換 歌曲? 好比如MP3 player?
2.是否可用resource file 或 header file 存放多首歌?#Define NOTE_C5等等可否改為簡單的代碼? 
3.如何用VB,VC寫一個鋼琴HUI程式,由使用者彈奏而產生需要的header file或int melody[]={C4...}?
4.是否可以用 micphone 麥克風 做音頻解析 而自動產出 需要的 程式melody?
5.如何與MIDI樂器連接 傳送與接收或控制,然後運用電子樂器 演奏 電子鋼琴 電子鼓 ?
6.可否動態從網路下載或讀取 melody[] 矩陣,然後存入記憶體? 以前的手機是否是這樣運作?

沒有留言:

張貼留言