initial commit
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
/*!
|
||||
* @file WaveHC.h
|
||||
*
|
||||
* This library is a highly modified version of Ladyada's Wave Shield library.
|
||||
* I have made many changes that may have introduced bugs.
|
||||
*
|
||||
*
|
||||
* Adafruit invests time and resources providing this open source code,
|
||||
* please support Adafruit and open-source hardware by purchasing
|
||||
* products from Adafruit!
|
||||
*
|
||||
* BSD license, all text here must be included in any redistribution.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef WaveHC_h
|
||||
#define WaveHC_h
|
||||
#include "Arduino.h"
|
||||
#include <FatReader.h>
|
||||
/**
|
||||
* \file
|
||||
* WaveHC class
|
||||
*/
|
||||
/**
|
||||
* If nonzero, optimize the player for contiguous files. It takes
|
||||
* longer to open a file but can play contiguous files at higher rates.
|
||||
* Disable if you need minimum latency for open. Also see open by index.
|
||||
*/
|
||||
#define OPTIMIZE_CONTIGUOUS 1
|
||||
/**
|
||||
* Software volume control should be compatible with Ladyada's library.
|
||||
* Uses shift to decrease volume by 6 dB per step. See DAC ISR in WaveHC.cpp.
|
||||
* Must be set after call to WaveHC::create().
|
||||
* Decreases MAX_CLOCK_RATE to 22050.
|
||||
*/
|
||||
#define DVOLUME 0
|
||||
/**
|
||||
* Set behavior for files that exceed MAX_CLOCK_RATE or MAX_BYTE_RATE.
|
||||
* If RATE_ERROR_LEVEL = 2, rate too high errors are fatal.
|
||||
* If RATE_ERROR_LEVEL = 1, rate too high errors are warnings.
|
||||
* If RATE_ERROR_LEVEL = 0, rate too high errors are ignored.
|
||||
*/
|
||||
#define RATE_ERROR_LEVEL 2
|
||||
//------------------------------------------------------------------------------
|
||||
// Set the size for wave data buffers. Must be 256 or 512.
|
||||
#if defined(__AVR_ATmega168P__) || defined(__AVR_ATmega168__)
|
||||
|
||||
/** Buffer length for for 168 Arduino. */
|
||||
#define PLAYBUFFLEN 256UL
|
||||
#else // __AVR_ATmega168P__
|
||||
|
||||
/** Buffer length for Arduinos other than 168. */
|
||||
#define PLAYBUFFLEN 512UL
|
||||
#endif //__AVR_ATmega168P__
|
||||
|
||||
// Define max allowed SD read rate in bytes/sec.
|
||||
#if PLAYBUFFLEN == 512UL && OPTIMIZE_CONTIGUOUS
|
||||
/** Maximum SD read rate for 512 byte buffer and contiguous file */
|
||||
#define MAX_BYTE_RATE 88200
|
||||
#else // MAX_BYTE_RATE
|
||||
/** Maximum SD read rate for 256 byte buffer or fragmented file */
|
||||
#define MAX_BYTE_RATE 44100
|
||||
#endif // MAX_BYTE_RATE
|
||||
|
||||
// Define maximum clock rate for DAC.
|
||||
#if !DVOLUME
|
||||
/** maximum DAC clock rate */
|
||||
#define MAX_CLOCK_RATE 44100
|
||||
#else // DVOLUME
|
||||
/** Decreased clock rate if volume control is used */
|
||||
#define MAX_CLOCK_RATE 22050
|
||||
#endif // DVOLUME
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/**
|
||||
* \class WaveHC
|
||||
* \brief Wave file player.
|
||||
*
|
||||
* Play wave files from FAT16 and FAT32 file systems
|
||||
* on SD and SDHC flash memory cards.
|
||||
*
|
||||
*/
|
||||
class WaveHC {
|
||||
public:
|
||||
/** Wave file number of channels. Mono = 1, Stereo = 2 */
|
||||
uint8_t Channels;
|
||||
/** Wave file sample rate. Must be not greater than 44100/sec. */
|
||||
uint32_t dwSamplesPerSec;
|
||||
/** Wave file bits per sample. Must be 8 or 16. */
|
||||
uint8_t BitsPerSample;
|
||||
/** Remaining bytes to be played in Wave file data chunk. */
|
||||
uint32_t remainingBytesInChunk;
|
||||
/** Has the value true if a wave file is playing else false. */
|
||||
volatile uint8_t isplaying;
|
||||
/** Number of times data was not available from the SD in the DAC ISR */
|
||||
uint32_t errors;
|
||||
|
||||
/** Software volume control. Reduce volume by 6 dB per step. See DAC ISR. */
|
||||
uint8_t volume;
|
||||
/** FatReader instance for current wave file. */
|
||||
FatReader *fd;
|
||||
|
||||
WaveHC(void);
|
||||
uint8_t create(FatReader &f);
|
||||
/*!
|
||||
@brief Return the size of the WAV file
|
||||
@returns the size of the WAV file
|
||||
*/
|
||||
uint32_t getSize(void) { return fd->fileSize(); }
|
||||
uint8_t isPaused(void);
|
||||
void pause(void);
|
||||
void play(void);
|
||||
int16_t readWaveData(uint8_t *buff, uint16_t len);
|
||||
void resume(void);
|
||||
void seek(uint32_t pos);
|
||||
void setSampleRate(uint32_t samplerate);
|
||||
void stop(void);
|
||||
};
|
||||
|
||||
#endif // WaveHC_h
|
||||
Reference in New Issue
Block a user