Gugen展示版
Fork of MagneWave by
Diff: MagneWave.cpp
- Revision:
- 4:8b4be75fd97a
- Parent:
- 3:500b992880b3
- Child:
- 5:a1c57d771887
diff -r 500b992880b3 -r 8b4be75fd97a MagneWave.cpp --- a/MagneWave.cpp Sat Nov 02 08:14:03 2013 +0000 +++ b/MagneWave.cpp Wed Nov 06 17:52:59 2013 +0000 @@ -7,53 +7,59 @@ { m_wave_DAC = dac; m_wave_DAC->write_u16( DAC16_CENTER ); + + m_wptr = 0; + m_rptr = 0; + m_dacOn = false; + m_fileEnd = false; + + tick.attach_us( this, &MagneWave::dacOut, 125 ); } void MagneWave::play( FILE *wavefile ) { - m_timer.start(); - m_timer.reset(); + m_dacOn = true; + m_fileEnd = false; // jump to wave data fseek( wavefile, DATA_OFFSET, SEEK_SET ); - while(1){ -#if 1 //16bit - int tmpL = 0; - int tmpH = 0; - long dacVal16 = 0; - tmpL = fgetc( wavefile ); - if( tmpL == EOF ){ - break; - } - tmpH = fgetc( wavefile ); - if( tmpH == EOF ){ - break; + while( 1 ){ + if( m_rptr != ( m_wptr + 1 ) & 0xff ){ + size_t readSize = fread( (char *)m_fifo[m_wptr], 2, 1, wavefile); + if( readSize < 2 ){ + m_fileEnd = true; + break; + } + m_wptr = ( m_wptr + 1 ) & 0xff; } - dacVal16 = tmpL; - dacVal16 |= ( tmpH << 8 ); - dacVal16 += DAC16_CENTER; - m_wave_DAC->write_u16( dacVal16 ); - - // TODO: adjust cycle - while( m_timer.read_us()< 125){} - m_timer.reset(); - -#else // 8bit - - int dacVal8 = fgetc( wavefile ); - - if( dacVal8 == EOF ){ - break; - } - m_wave_DAC->write_u8( ( unsigned short )dacVal8 ); - - // TODO: adjust cycle - while( m_timer.read_us()< 125){} - m_timer.reset(); -#endif - } - m_timer.stop(); } +void MagneWave::dacOut() +{ + if ( m_dacOn ) { + if( m_rptr != m_wptr ){ + unsigned short tmpL = 0; + unsigned short tmpH = 0; + unsigned short dacVal16 = 0; + tmpL = ( m_fifo[ m_rptr ] >> 8) & 0x00ff; + tmpH = ( m_fifo[ m_rptr ] << 8) & 0xff00; + + dacVal16 = tmpH | tmpL; + dacVal16 += DAC16_CENTER; + m_wave_DAC->write_u16( dacVal16 ); + m_rptr = ( m_rptr + 1 ) & 0xff; + }else{ + if( m_fileEnd ){ + m_wptr = 0; + m_rptr = 0; + m_dacOn = false; + m_fileEnd = false; + m_wave_DAC->write_u16( DAC16_CENTER ); + } + } + } +} + +