以前のLibraryでは、スピーカ出力にPWM,DigitalOutを使いましたが、これは、両方ともPWMにしたものです。LPC1114FN28ではDigitalOutにノイズが乗ることがありその対応です。

Dependents:   kitchenTimer LPC1114FN28_kitchenTimer_Clock

Fork of Sound by suu pen

Committer:
suupen
Date:
Sun Nov 10 03:57:47 2013 +0000
Revision:
15:7e1945a135d7
Parent:
14:027fe57d3491
V0.2 : @SS131110  fixed the bug in the output end processing
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 0:e3f005984c2a 1 /***********************************************************************/
suupen 0:e3f005984c2a 2 /* */
suupen 0:e3f005984c2a 3 /* Sound.cpp */
suupen 0:e3f005984c2a 4 /* */
suupen 0:e3f005984c2a 5 /* pwmOutput - digtalOutput de sound syuturyoku suru library */
suupen 0:e3f005984c2a 6 /***********************************************************************/
suupen 0:e3f005984c2a 7 #define _SOUND_C
suupen 0:e3f005984c2a 8
suupen 0:e3f005984c2a 9 #include "types.h"
suupen 0:e3f005984c2a 10 #include "mbed.h"
suupen 0:e3f005984c2a 11 #include "math.h"
suupen 0:e3f005984c2a 12 #include "Sound.h"
suupen 0:e3f005984c2a 13
suupen 0:e3f005984c2a 14 LocalFileSystem local("local");
suupen 0:e3f005984c2a 15
suupen 0:e3f005984c2a 16 /*******************************************************************
suupen 0:e3f005984c2a 17 * syokika
suupen 0:e3f005984c2a 18 *******************************************************************/
suupen 0:e3f005984c2a 19 Sound::Sound(PinName pwm, PinName kijun) : _pwm(pwm), _kijun(kijun){
suupen 0:e3f005984c2a 20 /***********************
suupen 0:e3f005984c2a 21 * kido ji no yobidasi
suupen 0:e3f005984c2a 22 ***********************/
suupen 0:e3f005984c2a 23 sound_timer.attach_us(this, &Sound::pulseCheck, Z_pulseCheckSyuuki); // oto no hakei syuturyoku check time
suupen 0:e3f005984c2a 24
suupen 0:e3f005984c2a 25 hatuon_jikan.start(); // 1tu no oto no hatuon jikan kakunin
suupen 0:e3f005984c2a 26
suupen 0:e3f005984c2a 27 _pwm.period_us(Z_pwmSyuuki);
suupen 0:e3f005984c2a 28
suupen 0:e3f005984c2a 29 _pwm.write(0.0);
suupen 15:7e1945a135d7 30 _kijun.write(0.0); //@SS131027
suupen 15:7e1945a135d7 31 //@SS131027 _kijun = 0; //@SS131027
suupen 0:e3f005984c2a 32
suupen 0:e3f005984c2a 33
suupen 0:e3f005984c2a 34 keikajikan = 0; // 1tu no oto no keikajikan
suupen 0:e3f005984c2a 35
suupen 0:e3f005984c2a 36 F_pwmSet = 0; // 0:zenhan hansyuuki 1:kohan hansyuuki wo request
suupen 0:e3f005984c2a 37 C_syuukiKeika = 0;
suupen 0:e3f005984c2a 38 f_muonSet = 0; // muon ji no sound_out() syori wo kurikaesu no wo fusegu
suupen 0:e3f005984c2a 39
suupen 0:e3f005984c2a 40 }
suupen 0:e3f005984c2a 41
suupen 0:e3f005984c2a 42
suupen 0:e3f005984c2a 43
suupen 0:e3f005984c2a 44 /*****************************************
suupen 0:e3f005984c2a 45 * analog output
suupen 0:e3f005984c2a 46 * siji : syuturyoku siji (0.0 - 1.0) absolute
suupen 0:e3f005984c2a 47 * fugo : syuturyoku fugo 0:+ 1:-
suupen 0:e3f005984c2a 48 *****************************************/
suupen 0:e3f005984c2a 49 void Sound::sound_out(float siji, int8_t fugo){
suupen 0:e3f005984c2a 50
suupen 15:7e1945a135d7 51 if(siji != 0){
suupen 15:7e1945a135d7 52 // siji no atai wo fugo ga minus no toki hanten
suupen 15:7e1945a135d7 53 if(fugo == 1){siji = 1.0 - siji;}
suupen 15:7e1945a135d7 54 _kijun.write((float)fugo); //@SS131027
suupen 15:7e1945a135d7 55 //@SS131027 _kijun = fugo; //@SS131027
suupen 0:e3f005984c2a 56
suupen 15:7e1945a135d7 57 _pwm.write(siji); // 2tuizyo sound out settei site ,interrupt no nakade renzoku de pwm set wo suruto bousou suru.
suupen 15:7e1945a135d7 58 }
suupen 15:7e1945a135d7 59 else{ //@SS131110
suupen 15:7e1945a135d7 60 // sound off //@SS131110
suupen 15:7e1945a135d7 61 _kijun.write(0.0); //@SS131110
suupen 15:7e1945a135d7 62 _pwm.write(0.0); //@SS131110
suupen 15:7e1945a135d7 63
suupen 15:7e1945a135d7 64 }
suupen 0:e3f005984c2a 65 }
suupen 0:e3f005984c2a 66 /*****************************************
suupen 0:e3f005984c2a 67 * sound hakei pwm output
suupen 0:e3f005984c2a 68 * time interrupt
suupen 0:e3f005984c2a 69 *****************************************/
suupen 0:e3f005984c2a 70 void Sound::pulseCheck(void) {
suupen 15:7e1945a135d7 71
suupen 0:e3f005984c2a 72 // uint32_t static C_syuukiKeika = 0;
suupen 0:e3f005984c2a 73 // uint8_t static f_muonSet = 0; // muon ji no sound_out() syori wo kurikaesu no wo fusegu
suupen 0:e3f005984c2a 74 // uint8_t static F_pwmSet = 0; // 0:zenhan hansyuuki 1:kohan hansyuuki wo request
suupen 0:e3f005984c2a 75
suupen 0:e3f005984c2a 76 float D_soundOut; // syuturyoku suru sinpuku chi (0.0 - 1.0)
suupen 0:e3f005984c2a 77
suupen 0:e3f005984c2a 78 if (O_sound.syuuki != 0) {
suupen 0:e3f005984c2a 79 f_muonSet = 1;
suupen 0:e3f005984c2a 80 // sound ari
suupen 0:e3f005984c2a 81 if (C_syuukiKeika < (O_sound.syuuki / 2.0)) {
suupen 0:e3f005984c2a 82 // zenhan han syuuki
suupen 0:e3f005984c2a 83 if (F_pwmSet == 0) {
suupen 0:e3f005984c2a 84 F_pwmSet = 1;
suupen 0:e3f005984c2a 85
suupen 0:e3f005984c2a 86 D_soundOut = (float)pow(((double)O_sound.envelope / O_sound.shokichienvelope), 2.0);
suupen 0:e3f005984c2a 87 sound_out(D_soundOut, 0);
suupen 0:e3f005984c2a 88 }
suupen 0:e3f005984c2a 89 C_syuukiKeika += Z_pulseCheckSyuuki;
suupen 0:e3f005984c2a 90 } else if (C_syuukiKeika < O_sound.syuuki) {
suupen 0:e3f005984c2a 91 // kohan han syuuki
suupen 0:e3f005984c2a 92 if (F_pwmSet == 1) {
suupen 0:e3f005984c2a 93 F_pwmSet = 2;
suupen 0:e3f005984c2a 94
suupen 0:e3f005984c2a 95 D_soundOut = (float)pow(((double)O_sound.envelope / O_sound.shokichienvelope) , 2.0);
suupen 0:e3f005984c2a 96 sound_out(D_soundOut, 1);
suupen 0:e3f005984c2a 97 }
suupen 0:e3f005984c2a 98 C_syuukiKeika += Z_pulseCheckSyuuki;
suupen 0:e3f005984c2a 99
suupen 0:e3f005984c2a 100
suupen 0:e3f005984c2a 101 } else {
suupen 0:e3f005984c2a 102 // jikai syuuki settei
suupen 0:e3f005984c2a 103 F_pwmSet = 0;
suupen 0:e3f005984c2a 104 C_syuukiKeika = 0;
suupen 0:e3f005984c2a 105 }
suupen 0:e3f005984c2a 106
suupen 0:e3f005984c2a 107 // envelope jikan no kosin
suupen 0:e3f005984c2a 108 if (O_sound.envelope > Z_pulseCheckSyuuki) {
suupen 0:e3f005984c2a 109 O_sound.envelope -= Z_pulseCheckSyuuki;
suupen 0:e3f005984c2a 110 } else {
suupen 0:e3f005984c2a 111 O_sound.envelope = 0;
suupen 0:e3f005984c2a 112 }
suupen 0:e3f005984c2a 113 }
suupen 0:e3f005984c2a 114 else{
suupen 0:e3f005984c2a 115 // O_sound.syuuki == 0 then sound nasi
suupen 0:e3f005984c2a 116
suupen 0:e3f005984c2a 117 if(f_muonSet == 0){
suupen 0:e3f005984c2a 118 f_muonSet = 1;
suupen 0:e3f005984c2a 119 sound_out(0.0, 0); // 5us
suupen 0:e3f005984c2a 120 }
suupen 0:e3f005984c2a 121 }
suupen 0:e3f005984c2a 122
suupen 0:e3f005984c2a 123 //*************************************************
suupen 0:e3f005984c2a 124 // 1ms syuuki syori
suupen 0:e3f005984c2a 125 //*************************************************
suupen 0:e3f005984c2a 126 C_1msProcess++;
suupen 0:e3f005984c2a 127 if((C_1msProcess * Z_pulseCheckSyuuki) > 1000){
suupen 0:e3f005984c2a 128 C_1msProcess = 0;
suupen 0:e3f005984c2a 129 sound_ensoSyori();
suupen 0:e3f005984c2a 130 }
suupen 0:e3f005984c2a 131 }
suupen 0:e3f005984c2a 132
suupen 0:e3f005984c2a 133
suupen 0:e3f005984c2a 134 /******************************************************************************
suupen 0:e3f005984c2a 135 Name : sound_sound()
suupen 0:e3f005984c2a 136 Parameters : sound_t .hanon
suupen 0:e3f005984c2a 137 : .onkai
suupen 0:e3f005984c2a 138 : .time : hatuon jikan(1/1 [ms]/count)
suupen 0:e3f005984c2a 139 : .envelope : yoin (1/1 [ms]/count)
suupen 0:e3f005984c2a 140 Returns : none
suupen 0:e3f005984c2a 141 Description : hitotu no oto no syuturyoku
suupen 0:e3f005984c2a 142 ******************************************************************************/
suupen 0:e3f005984c2a 143 //*************************
suupen 0:e3f005984c2a 144 // oto jyotai check
suupen 0:e3f005984c2a 145 // ture : oto ari chu
suupen 0:e3f005984c2a 146 // false: oto nasi chu
suupen 0:e3f005984c2a 147 //*************************
suupen 0:e3f005984c2a 148 bool Sound::sound_sound(void){
suupen 0:e3f005984c2a 149 if (hatuon_jikan.read_ms() < keikajikan){
suupen 0:e3f005984c2a 150 return(true);
suupen 0:e3f005984c2a 151 }
suupen 0:e3f005984c2a 152 else{
suupen 0:e3f005984c2a 153 return(false);
suupen 0:e3f005984c2a 154 }
suupen 0:e3f005984c2a 155 }
suupen 0:e3f005984c2a 156
suupen 0:e3f005984c2a 157 //*************************
suupen 0:e3f005984c2a 158 // oto syuturyoku
suupen 0:e3f005984c2a 159 //*************************
suupen 0:e3f005984c2a 160 void Sound::sound_sound(sound_t data) {
suupen 0:e3f005984c2a 161
suupen 0:e3f005984c2a 162 uint8_t onkai;
suupen 0:e3f005984c2a 163 uint8_t okutabu;
suupen 0:e3f005984c2a 164 uint8_t kaicho;
suupen 0:e3f005984c2a 165
suupen 0:e3f005984c2a 166 // oto no frequency // do re mi fa so ra si
suupen 13:cd42abff5173 167 //131020const float DT_onkaiHzN[3][7] = {// C1 D1 E1 F1 G1 A1 B1 // frequency (1/1 [Hz]/count) //131020
suupen 13:cd42abff5173 168 const float DT_onkaiHzN[3][7] = {// C1 D1 E1 F1 G1 A1 B1 // frequency (1/1 [Hz]/count) //131020
suupen 0:e3f005984c2a 169 {30.8677, 34.6478, 38.8909, 41.2034, 46.2493, 51.9131, 58.2705}, // b
suupen 0:e3f005984c2a 170 {32.7032, 36.7081, 41.2034, 43.6535, 48.9994, 55.0000, 61.7354}, // nomal
suupen 0:e3f005984c2a 171 {34.6478, 38.8909, 43.6535, 46.2493, 51.9131, 58.2705, 65.4064}, // #
suupen 0:e3f005984c2a 172 };
suupen 0:e3f005984c2a 173
suupen 0:e3f005984c2a 174
suupen 0:e3f005984c2a 175 // onkai data kara DT_onkaiHzN[][koko] "koko" no number ni henkan
suupen 0:e3f005984c2a 176 // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
suupen 0:e3f005984c2a 177 const uint8_t DT_onkaiTrans[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0, 1, 2, 3};
suupen 0:e3f005984c2a 178
suupen 0:e3f005984c2a 179
suupen 0:e3f005984c2a 180 // tugi no hatuon siji
suupen 0:e3f005984c2a 181 onkai = data.onkai;
suupen 0:e3f005984c2a 182
suupen 0:e3f005984c2a 183 okutabu = onkai & 0x0f;
suupen 0:e3f005984c2a 184 kaicho = DT_onkaiTrans[(onkai & 0xf0) >> 4];
suupen 0:e3f005984c2a 185
suupen 0:e3f005984c2a 186 switch (onkai) {
suupen 0:e3f005984c2a 187 case 0x00:
suupen 0:e3f005984c2a 188 // enso chu (tugi no hatuon nasi settei)
suupen 0:e3f005984c2a 189 // case 0xff to onaji syori
suupen 0:e3f005984c2a 190 case 0xff:
suupen 0:e3f005984c2a 191 // enso syuryo
suupen 0:e3f005984c2a 192 O_sound.syuuki = 0; // muon
suupen 0:e3f005984c2a 193 break;
suupen 0:e3f005984c2a 194 default:
suupen 0:e3f005984c2a 195 // enso chu & tugi no hatuon settei)
suupen 13:cd42abff5173 196 //131020 O_sound.syuuki = 1000000 / (DT_onkaiHzN[data.hanon][kaicho] * (pow(2.0, ((double)okutabu - 1)))); //131020
suupen 13:cd42abff5173 197 O_sound.syuuki = 1000000 / (uint16_t)(DT_onkaiHzN[data.hanon][kaicho] * (pow(2.0, ((double)okutabu - 1)))); //131020
suupen 0:e3f005984c2a 198 O_sound.envelope = data.envelope * 1000;
suupen 0:e3f005984c2a 199 O_sound.shokichienvelope = data.envelope * 1000;
suupen 0:e3f005984c2a 200 break;
suupen 0:e3f005984c2a 201 }
suupen 0:e3f005984c2a 202
suupen 0:e3f005984c2a 203 // oto no syuturyoku jikan timer restart
suupen 0:e3f005984c2a 204 hatuon_jikan.reset();
suupen 0:e3f005984c2a 205 keikajikan = data.time;
suupen 0:e3f005984c2a 206 }
suupen 0:e3f005984c2a 207
suupen 0:e3f005984c2a 208 /******************************************************************************
suupen 0:e3f005984c2a 209 Name : sound_ensoSyori()
suupen 0:e3f005984c2a 210 Parameters : none
suupen 0:e3f005984c2a 211 Returns : none
suupen 0:e3f005984c2a 212 Description : enso ji no tugino onpu data syutoku
suupen 0:e3f005984c2a 213 ******************************************************************************/
suupen 0:e3f005984c2a 214 void Sound::sound_ensoSyori(void) {
suupen 15:7e1945a135d7 215 const sound_t END_DATA[] = { //@SS131110
suupen 15:7e1945a135d7 216 // hanon siji 0:b(flat) 1:tujo 2:#(sharp) //@SS131110
suupen 15:7e1945a135d7 217 // | C1 - B9 kan deno onkai(Gx ha 9x ni okikae te siji) 0xFF=end data //@SS131110
suupen 15:7e1945a135d7 218 // | | time (1/1[ms]/count) //@SS131110
suupen 15:7e1945a135d7 219 // | | | envelope(yoin) (1/1 [ms]/count) //@SS131110
suupen 15:7e1945a135d7 220 // | | | | //@SS131110
suupen 15:7e1945a135d7 221 {1,0xFF,0000,0} // end //@SS131110
suupen 15:7e1945a135d7 222 }; //@SS131110
suupen 15:7e1945a135d7 223
suupen 15:7e1945a135d7 224 sound_t data; //@SS131110
suupen 0:e3f005984c2a 225
suupen 0:e3f005984c2a 226 // enso data settei
suupen 0:e3f005984c2a 227 if((sound_sound() == false) // oto no syuturyoku jikan hantei
suupen 0:e3f005984c2a 228 & (onpu != NULL) // enso chu ka wo kakunin
suupen 0:e3f005984c2a 229 ){
suupen 0:e3f005984c2a 230 // tugi no onpu data syutoku
suupen 15:7e1945a135d7 231 //@SS131110 sound_t data = *onpu; //@SS131110
suupen 15:7e1945a135d7 232 data = *onpu; //@SS131110
suupen 0:e3f005984c2a 233 if(data.onkai == 0xff){
suupen 14:027fe57d3491 234 sound_sound(data); //131026
suupen 0:e3f005984c2a 235 onpu = NULL;
suupen 0:e3f005984c2a 236 }
suupen 0:e3f005984c2a 237 else{
suupen 0:e3f005984c2a 238 // tugi no hatuon siji
suupen 0:e3f005984c2a 239 sound_sound(data);
suupen 0:e3f005984c2a 240 onpu++;
suupen 0:e3f005984c2a 241 }
suupen 0:e3f005984c2a 242
suupen 0:e3f005984c2a 243 }
suupen 15:7e1945a135d7 244 else if(onpu == NULL){ //@SS131110
suupen 15:7e1945a135d7 245 data = *END_DATA; //@SS131110
suupen 15:7e1945a135d7 246 sound_sound(data); //@SS131110
suupen 15:7e1945a135d7 247 } //@SS131110
suupen 0:e3f005984c2a 248
suupen 0:e3f005984c2a 249 }
suupen 0:e3f005984c2a 250
suupen 0:e3f005984c2a 251
suupen 0:e3f005984c2a 252
suupen 0:e3f005984c2a 253
suupen 0:e3f005984c2a 254 /******************************************************************************
suupen 0:e3f005984c2a 255 Name : sound_enso()
suupen 0:e3f005984c2a 256 Parameters : -
suupen 0:e3f005984c2a 257 Returns : -
suupen 0:e3f005984c2a 258 Description : -
suupen 0:e3f005984c2a 259 ******************************************************************************/
suupen 0:e3f005984c2a 260 //***********************************************************
suupen 0:e3f005984c2a 261 // load enso data(mbed drive)
suupen 0:e3f005984c2a 262 // Parameter : "/local/enso.txt" (data name = enso.txt)
suupen 0:e3f005984c2a 263 //***********************************************************
suupen 0:e3f005984c2a 264 bool Sound::sound_enso(char *path) {
suupen 0:e3f005984c2a 265 int32_t ans;
suupen 0:e3f005984c2a 266
suupen 0:e3f005984c2a 267 // file open
suupen 0:e3f005984c2a 268 FILE *stm = fopen(path,"r");
suupen 0:e3f005984c2a 269 if(stm == NULL){
suupen 0:e3f005984c2a 270 return (false);
suupen 0:e3f005984c2a 271 }
suupen 0:e3f005984c2a 272
suupen 0:e3f005984c2a 273 // enso data set
suupen 0:e3f005984c2a 274 uint8_t i = 0;
suupen 0:e3f005984c2a 275 do{
suupen 0:e3f005984c2a 276 ans = fscanf(stm, "%x%d%d", &enso[i].onkai, &enso[i].time, &enso[i].envelope);
suupen 0:e3f005984c2a 277 i++;
suupen 0:e3f005984c2a 278
suupen 0:e3f005984c2a 279 }while((ans != EOF) & (i < 100));
suupen 0:e3f005984c2a 280
suupen 0:e3f005984c2a 281 fclose(stm);
suupen 0:e3f005984c2a 282
suupen 0:e3f005984c2a 283 ensoDataTable = enso;
suupen 0:e3f005984c2a 284
suupen 0:e3f005984c2a 285 return (true);
suupen 0:e3f005984c2a 286 }
suupen 0:e3f005984c2a 287
suupen 0:e3f005984c2a 288 //***********************************************************************
suupen 0:e3f005984c2a 289 // load enso data(program data table)
suupen 0:e3f005984c2a 290 // Parameter : (Sound::sound_t*)DEMEKIN (data table name = DEMEKIN)
suupen 0:e3f005984c2a 291 //***********************************************************************
suupen 0:e3f005984c2a 292 void Sound::sound_enso(Sound::sound_t* onpudata) {
suupen 0:e3f005984c2a 293 ensoDataTable = onpudata;
suupen 0:e3f005984c2a 294 }
suupen 0:e3f005984c2a 295
suupen 0:e3f005984c2a 296
suupen 0:e3f005984c2a 297 //*************************
suupen 0:e3f005984c2a 298 // enso jyotai check
suupen 0:e3f005984c2a 299 // ture : enso chu
suupen 0:e3f005984c2a 300 // false: enso syuryo
suupen 0:e3f005984c2a 301 //*************************
suupen 0:e3f005984c2a 302 bool Sound::sound_enso(void) {
suupen 0:e3f005984c2a 303 bool ans;
suupen 0:e3f005984c2a 304
suupen 0:e3f005984c2a 305 if(onpu != NULL){
suupen 0:e3f005984c2a 306 ans = true;
suupen 0:e3f005984c2a 307 }
suupen 0:e3f005984c2a 308 else{
suupen 0:e3f005984c2a 309 ans = false;
suupen 0:e3f005984c2a 310 }
suupen 0:e3f005984c2a 311 return (ans);
suupen 0:e3f005984c2a 312 }
suupen 0:e3f005984c2a 313
suupen 0:e3f005984c2a 314 //*******************
suupen 0:e3f005984c2a 315 // enso start / stop
suupen 0:e3f005984c2a 316 // true : start
suupen 0:e3f005984c2a 317 // false: stop
suupen 0:e3f005984c2a 318 //*******************
suupen 0:e3f005984c2a 319 void Sound::sound_enso(bool siji){
suupen 0:e3f005984c2a 320 if(siji == true){
suupen 0:e3f005984c2a 321 onpu = (sound_t*)ensoDataTable;
suupen 0:e3f005984c2a 322 }
suupen 0:e3f005984c2a 323 else{
suupen 0:e3f005984c2a 324 onpu = NULL;
suupen 0:e3f005984c2a 325 }
suupen 0:e3f005984c2a 326 }
suupen 0:e3f005984c2a 327
suupen 0:e3f005984c2a 328
suupen 0:e3f005984c2a 329
suupen 0:e3f005984c2a 330
suupen 0:e3f005984c2a 331
suupen 0:e3f005984c2a 332 /******************************************************************************
suupen 0:e3f005984c2a 333 Name : enso data sample
suupen 0:e3f005984c2a 334 Parameters : -
suupen 0:e3f005984c2a 335 Returns : -
suupen 0:e3f005984c2a 336 Description : -
suupen 0:e3f005984c2a 337 ******************************************************************************/
suupen 0:e3f005984c2a 338 /*
suupen 0:e3f005984c2a 339 //------------------------------
suupen 0:e3f005984c2a 340 // "demekin no uta" merody data
suupen 0:e3f005984c2a 341 //------------------------------
suupen 0:e3f005984c2a 342 const sound_t DEMEKIN[] = {
suupen 0:e3f005984c2a 343 // onkai,hatuon jikan[ms]
suupen 0:e3f005984c2a 344 {1,0xC5,600,500}, // de
suupen 0:e3f005984c2a 345 {1,0xE5,600,500}, // me
suupen 0:e3f005984c2a 346 {1,0x95,600,500}, // kin
suupen 0:e3f005984c2a 347 {1,0x00,600,500},
suupen 0:e3f005984c2a 348
suupen 0:e3f005984c2a 349 {1,0xC5,600,500}, // de
suupen 0:e3f005984c2a 350 {1,0xE5,600,500}, // me
suupen 0:e3f005984c2a 351 {1,0x95,600,500}, // kin
suupen 0:e3f005984c2a 352 {1,0x00,600,500},
suupen 0:e3f005984c2a 353
suupen 0:e3f005984c2a 354 {1,0xC5,600,500}, // de
suupen 0:e3f005984c2a 355 {1,0xE5,600,500}, // me
suupen 0:e3f005984c2a 356 {1,0x95,600,500}, // kin
suupen 0:e3f005984c2a 357 {1,0x95,600,500}, // no
suupen 0:e3f005984c2a 358 {1,0x95,150,500}, // shi
suupen 0:e3f005984c2a 359 {1,0x00,900,500},
suupen 0:e3f005984c2a 360 {1,0xE5,750,500}, // po
suupen 0:e3f005984c2a 361 {1,0x00,450,500},
suupen 0:e3f005984c2a 362
suupen 0:e3f005984c2a 363 {1,0xC5,600,500}, // de
suupen 0:e3f005984c2a 364 {1,0xE5,600,500}, // me
suupen 0:e3f005984c2a 365 {1,0x95,600,500}, // kin
suupen 0:e3f005984c2a 366 {1,0x00,600,500},
suupen 0:e3f005984c2a 367
suupen 0:e3f005984c2a 368 {1,0xC5,600,500}, // de
suupen 0:e3f005984c2a 369 {1,0xE5,600,500}, // me
suupen 0:e3f005984c2a 370 {1,0x95,600,500}, // kin
suupen 0:e3f005984c2a 371 {1,0x00,600,500},
suupen 0:e3f005984c2a 372
suupen 0:e3f005984c2a 373 {1,0x95,600,500}, // ju
suupen 0:e3f005984c2a 374 {1,0xE5,600,500}, // go
suupen 0:e3f005984c2a 375 {1,0xD5,600,500}, // n
suupen 0:e3f005984c2a 376 {1,0xC5,600,500}, // no
suupen 0:e3f005984c2a 377 {1,0xE5,150,500}, // shi
suupen 0:e3f005984c2a 378 {1,0x00,900,500},
suupen 0:e3f005984c2a 379 {1,0xC5,750,500}, // po
suupen 0:e3f005984c2a 380 {1,0x00,1350,500},
suupen 0:e3f005984c2a 381
suupen 0:e3f005984c2a 382 {1,0xFF,0,0}, // end
suupen 0:e3f005984c2a 383
suupen 0:e3f005984c2a 384 };
suupen 0:e3f005984c2a 385
suupen 0:e3f005984c2a 386 //---------------------------------
suupen 0:e3f005984c2a 387 // "westminster chime" merody data
suupen 0:e3f005984c2a 388 //---------------------------------
suupen 0:e3f005984c2a 389 const sound_t WESTMINSTER[] = {
suupen 0:e3f005984c2a 390 // onkai,hatuon jikan[ms]
suupen 0:e3f005984c2a 391 {1,0xA4,1200,1000},
suupen 0:e3f005984c2a 392 {1,0xF4,1200,1000},
suupen 0:e3f005984c2a 393 {1,0x94,1200,1000},
suupen 0:e3f005984c2a 394 {1,0xC4,2400,1000},
suupen 0:e3f005984c2a 395
suupen 0:e3f005984c2a 396 {1,0xC4,1200,1000},
suupen 0:e3f005984c2a 397 {1,0x94,1200,1000},
suupen 0:e3f005984c2a 398 {1,0xA4,1200,1000},
suupen 0:e3f005984c2a 399 {1,0xF4,2400,1000},
suupen 0:e3f005984c2a 400
suupen 0:e3f005984c2a 401
suupen 0:e3f005984c2a 402 {1,0xFF,0,0}, // end
suupen 0:e3f005984c2a 403 };
suupen 0:e3f005984c2a 404
suupen 0:e3f005984c2a 405 //------------------------------
suupen 0:e3f005984c2a 406 // "ramen chime" merody data
suupen 0:e3f005984c2a 407 //------------------------------
suupen 0:e3f005984c2a 408 const sound_t RAMEN[] = {
suupen 0:e3f005984c2a 409 // onkai,hatuon jikan[ms]
suupen 0:e3f005984c2a 410 {1,0xC5,300,500},
suupen 0:e3f005984c2a 411 {1,0xD5,300,500},
suupen 0:e3f005984c2a 412 {1,0xE5,1200,500},
suupen 0:e3f005984c2a 413 {1,0xD5,600,500},
suupen 0:e3f005984c2a 414 {1,0xC5,1200,500},
suupen 0:e3f005984c2a 415
suupen 0:e3f005984c2a 416 {1,0xC5,300,500},
suupen 0:e3f005984c2a 417 {1,0xD5,300,500},
suupen 0:e3f005984c2a 418 {1,0xE5,300,500},
suupen 0:e3f005984c2a 419 {1,0xD5,300,500},
suupen 0:e3f005984c2a 420 {1,0xC5,300,500},
suupen 0:e3f005984c2a 421 {1,0xD5,1800,500},
suupen 0:e3f005984c2a 422
suupen 0:e3f005984c2a 423
suupen 0:e3f005984c2a 424 {1,0xFF,0,0}, // end
suupen 0:e3f005984c2a 425 };
suupen 0:e3f005984c2a 426 */
suupen 0:e3f005984c2a 427
suupen 0:e3f005984c2a 428
suupen 0:e3f005984c2a 429
suupen 0:e3f005984c2a 430
suupen 0:e3f005984c2a 431
suupen 0:e3f005984c2a 432
suupen 0:e3f005984c2a 433
suupen 0:e3f005984c2a 434
suupen 0:e3f005984c2a 435
suupen 0:e3f005984c2a 436
suupen 0:e3f005984c2a 437
suupen 0:e3f005984c2a 438
suupen 0:e3f005984c2a 439
suupen 0:e3f005984c2a 440
suupen 0:e3f005984c2a 441
suupen 0:e3f005984c2a 442
suupen 0:e3f005984c2a 443
suupen 0:e3f005984c2a 444
suupen 0:e3f005984c2a 445
suupen 0:e3f005984c2a 446
suupen 0:e3f005984c2a 447
suupen 0:e3f005984c2a 448
suupen 0:e3f005984c2a 449
suupen 0:e3f005984c2a 450
suupen 0:e3f005984c2a 451
suupen 0:e3f005984c2a 452
suupen 0:e3f005984c2a 453
suupen 0:e3f005984c2a 454
suupen 0:e3f005984c2a 455
suupen 0:e3f005984c2a 456
suupen 0:e3f005984c2a 457
suupen 0:e3f005984c2a 458
suupen 0:e3f005984c2a 459
suupen 0:e3f005984c2a 460
suupen 0:e3f005984c2a 461
suupen 0:e3f005984c2a 462
suupen 0:e3f005984c2a 463
suupen 0:e3f005984c2a 464
suupen 0:e3f005984c2a 465
suupen 0:e3f005984c2a 466
suupen 0:e3f005984c2a 467
suupen 0:e3f005984c2a 468
suupen 0:e3f005984c2a 469
suupen 0:e3f005984c2a 470
suupen 0:e3f005984c2a 471
suupen 0:e3f005984c2a 472
suupen 0:e3f005984c2a 473
suupen 0:e3f005984c2a 474
suupen 0:e3f005984c2a 475
suupen 0:e3f005984c2a 476
suupen 0:e3f005984c2a 477
suupen 0:e3f005984c2a 478
suupen 0:e3f005984c2a 479
suupen 0:e3f005984c2a 480
suupen 13:cd42abff5173 481
suupen 14:027fe57d3491 482
suupen 15:7e1945a135d7 483