waveplayer with play pause

Dependents:   WavePlayer_HelloWorld_RTOS5

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers wave_player.h Source File

wave_player.h

00001 #include <mbed.h>
00002 
00003 typedef struct uFMT_STRUCT {
00004   short comp_code;
00005   short num_channels;
00006   unsigned sample_rate;
00007   unsigned avg_Bps;
00008   short block_align;
00009   short sig_bps;
00010 } FMT_STRUCT;
00011 
00012 
00013 /** wave file player class.
00014  *
00015  * Example:
00016  * @code
00017  * #include <mbed.h>
00018  * #include <wave_player.h>
00019  *
00020  * AnalogOut DACout(p18);
00021  * wave_player waver(&DACout);
00022  *
00023  * int main() {
00024  *  FILE *wave_file;
00025  *  
00026  *  printf("\n\n\nHello, wave world!\n");
00027  *  wave_file=fopen("/sd/44_8_st.wav","r");
00028  *  waver.play(wave_file);
00029  *  fclose(wave_file); 
00030  * }
00031  * @endcode
00032  */
00033 class wave_player {
00034 
00035 public:
00036 /** Create a wave player using a pointer to the given AnalogOut object.
00037  *
00038  * @param _dac pointer to an AnalogOut object to which the samples are sent.
00039  */
00040 wave_player(AnalogOut *_dac);
00041 short unsigned dac_data_pub;
00042 void update_level();
00043 
00044 /** the player function.
00045  *
00046  * @param wavefile  A pointer to an opened wave file
00047  */
00048 void play(FILE *wavefile);
00049 
00050 /** Set the printf verbosity of the wave player.  A nonzero verbosity level
00051  * will put wave_player in a mode where the complete contents of the wave
00052  * file are echoed to the screen, including header values, and including
00053  * all of the sample values placed into the DAC FIFO, and the sample values
00054  * removed from the DAC FIFO by the ISR.  The sample output frequency is
00055  * fixed at 2 Hz in this mode, so it's all very slow and the DAC output isn't
00056  * very useful, but it lets you see what's going on and may help for debugging
00057  * wave files that don't play correctly.
00058  *
00059  * @param v the verbosity level
00060  */
00061 void set_verbosity(int v);
00062 
00063 private:
00064 void dac_out(void);
00065 int verbosity;
00066 AnalogOut *wave_DAC;
00067 Ticker tick;
00068 unsigned short DAC_fifo[256];
00069 short DAC_wptr;
00070 volatile short DAC_rptr;
00071 short DAC_on;
00072 };
00073 
00074