Ned Konz / Mbed 2 deprecated Multi_WS2811_test

Dependencies:   Multi_WS2811 mbed MMA8451Q

Fork of WS2811 by Heroic Robotics

Committer:
Ned Konz
Date:
Fri Jun 10 08:56:46 2016 -0700
Revision:
40:d5c8ce80b6c4
Added audio

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ned Konz 40:d5c8ce80b6c4 1 #include "mbed.h"
Ned Konz 40:d5c8ce80b6c4 2 #include "audio.h"
Ned Konz 40:d5c8ce80b6c4 3
Ned Konz 40:d5c8ce80b6c4 4 namespace NKAudio
Ned Konz 40:d5c8ce80b6c4 5 {
Ned Konz 40:d5c8ce80b6c4 6
Ned Konz 40:d5c8ce80b6c4 7 AnalogOut speaker(AUDIO_DAC_PIN);
Ned Konz 40:d5c8ce80b6c4 8 Ticker sampleTicker;
Ned Konz 40:d5c8ce80b6c4 9
Ned Konz 40:d5c8ce80b6c4 10 // audio samples
Ned Konz 40:d5c8ce80b6c4 11 // class static
Ned Konz 40:d5c8ce80b6c4 12 int8_t const * volatile AudioPlayer::nextSample;
Ned Konz 40:d5c8ce80b6c4 13
Ned Konz 40:d5c8ce80b6c4 14 // class static
Ned Konz 40:d5c8ce80b6c4 15 uint16_t volatile AudioPlayer::samplesRemaining;
Ned Konz 40:d5c8ce80b6c4 16
Ned Konz 40:d5c8ce80b6c4 17 // interrupt handler
Ned Konz 40:d5c8ce80b6c4 18 // class static
Ned Konz 40:d5c8ce80b6c4 19 void AudioPlayer::playAudioSample()
Ned Konz 40:d5c8ce80b6c4 20 {
Ned Konz 40:d5c8ce80b6c4 21 static uint16_t dcBias = DC_BIAS;
Ned Konz 40:d5c8ce80b6c4 22 if (samplesRemaining)
Ned Konz 40:d5c8ce80b6c4 23 {
Ned Konz 40:d5c8ce80b6c4 24 int8_t val = *nextSample++;
Ned Konz 40:d5c8ce80b6c4 25 uint16_t val16 = dcBias + (val * 256);
Ned Konz 40:d5c8ce80b6c4 26 speaker.write_u16(val16);
Ned Konz 40:d5c8ce80b6c4 27 samplesRemaining--;
Ned Konz 40:d5c8ce80b6c4 28 }
Ned Konz 40:d5c8ce80b6c4 29 else
Ned Konz 40:d5c8ce80b6c4 30 {
Ned Konz 40:d5c8ce80b6c4 31 sampleTicker.detach();
Ned Konz 40:d5c8ce80b6c4 32 speaker.write_u16(dcBias);
Ned Konz 40:d5c8ce80b6c4 33 }
Ned Konz 40:d5c8ce80b6c4 34 }
Ned Konz 40:d5c8ce80b6c4 35
Ned Konz 40:d5c8ce80b6c4 36 bool AudioPlayer::playAudio(int8_t const *start, uint16_t nsamples, AudioCallback cb)
Ned Konz 40:d5c8ce80b6c4 37 {
Ned Konz 40:d5c8ce80b6c4 38 if (!audioDone())
Ned Konz 40:d5c8ce80b6c4 39 {
Ned Konz 40:d5c8ce80b6c4 40 return false;
Ned Konz 40:d5c8ce80b6c4 41 }
Ned Konz 40:d5c8ce80b6c4 42 nextSample = start;
Ned Konz 40:d5c8ce80b6c4 43 samplesRemaining = nsamples;
Ned Konz 40:d5c8ce80b6c4 44 sampleTicker.attach_us(&playAudioSample, SAMPLE_PERIOD_US);
Ned Konz 40:d5c8ce80b6c4 45 while (samplesRemaining)
Ned Konz 40:d5c8ce80b6c4 46 {
Ned Konz 40:d5c8ce80b6c4 47 if (cb != NULL)
Ned Konz 40:d5c8ce80b6c4 48 {
Ned Konz 40:d5c8ce80b6c4 49 cb();
Ned Konz 40:d5c8ce80b6c4 50 }
Ned Konz 40:d5c8ce80b6c4 51 wait_us(AUDIO_WAIT_DURATION_US);
Ned Konz 40:d5c8ce80b6c4 52 }
Ned Konz 40:d5c8ce80b6c4 53 return true;
Ned Konz 40:d5c8ce80b6c4 54 }
Ned Konz 40:d5c8ce80b6c4 55
Ned Konz 40:d5c8ce80b6c4 56 } // namespace NKAudio