#include "output_i2s.h" | #include "output_i2s.h" | ||||
#include "output_pwm.h" | #include "output_pwm.h" | ||||
#include "play_memory.h" | #include "play_memory.h" | ||||
#include "play_queue.h" | |||||
#include "play_sd_raw.h" | #include "play_sd_raw.h" | ||||
#include "play_sd_wav.h" | #include "play_sd_wav.h" | ||||
#include "synth_tonesweep.h" | #include "synth_tonesweep.h" |
/* Audio Library for Teensy 3.X | |||||
* Copyright (c) 2014, Paul Stoffregen, paul@pjrc.com | |||||
* | |||||
* Development of this audio library was funded by PJRC.COM, LLC by sales of | |||||
* Teensy and Audio Adaptor boards. Please support PJRC's efforts to develop | |||||
* open source software by purchasing Teensy or other PJRC products. | |||||
* | |||||
* Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
* of this software and associated documentation files (the "Software"), to deal | |||||
* in the Software without restriction, including without limitation the rights | |||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
* copies of the Software, and to permit persons to whom the Software is | |||||
* furnished to do so, subject to the following conditions: | |||||
* | |||||
* The above copyright notice, development funding notice, and this permission | |||||
* notice shall be included in all copies or substantial portions of the Software. | |||||
* | |||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||||
* THE SOFTWARE. | |||||
*/ | |||||
#include "play_queue.h" | |||||
#include "utility/dspinst.h" | |||||
int16_t * AudioPlayQueue::getBuffer(void) | |||||
{ | |||||
while (1) { | |||||
userblock = allocate(); | |||||
if (userblock) return userblock->data; | |||||
yield(); | |||||
} | |||||
} | |||||
void AudioPlayQueue::playBuffer(void) | |||||
{ | |||||
uint32_t h; | |||||
if (!userblock) return; | |||||
h = head + 1; | |||||
if (h >= 32) h = 0; | |||||
while (tail == h) ; // wait until space in the queue | |||||
queue[h] = userblock; | |||||
head = h; | |||||
userblock = NULL; | |||||
} | |||||
void AudioPlayQueue::update(void) | |||||
{ | |||||
audio_block_t *block; | |||||
uint32_t t; | |||||
t = tail; | |||||
if (t != head) { | |||||
if (++t >= 32) t = 0; | |||||
block = queue[t]; | |||||
tail = t; | |||||
transmit(block); | |||||
release(block); | |||||
} | |||||
} | |||||
/* Audio Library for Teensy 3.X | |||||
* Copyright (c) 2014, Paul Stoffregen, paul@pjrc.com | |||||
* | |||||
* Development of this audio library was funded by PJRC.COM, LLC by sales of | |||||
* Teensy and Audio Adaptor boards. Please support PJRC's efforts to develop | |||||
* open source software by purchasing Teensy or other PJRC products. | |||||
* | |||||
* Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
* of this software and associated documentation files (the "Software"), to deal | |||||
* in the Software without restriction, including without limitation the rights | |||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
* copies of the Software, and to permit persons to whom the Software is | |||||
* furnished to do so, subject to the following conditions: | |||||
* | |||||
* The above copyright notice, development funding notice, and this permission | |||||
* notice shall be included in all copies or substantial portions of the Software. | |||||
* | |||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||||
* THE SOFTWARE. | |||||
*/ | |||||
#ifndef play_queue_h_ | |||||
#define play_queue_h_ | |||||
#include "AudioStream.h" | |||||
class AudioPlayQueue : public AudioStream | |||||
{ | |||||
public: | |||||
AudioPlayQueue(void) : AudioStream(0, NULL), | |||||
userblock(NULL), head(0), tail(0) { } | |||||
void play(int16_t data); | |||||
void play(const int16_t *data, uint32_t len); | |||||
int16_t * getBuffer(void); | |||||
void playBuffer(void); | |||||
void stop(void); | |||||
//bool isPlaying(void) { return playing; } | |||||
virtual void update(void); | |||||
private: | |||||
audio_block_t *queue[32]; | |||||
audio_block_t *userblock; | |||||
volatile uint8_t head, tail; | |||||
}; | |||||
#endif |