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

Dependents:   kitchenTimer LPC1114FN28_kitchenTimer_Clock

Fork of Sound by suu pen

Revision:
0:e3f005984c2a
Child:
1:358449cfdcd3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Sound.h	Wed Nov 16 12:03:27 2011 +0000
@@ -0,0 +1,187 @@
+/***********************************************************************/
+/*                                                                     */
+/*    Sound.h                                                       */
+/*                                                                     */
+/*    V0.1 : 2011/11/13                                                */
+/***********************************************************************/
+#ifndef _SOUND_H
+#define _SOUND_H
+
+#include <string>
+#include "types.h"
+
+
+/** Sound output control class, based on a PwmOut
+*
+* Example:
+* @code
+* // Continuously sweep the servo through it's full range
+*
+*#include "mbed.h"
+*#include "pwmSound.h"       // pwm sound library header
+*
+*Sound sound(p21, p10);      // 1tu me no sound syuturyoku (pwmOut = p21,  digitalOut = p10)
+*
+* //--------------------------------
+* // "westminster chime" merody data
+* //--------------------------------
+*    const Sound::sound_t WESTMINSTER[] =     {
+*    //   hanon siji 0:b(flat)   1:tujo  2:#(sharp)
+*    //   |  C1 - B9 kan deno onkai(Gx ha 9x ni okikae te siji)  0xFF=end data
+*    //   |  |   time (1/1[ms]/count)   
+*    //   |  |   |    envelope(yoin) (1/1 [ms]/count)
+*    //   |  |   |    |
+*        {1,0xA4,1200,1000},
+*        {1,0xF4,1200,1000},
+*        {1,0x94,1200,1000},
+*        {1,0xC4,2400,1000},
+*
+*        {1,0xC4,1200,1000},
+*        {1,0x94,1200,1000},
+*        {1,0xA4,1200,1000},
+*        {1,0xF4,2400,1000},
+*      
+*        {1,0xFF,1000,0},    // end
+*    };
+*
+* /--------------------------------------
+** main
+* /---------------------------------------
+*int main() {
+*
+* //---------------------
+* // enso data no settei
+* //---------------------
+* //    sound.sound_enso("/local/enso.txt");     // mbed local file data "enso.txt" load (sita ni data no rei wo oite oku)
+*    sound.sound_enso((Sound::sound_t*)DEMEKIN);
+*    
+*    while(1) {
+*
+*        //---------------------------------------------------
+*        // tanon syuturyoku no ato ni westminster chime enso
+*        //---------------------------------------------------
+*        if(sound.sound_enso() == false){
+*        //sound2.sound_enso((Sound::sound_t*)RAMEN);
+*
+*
+*            // tanon1 
+*            Sound::sound_t oto = {1,0x95,200,100};
+*            sound.sound_sound(oto);
+*            while(sound.sound_sound() == true){}
+*            
+*            // tanon2
+*            oto.hanon = 1; oto.onkai = 0xA5; oto.time = 2000; oto.envelope = 1000;
+*            sound.sound_sound(oto);
+*            while(sound.sound_sound() == true){}
+*
+*            // sai enso
+*            sound.sound_enso(true);
+*        }
+*    }
+*}
+*
+* @endcode
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+class Sound {
+public:
+
+
+typedef struct {
+    uint8_t     hanon;      // hanon siji 0:b(flat)   1:tujo  2:#(sharp)
+    uint16_t    onkai;      // C1 - B9 kan deno onkai(Gx ha 9x ni okikae te siji)
+                            // 0x00:hatuon teisi    0xFF:enso syuryo
+    uint16_t  time;         // hatuon jikan (1/1 [ms]/count)
+    uint16_t  envelope;     // yoin(envelope) jikan (1/1 [ms]/count)
+} sound_t;
+
+/*
+// hanon no menber
+enum{
+    Z_hanonF = 0,    // b
+    Z_hanonN ,        // tujo
+    Z_hanonS,        // #
+};
+*/
+
+    /** Create a sound object connected to the specified PwmOut pin & DigitalOut pin
+    *
+    * @param pin PwmOut pin to connect to 
+    * @param pin DigitalOut pin to connect to
+    */
+    Sound(PinName pwm , PinName kijun);
+
+    /** Check sound output
+    *
+    * @param return A bool ture : output\\false: none
+    */
+    bool sound_sound(void);                     // oto no syuturyoku jotai wo kakunin
+                                                //      true : oto ari     false : oto nasi
+    void sound_sound(sound_t data);             // oto no syuturyoku
+                                                //      para : oto no data
+    
+    bool sound_enso(char *path);                 // enso data wo file kara yomikomi
+                                                 //     true : data kakunou OK    false: data kakunou NG
+    void sound_enso(Sound::sound_t* onpudata);   // enso data wo program no data table kara yomikomi
+    bool sound_enso(void);                       // enso jyotai check
+                                                 //     true : enso chu    false : enso shuryo
+    void sound_enso(bool siji);                  // enso start / stop
+                                                 //     true : enso start  false : enso stop
+    
+//protected:    
+private:
+    PwmOut _pwm;
+    DigitalOut _kijun;
+    
+    Ticker sound_timer;
+    Timer hatuon_jikan;
+
+
+#define Z_pwmSyuuki (1)             // PWM syuuki           (1/1[us]/count)     syokichi = 1
+#define Z_pulseCheckSyuuki (20)     // puls check syuuki    (1/1 [us]/count)    syokichi = 20 (10us ika deha pwm settei ga ijo ni naru)
+
+
+typedef struct{
+    uint32_t syuuki;    // oto no syuuki no count suu wo kioku (1/1 [us]/count)
+    uint32_t jikan;     // oto no syuturyoku jikan wo kanri    (1/1 [us]/count)
+    uint32_t envelope;  // envelope counter 0 - 1000000[us](1[s])
+    uint32_t shokichienvelope;  // shokichi envelope counter 0 - 1000000[us](1[s])
+} soundout_t;
+
+
+soundout_t O_sound; // oto no syuturyoku pwm data
+
+sound_t enso[100];      // mbed drive no enso data kakuno yo       
+sound_t *ensoDataTable; // enso data no sento address kioku
+
+    void sound_out(float siji, int8_t fugo);
+    void pulseCheck(void);
+        uint8_t F_pwmSet;    // 0:zenhan hansyuuki 1:kohan hansyuuki  wo request 
+        uint32_t C_syuukiKeika;
+        uint8_t f_muonSet;           // muon ji no sound_out() syori wo kurikaesu no wo fusegu
+        uint32_t C_1msProcess;   // 1ms syuuki syori counter (Z_pulseCheckSyuuki/1 [us]/count))
+    
+    
+    void sound_ensoSyori(void);
+        int keikajikan;  // 1tu no oto no keikajikan
+        sound_t* onpu; // onpu data no sento address
+
+   
+};    
+
+
+#undef    _SOUND_C
+#endif    // _SOUND_H