Music Player for LPC1768 and MAPLE Board

Dependencies:   SDFileSystem mbed

Committer:
marutsu
Date:
Mon Feb 03 08:58:23 2014 +0000
Revision:
0:b347ed8fee7f
mbed(LPC1768),MAPLE???,MARY-UB????????????????MicroSD????Music?????wave????????????

Who changed what in which revision?

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