Gugen展示版

Fork of MagneWave by kouzi osaki

MagneWave.cpp

Committer:
doctorura
Date:
2013-11-02
Revision:
3:500b992880b3
Parent:
2:0fc5df933021
Child:
4:8b4be75fd97a

File content as of revision 3:500b992880b3:

#include "MagneWave.h"

#define DATA_OFFSET 44
#define DAC16_CENTER  32768

MagneWave::MagneWave( SoftMCP4922 *dac )
{
    m_wave_DAC = dac;
    m_wave_DAC->write_u16( DAC16_CENTER );
}

void MagneWave::play( FILE *wavefile )
{
    m_timer.start();
    m_timer.reset();
    
    // 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;
        }
        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();
}