A very very simple orgel.
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 にサウンダー(スピーカー?) を接続してください。
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を引くと♭の音程になります。
Diff: orgel.cpp
- Revision:
- 0:b1f4db5e5887
- Child:
- 1:f0f27eb31eec
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orgel.cpp Sat Jul 11 16:08:04 2015 +0000 @@ -0,0 +1,49 @@ +#include "mbed.h" +#include "tone.h" +#include "tune.h" + +/** Orgel test + */ +/* FRDM-KL25Z + * PWM + * D7: PTC9 + * D6: PTC8 + * D5: PTA5 + * D4: PTA4 + * D3: PTA12 + * D2: PTD4 + * D1: PTA1 + * D0: PTA2 + */ + +PwmOut out1(PTD4) ; // D2 + +// DigitalOut myled(LED1); +extern unsigned char note[] ; +extern int num_notes ; + +float bpm = 100 ; /* beat per minutes */ + +void play_tune(void) +{ + float note_length = 60.0 / (bpm * 4.0) ; + for (int i = 0 ; i < num_notes ; i++) { + if (note[i] > 0) { // tone + out1.write(0.5) ; + out1.period_us(tone_us[note[i]]) ; + } else { // rest + out1.write(0.0) ; + out1.period_us(0) ; + } + wait(note_length) ; + } + out1.write(0.0) ; + out1.period_us(tone_us[note[0]]) ; +} + +int main() { + while(1) { + play_tune() ; + wait(1) ; + } +}