Motoo Tanaka / Mbed 2 deprecated orgel Featured

Dependencies:   mbed

orgel, a very very simple orgel program using PWM. To generate sound you need to connect a sounder(speaker?) to
D2 (PTD4) and GND.

orgel (オルゴール) PWMを使用した、とてもとても単純なオルゴール。
音を出すのには D2(PTD4) と GND にサウンダー(スピーカー?) を接続してください。

/media/uploads/Rhyme/orgel_150712.jpg

You can change tune by editing tune.h.
There you need to specify tempo,
which defines how many 4th notes per minute.
Note: each tones in tune is a 16th.

曲を変えるのには tune.h を編集してください。
最初に tempo を設定してください。
tempo は4分音符が1分間に何回かを指定します。
ノート:tune.h で指定する音はそれぞれ16分音符となります。

float tempo = 100.0 ;

Above code is saying the tempo is 100 of 4th notes per minute.

上記のコードでは♩=100 という設定になります。

Then you need to specify notes to compose the tune by
writing following code.

次に下記のコードで、曲を構成する音を記述してください。

unsigned char note[] = {
   // enter notes here as decimal values
} ;


Usable tone values are
0 for rest
1..49 for note from A3 to A7
These are index value in the note[] array.
Note: for values of each tone, please refer to tone.h and tune.h

使用可能な音の値は 
0 休符 
1..49 A3(ラ3) から A7(ラ7) 
となっています。
これらは配列 note[] のインデックス値になります。 ノート:各音の具体的な値は tone.h と tune.h を御参照ください。

As you can imagine,
note value + 1 = #
note value - 1 = ♭ 

For example
G4 = 10
G♭4 = 9
G#4 = 11

想像つかれると思いますが、インデックス値に1を足すと# 
インデックス値から1を引くと♭の音程になります。

Committer:
Rhyme
Date:
Sat Jul 11 16:08:04 2015 +0000
Revision:
0:b1f4db5e5887
Child:
1:f0f27eb31eec
Sample tune, Greensleeves added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:b1f4db5e5887 1 #include "mbed.h"
Rhyme 0:b1f4db5e5887 2 #include "tone.h"
Rhyme 0:b1f4db5e5887 3 #include "tune.h"
Rhyme 0:b1f4db5e5887 4
Rhyme 0:b1f4db5e5887 5 /** Orgel test
Rhyme 0:b1f4db5e5887 6 */
Rhyme 0:b1f4db5e5887 7 /* FRDM-KL25Z
Rhyme 0:b1f4db5e5887 8 * PWM
Rhyme 0:b1f4db5e5887 9 * D7: PTC9
Rhyme 0:b1f4db5e5887 10 * D6: PTC8
Rhyme 0:b1f4db5e5887 11 * D5: PTA5
Rhyme 0:b1f4db5e5887 12 * D4: PTA4
Rhyme 0:b1f4db5e5887 13 * D3: PTA12
Rhyme 0:b1f4db5e5887 14 * D2: PTD4
Rhyme 0:b1f4db5e5887 15 * D1: PTA1
Rhyme 0:b1f4db5e5887 16 * D0: PTA2
Rhyme 0:b1f4db5e5887 17 */
Rhyme 0:b1f4db5e5887 18
Rhyme 0:b1f4db5e5887 19 PwmOut out1(PTD4) ; // D2
Rhyme 0:b1f4db5e5887 20
Rhyme 0:b1f4db5e5887 21 // DigitalOut myled(LED1);
Rhyme 0:b1f4db5e5887 22 extern unsigned char note[] ;
Rhyme 0:b1f4db5e5887 23 extern int num_notes ;
Rhyme 0:b1f4db5e5887 24
Rhyme 0:b1f4db5e5887 25 float bpm = 100 ; /* beat per minutes */
Rhyme 0:b1f4db5e5887 26
Rhyme 0:b1f4db5e5887 27 void play_tune(void)
Rhyme 0:b1f4db5e5887 28 {
Rhyme 0:b1f4db5e5887 29 float note_length = 60.0 / (bpm * 4.0) ;
Rhyme 0:b1f4db5e5887 30 for (int i = 0 ; i < num_notes ; i++) {
Rhyme 0:b1f4db5e5887 31 if (note[i] > 0) { // tone
Rhyme 0:b1f4db5e5887 32 out1.write(0.5) ;
Rhyme 0:b1f4db5e5887 33 out1.period_us(tone_us[note[i]]) ;
Rhyme 0:b1f4db5e5887 34 } else { // rest
Rhyme 0:b1f4db5e5887 35 out1.write(0.0) ;
Rhyme 0:b1f4db5e5887 36 out1.period_us(0) ;
Rhyme 0:b1f4db5e5887 37 }
Rhyme 0:b1f4db5e5887 38 wait(note_length) ;
Rhyme 0:b1f4db5e5887 39 }
Rhyme 0:b1f4db5e5887 40 out1.write(0.0) ;
Rhyme 0:b1f4db5e5887 41 out1.period_us(tone_us[note[0]]) ;
Rhyme 0:b1f4db5e5887 42 }
Rhyme 0:b1f4db5e5887 43
Rhyme 0:b1f4db5e5887 44 int main() {
Rhyme 0:b1f4db5e5887 45 while(1) {
Rhyme 0:b1f4db5e5887 46 play_tune() ;
Rhyme 0:b1f4db5e5887 47 wait(1) ;
Rhyme 0:b1f4db5e5887 48 }
Rhyme 0:b1f4db5e5887 49 }