Gugen展示版
Fork of MagneWave by
MagneWave.cpp@3:500b992880b3, 2013-11-02 (annotated)
- 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?
User | Revision | Line number | New 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 |