Committer:
suupen
Date:
Sun Apr 08 03:46:12 2012 +0000
Revision:
0:a53877d0ea3d

        

Who changed what in which revision?

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