Gugen展示版

Fork of MagneWave by kouzi osaki

Committer:
doctorura
Date:
Sat Nov 02 08:14:03 2013 +0000
Revision:
3:500b992880b3
Parent:
2:0fc5df933021
Child:
4:8b4be75fd97a
this version uses timer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
doctorura 0:5a700113dd87 1 #include "MagneWave.h"
doctorura 0:5a700113dd87 2
doctorura 2:0fc5df933021 3 #define DATA_OFFSET 44
doctorura 3:500b992880b3 4 #define DAC16_CENTER 32768
doctorura 2:0fc5df933021 5
doctorura 0:5a700113dd87 6 MagneWave::MagneWave( SoftMCP4922 *dac )
doctorura 0:5a700113dd87 7 {
doctorura 0:5a700113dd87 8 m_wave_DAC = dac;
doctorura 3:500b992880b3 9 m_wave_DAC->write_u16( DAC16_CENTER );
doctorura 0:5a700113dd87 10 }
doctorura 0:5a700113dd87 11
doctorura 0:5a700113dd87 12 void MagneWave::play( FILE *wavefile )
doctorura 0:5a700113dd87 13 {
doctorura 3:500b992880b3 14 m_timer.start();
doctorura 3:500b992880b3 15 m_timer.reset();
doctorura 0:5a700113dd87 16
doctorura 0:5a700113dd87 17 // jump to wave data
doctorura 2:0fc5df933021 18 fseek( wavefile, DATA_OFFSET, SEEK_SET );
doctorura 0:5a700113dd87 19
doctorura 0:5a700113dd87 20 while(1){
doctorura 3:500b992880b3 21 #if 1 //16bit
doctorura 0:5a700113dd87 22 int tmpL = 0;
doctorura 0:5a700113dd87 23 int tmpH = 0;
doctorura 3:500b992880b3 24 long dacVal16 = 0;
doctorura 0:5a700113dd87 25 tmpL = fgetc( wavefile );
doctorura 0:5a700113dd87 26 if( tmpL == EOF ){
doctorura 0:5a700113dd87 27 break;
doctorura 0:5a700113dd87 28 }
doctorura 0:5a700113dd87 29 tmpH = fgetc( wavefile );
doctorura 0:5a700113dd87 30 if( tmpH == EOF ){
doctorura 0:5a700113dd87 31 break;
doctorura 0:5a700113dd87 32 }
doctorura 0:5a700113dd87 33 dacVal16 = tmpL;
doctorura 0:5a700113dd87 34 dacVal16 |= ( tmpH << 8 );
doctorura 3:500b992880b3 35 dacVal16 += DAC16_CENTER;
doctorura 0:5a700113dd87 36 m_wave_DAC->write_u16( dacVal16 );
doctorura 3:500b992880b3 37
doctorura 3:500b992880b3 38 // TODO: adjust cycle
doctorura 3:500b992880b3 39 while( m_timer.read_us()< 125){}
doctorura 3:500b992880b3 40 m_timer.reset();
doctorura 3:500b992880b3 41
doctorura 3:500b992880b3 42 #else // 8bit
doctorura 1:a82b9af36dbf 43
doctorura 1:a82b9af36dbf 44 int dacVal8 = fgetc( wavefile );
doctorura 1:a82b9af36dbf 45
doctorura 1:a82b9af36dbf 46 if( dacVal8 == EOF ){
doctorura 1:a82b9af36dbf 47 break;
doctorura 1:a82b9af36dbf 48 }
doctorura 1:a82b9af36dbf 49 m_wave_DAC->write_u8( ( unsigned short )dacVal8 );
doctorura 0:5a700113dd87 50
doctorura 0:5a700113dd87 51 // TODO: adjust cycle
doctorura 3:500b992880b3 52 while( m_timer.read_us()< 125){}
doctorura 3:500b992880b3 53 m_timer.reset();
doctorura 3:500b992880b3 54 #endif
doctorura 3:500b992880b3 55
doctorura 0:5a700113dd87 56 }
doctorura 3:500b992880b3 57 m_timer.stop();
doctorura 0:5a700113dd87 58 }
doctorura 3:500b992880b3 59