initial commit

This commit is contained in:
2026-09-25 10:48:51 +10:00
commit b90beea8ae
1020 changed files with 131665 additions and 0 deletions
+120
View File
@@ -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