Plays 8-bit Mono Wav Files for PWM

WDplayer.cpp

Committer:
rottenegg
Date:
2019-03-25
Revision:
0:c2f3d752d98f
Child:
3:574fdfeb949e

File content as of revision 0:c2f3d752d98f:

#include "WDplayer.h"

PwmOut dac(PTC10);
unsigned char *buffer = (unsigned char *)malloc(1);

void WDplayer::intWD(const char *path) {
    //open File
    _fptr = fopen(path,"r");
    if (_fptr == NULL) {
    std::cerr << "Error File not Found" << std::endl;
    }
    //get info
    unsigned int samplerate;
    fseek(_fptr,24,SEEK_SET);
    fread(&samplerate,4,1,_fptr);
    fseek(_fptr,0,SEEK_END);
    unsigned int len = ftell(_fptr);
    _pwmfreq = (1.0f / samplerate);
    dac.period(_pwmfreq / (8.0f * 1.75f));//wave control and playback factor control
    _path = path;
    _length = len - 44;
    _fptr = NULL;
    _tck = 0;
};

void WDplayer::WDplay() {
    _fptr = fopen(_path,"r");
    fseek(_fptr,44,SEEK_SET);
    //sampling loop _ source of main performance issues
    for (_tck = _length; _tck > 1; _tck--) {
        fread(buffer,1,1,_fptr);
        dac.write((int)buffer[0] / 255.00);
        wait(_pwmfreq / 1.75f); //I dont like this & Playback present here        
    }
    _fptr = NULL;
    _tck = 0;
};

void WDplayer::WDtck() {
    if (_fptr == NULL) {
    _fptr = fopen(_path,"r");
    fseek(_fptr,44,SEEK_SET);
    }
    //sampling loop
    if (_tck == _length) {
        _fptr = NULL;
        _tck = 0;
    } else {
        fread(buffer,1,1,_fptr);
        dac.write( (int)buffer[0] / 255.00 );
        wait(_pwmfreq / 1.75f); //I dont like this remove to tick mode
        
    }
};

unsigned long WDplayer::get_pwmfreq() {
    return _pwmfreq;
};