wave_player library

Dependents:   ECE2035_SUM17_Project wav_player USBHostMSD_WavePlayer

Committer:
kennyainny
Date:
Fri Jul 14 21:42:27 2017 +0000
Revision:
0:910a7c3c9b24
no changes;

Who changed what in which revision?

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