A very very simple orgel.

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:
Sun Jul 12 01:36:42 2015 +0000
Revision:
1:f0f27eb31eec
Parent:
0:b1f4db5e5887
Commit before publishing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 1:f0f27eb31eec 1 /** mbed tune.h for orgel data of tune notes
Rhyme 1:f0f27eb31eec 2 * Copyright (c) 2015 Motoo Tanaka @ Design Methodology Lab
Rhyme 1:f0f27eb31eec 3 *
Rhyme 1:f0f27eb31eec 4 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Rhyme 1:f0f27eb31eec 5 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Rhyme 1:f0f27eb31eec 6 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Rhyme 1:f0f27eb31eec 7 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Rhyme 1:f0f27eb31eec 8 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Rhyme 1:f0f27eb31eec 9 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
Rhyme 1:f0f27eb31eec 10 * THE SOFTWARE.
Rhyme 1:f0f27eb31eec 11 */
Rhyme 1:f0f27eb31eec 12
Rhyme 0:b1f4db5e5887 13 #ifndef _TUNE_H_
Rhyme 0:b1f4db5e5887 14 #define _TUNE_H_
Rhyme 0:b1f4db5e5887 15
Rhyme 0:b1f4db5e5887 16 #if 0
Rhyme 0:b1f4db5e5887 17 /*
Rhyme 0:b1f4db5e5887 18 * Sample tune: scale in C
Rhyme 0:b1f4db5e5887 19 */
Rhyme 1:f0f27eb31eec 20 float tempo = 100.0 ;
Rhyme 0:b1f4db5e5887 21 unsigned char note[] = {
Rhyme 0:b1f4db5e5887 22 3, 5, 7, 8, // C4, D4, E4, F4,
Rhyme 0:b1f4db5e5887 23 10, 12, 14, 15, // G4, A4, B4, C5,
Rhyme 0:b1f4db5e5887 24 17, 19, 20, 22, // D5, E5, F5, G5,
Rhyme 0:b1f4db5e5887 25 24, 26, 27, 29, // A5, B5, C6, D6
Rhyme 0:b1f4db5e5887 26 31, 32, 34, 36, // E6, F6, G6, A6
Rhyme 0:b1f4db5e5887 27 38, 39, // B6, C7,
Rhyme 0:b1f4db5e5887 28 } ;
Rhyme 0:b1f4db5e5887 29 #endif
Rhyme 0:b1f4db5e5887 30 #if 1
Rhyme 0:b1f4db5e5887 31 /*
Rhyme 0:b1f4db5e5887 32 * Sample tune: Greensleeves
Rhyme 0:b1f4db5e5887 33 */
Rhyme 1:f0f27eb31eec 34 float tempo = 90.0 ;
Rhyme 0:b1f4db5e5887 35 unsigned char note[] = {
Rhyme 0:b1f4db5e5887 36 12, 12, // A4, A4,
Rhyme 0:b1f4db5e5887 37 15, 15, 15, 15, 17, 17, // C5, C5, C5, C5, D5, D5
Rhyme 0:b1f4db5e5887 38 19, 19, 19, 20, 19, 19, // E5, E5, E5, F5, E5, E5
Rhyme 0:b1f4db5e5887 39 17, 17, 17, 17, 14, 14, // D5, D5, D5, D5, B4, B4
Rhyme 0:b1f4db5e5887 40 10, 10, 10, 12, 14, 14, // G4, G4, G4, A4, B4, B4
Rhyme 0:b1f4db5e5887 41
Rhyme 0:b1f4db5e5887 42 15, 15, 15, 15, 12, 12, // C5, C5, C5, C5, A4, A4
Rhyme 0:b1f4db5e5887 43 12, 12, 12, 11, 12, 12, // A4, A4, A4, G#4, A4, A4
Rhyme 0:b1f4db5e5887 44 14, 14, 14, 14, 11, 11, // B4, B4, B4, B4, G#4, G#4
Rhyme 0:b1f4db5e5887 45 7, 7, 7, 7, 12, 12, // E4, E4, E4, E4, A4, A4
Rhyme 0:b1f4db5e5887 46
Rhyme 0:b1f4db5e5887 47 15, 15, 15, 15, 17, 17, // C5, C5, C5, C5, D5, D5
Rhyme 0:b1f4db5e5887 48 19, 19, 19, 20, 19, 19, // E5, E5, E5, F5, E5, E5
Rhyme 0:b1f4db5e5887 49 17, 17, 17, 17, 14, 14, // D5, D5, D5, D5, B4, B4
Rhyme 0:b1f4db5e5887 50 10, 10, 10, 12, 14, 14, // G4, G4, G4, A4, B4, B4
Rhyme 0:b1f4db5e5887 51
Rhyme 0:b1f4db5e5887 52 15, 15, 15, 14, 12, 12, // C5, C5, C5, B4, A4, A4,
Rhyme 0:b1f4db5e5887 53 11, 11, 11, 9, 11, 11, // G#4, G#4, G#4, F#4, G#4, G#4
Rhyme 0:b1f4db5e5887 54 12, 12, 12, 12, 0, 0, // A4 , A4, A4, A4, r, r
Rhyme 0:b1f4db5e5887 55 0, 0, 0, 0, 0, 0, // r, r, r, r, r, r
Rhyme 0:b1f4db5e5887 56
Rhyme 0:b1f4db5e5887 57 22, 22, 22, 0, 22, 22, // G5, G5, G5, r, G5, G5,
Rhyme 0:b1f4db5e5887 58 22, 22, 22, 21, 19, 19, // G5, G5, G5, F#5, E5, E5,
Rhyme 0:b1f4db5e5887 59 17, 17, 17, 17, 14, 14, // D5, D5, D5, D5, B4, B4
Rhyme 0:b1f4db5e5887 60 10, 10, 10, 12, 14, 14, // G4, G4, G4, A4, B4, B4
Rhyme 0:b1f4db5e5887 61
Rhyme 0:b1f4db5e5887 62 15, 15, 15, 15, 12, 12, // C5, C5, C5, C5, A4, A4
Rhyme 0:b1f4db5e5887 63 12, 12, 12, 11, 12, 12, // A4, A4, A4, G#4, A4, A4
Rhyme 0:b1f4db5e5887 64 14, 14, 14, 14, 11, 11, // B4, B4, B4, B4, G#4, G#4
Rhyme 0:b1f4db5e5887 65 7, 7, 7, 7, 0, 0, // E4, E4, E4, E4, A4, A4
Rhyme 0:b1f4db5e5887 66
Rhyme 0:b1f4db5e5887 67 22, 22, 22, 0, 22, 22, // G5, G5, G5, 4, G5, G5
Rhyme 0:b1f4db5e5887 68 22, 22, 22, 21, 19, 19, // G5, G5, G5, F#5, E5, E5
Rhyme 0:b1f4db5e5887 69 17, 17, 17, 17, 14, 14, // D5, D5, D5, D5, B4, B4
Rhyme 0:b1f4db5e5887 70 10, 10, 10, 12, 14, 14, // G4, G4, G4, A4, B4, B4
Rhyme 0:b1f4db5e5887 71
Rhyme 0:b1f4db5e5887 72 15, 15, 15, 14, 12, 12, // C5, C5, C5, B4, A4, A4,
Rhyme 0:b1f4db5e5887 73 11, 11, 11, 9, 11, 11, // G#4, G#4, G#4, F#4, G#4, G#4
Rhyme 0:b1f4db5e5887 74 12, 12, 12, 12, 12, 12, // A4 , A4, A4, A4, r, r
Rhyme 0:b1f4db5e5887 75 0, 0, 0, 0, // r, r, r, r, DC
Rhyme 0:b1f4db5e5887 76 } ;
Rhyme 0:b1f4db5e5887 77 #endif
Rhyme 0:b1f4db5e5887 78
Rhyme 0:b1f4db5e5887 79 int num_notes = sizeof(note)/sizeof(unsigned char) ;
Rhyme 0:b1f4db5e5887 80
Rhyme 0:b1f4db5e5887 81 #endif /* _TUNE_H_ */