wave_player optimized for this project

Fork of wave_player by Steve Ravet

Committer:
UnitedHolmes
Date:
Tue Dec 08 00:43:57 2015 +0000
Revision:
2:9b0c9c1e365a
Parent:
1:acc3e18e77ad
hi;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
UnitedHolmes 2:9b0c9c1e365a 1 #ifndef WAVE_PLAYER_H_
UnitedHolmes 2:9b0c9c1e365a 2 #define WAVE_PLAYER_H_
UnitedHolmes 2:9b0c9c1e365a 3
sravet 0:62c18ade9a60 4 #include <mbed.h>
sravet 0:62c18ade9a60 5
sravet 0:62c18ade9a60 6 typedef struct uFMT_STRUCT {
sravet 0:62c18ade9a60 7 short comp_code;
sravet 0:62c18ade9a60 8 short num_channels;
sravet 0:62c18ade9a60 9 unsigned sample_rate;
sravet 0:62c18ade9a60 10 unsigned avg_Bps;
sravet 0:62c18ade9a60 11 short block_align;
sravet 0:62c18ade9a60 12 short sig_bps;
sravet 0:62c18ade9a60 13 } FMT_STRUCT;
sravet 0:62c18ade9a60 14
sravet 1:acc3e18e77ad 15
sravet 1:acc3e18e77ad 16 /** wave file player class.
sravet 0:62c18ade9a60 17 *
sravet 0:62c18ade9a60 18 * Example:
sravet 0:62c18ade9a60 19 * @code
sravet 1:acc3e18e77ad 20 * #include <mbed.h>
sravet 1:acc3e18e77ad 21 * #include <wave_player.h>
sravet 1:acc3e18e77ad 22 *
sravet 1:acc3e18e77ad 23 * AnalogOut DACout(p18);
sravet 1:acc3e18e77ad 24 * wave_player waver(&DACout);
sravet 1:acc3e18e77ad 25 *
sravet 0:62c18ade9a60 26 * int main() {
sravet 0:62c18ade9a60 27 * FILE *wave_file;
sravet 0:62c18ade9a60 28 *
sravet 0:62c18ade9a60 29 * printf("\n\n\nHello, wave world!\n");
sravet 0:62c18ade9a60 30 * wave_file=fopen("/sd/44_8_st.wav","r");
sravet 0:62c18ade9a60 31 * waver.play(wave_file);
sravet 0:62c18ade9a60 32 * fclose(wave_file);
sravet 0:62c18ade9a60 33 * }
sravet 0:62c18ade9a60 34 * @endcode
sravet 0:62c18ade9a60 35 */
sravet 0:62c18ade9a60 36 class wave_player {
sravet 0:62c18ade9a60 37
sravet 0:62c18ade9a60 38 public:
sravet 0:62c18ade9a60 39 /** Create a wave player using a pointer to the given AnalogOut object.
sravet 0:62c18ade9a60 40 *
sravet 1:acc3e18e77ad 41 * @param _dac pointer to an AnalogOut object to which the samples are sent.
sravet 0:62c18ade9a60 42 */
sravet 0:62c18ade9a60 43 wave_player(AnalogOut *_dac);
sravet 0:62c18ade9a60 44
sravet 0:62c18ade9a60 45 /** the player function.
sravet 0:62c18ade9a60 46 *
sravet 0:62c18ade9a60 47 * @param wavefile A pointer to an opened wave file
sravet 0:62c18ade9a60 48 */
sravet 0:62c18ade9a60 49 void play(FILE *wavefile);
sravet 0:62c18ade9a60 50
sravet 0:62c18ade9a60 51 /** Set the printf verbosity of the wave player. A nonzero verbosity level
sravet 0:62c18ade9a60 52 * will put wave_player in a mode where the complete contents of the wave
sravet 0:62c18ade9a60 53 * file are echoed to the screen, including header values, and including
sravet 0:62c18ade9a60 54 * all of the sample values placed into the DAC FIFO, and the sample values
sravet 0:62c18ade9a60 55 * removed from the DAC FIFO by the ISR. The sample output frequency is
sravet 0:62c18ade9a60 56 * fixed at 2 Hz in this mode, so it's all very slow and the DAC output isn't
sravet 0:62c18ade9a60 57 * very useful, but it lets you see what's going on and may help for debugging
sravet 0:62c18ade9a60 58 * wave files that don't play correctly.
sravet 0:62c18ade9a60 59 *
sravet 0:62c18ade9a60 60 * @param v the verbosity level
sravet 0:62c18ade9a60 61 */
sravet 0:62c18ade9a60 62 void set_verbosity(int v);
sravet 0:62c18ade9a60 63
sravet 0:62c18ade9a60 64 private:
sravet 0:62c18ade9a60 65 void dac_out(void);
sravet 0:62c18ade9a60 66 int verbosity;
sravet 0:62c18ade9a60 67 AnalogOut *wave_DAC;
sravet 0:62c18ade9a60 68 Ticker tick;
sravet 0:62c18ade9a60 69 unsigned short DAC_fifo[256];
sravet 0:62c18ade9a60 70 short DAC_wptr;
sravet 0:62c18ade9a60 71 volatile short DAC_rptr;
sravet 0:62c18ade9a60 72 short DAC_on;
sravet 0:62c18ade9a60 73 };
sravet 0:62c18ade9a60 74
UnitedHolmes 2:9b0c9c1e365a 75 #endif