|
|
|
@ -1,15 +1,46 @@ |
|
|
|
|
/*
|
|
|
|
|
* AudioStream_F32 |
|
|
|
|
*
|
|
|
|
|
* |
|
|
|
|
* Created: Chip Audette, November 2016 |
|
|
|
|
* Purpose; Extend the Teensy Audio Library's "AudioStream" to permit floating-point audio data. |
|
|
|
|
*
|
|
|
|
|
* I modeled it directly on the Teensy code in "AudioStream.h" and "AudioStream.cpp", which are
|
|
|
|
|
* |
|
|
|
|
* I modeled it directly on the Teensy code in "AudioStream.h" and "AudioStream.cpp", which are |
|
|
|
|
* available here: https://github.com/PaulStoffregen/cores/tree/master/teensy3
|
|
|
|
|
*
|
|
|
|
|
* |
|
|
|
|
* Added id to audio_block_f32_t class, per Tympan. Bob Larkin June 2020 |
|
|
|
|
*
|
|
|
|
|
* MIT License. use at your own risk. |
|
|
|
|
* |
|
|
|
|
* |
|
|
|
|
* Thse classes are derived from their equivalents in Teensyduino. Thus: |
|
|
|
|
* Teensyduino Core Library |
|
|
|
|
* http://www.pjrc.com/teensy/
|
|
|
|
|
* Copyright (c) 2017 PJRC.COM, LLC. |
|
|
|
|
* |
|
|
|
|
* 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: |
|
|
|
|
* |
|
|
|
|
* 1. The above copyright notice and this permission notice shall be |
|
|
|
|
* included in all copies or substantial portions of the Software. |
|
|
|
|
* |
|
|
|
|
* 2. If the Software is incorporated into a build system that allows |
|
|
|
|
* selection among a list of target devices, then similar target |
|
|
|
|
* devices manufactured by PJRC.COM must be included in the list of |
|
|
|
|
* target devices and selectable in the same manner. |
|
|
|
|
* |
|
|
|
|
* 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. |
|
|
|
|
* |
|
|
|
|
* All additions are under MIT License. use at your own risk. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
#ifndef _AudioStream_F32_h |
|
|
|
@ -32,22 +63,23 @@ class AudioConnection_F32; |
|
|
|
|
//https://github.com/PaulStoffregen/cores/blob/268848cdb0121f26b7ef6b82b4fb54abbe465427/teensy3/AudioStream.h
|
|
|
|
|
// Added id, per Tympan. Should not disturb existing programs. Bob Larkin June 2020
|
|
|
|
|
class audio_block_f32_t { |
|
|
|
|
public: |
|
|
|
|
audio_block_f32_t(void) {}; |
|
|
|
|
audio_block_f32_t(const AudioSettings_F32 &settings) { |
|
|
|
|
fs_Hz = settings.sample_rate_Hz; |
|
|
|
|
length = settings.audio_block_samples; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
unsigned char ref_count; |
|
|
|
|
unsigned char memory_pool_index; |
|
|
|
|
unsigned char reserved1; |
|
|
|
|
unsigned char reserved2; |
|
|
|
|
float32_t data[AUDIO_BLOCK_SAMPLES]; // AUDIO_BLOCK_SAMPLES is 128, from AudioStream.h
|
|
|
|
|
const int full_length = AUDIO_BLOCK_SAMPLES; |
|
|
|
|
int length = AUDIO_BLOCK_SAMPLES; // AUDIO_BLOCK_SAMPLES is 128, from AudioStream.h
|
|
|
|
|
float fs_Hz = AUDIO_SAMPLE_RATE; // AUDIO_SAMPLE_RATE is 44117.64706 from AudioStream.h
|
|
|
|
|
unsigned long id; |
|
|
|
|
public: |
|
|
|
|
audio_block_f32_t(void) {}; |
|
|
|
|
audio_block_f32_t(const AudioSettings_F32 &settings) { |
|
|
|
|
fs_Hz = settings.sample_rate_Hz; |
|
|
|
|
length = settings.audio_block_samples; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
unsigned char ref_count; |
|
|
|
|
unsigned char memory_pool_index; |
|
|
|
|
unsigned char reserved1; |
|
|
|
|
unsigned char reserved2; |
|
|
|
|
float32_t data[AUDIO_BLOCK_SAMPLES]; // AUDIO_BLOCK_SAMPLES is 128, from AudioStream.h
|
|
|
|
|
const int full_length = AUDIO_BLOCK_SAMPLES; |
|
|
|
|
int length = AUDIO_BLOCK_SAMPLES; // AUDIO_BLOCK_SAMPLES is 128, from AudioStream.h
|
|
|
|
|
// For Teensy 4.x, AUDIO_SAMPLE_RATE is 44100
|
|
|
|
|
float fs_Hz = AUDIO_SAMPLE_RATE; // T3.x AUDIO_SAMPLE_RATE is 44117.64706
|
|
|
|
|
unsigned long id; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
class AudioConnection_F32 |
|
|
|
@ -76,7 +108,7 @@ class AudioConnection_F32 |
|
|
|
|
|
|
|
|
|
class AudioStream_F32 : public AudioStream { |
|
|
|
|
public: |
|
|
|
|
AudioStream_F32(unsigned char n_input_f32, audio_block_f32_t **iqueue) : AudioStream(1, inputQueueArray_i16),
|
|
|
|
|
AudioStream_F32(unsigned char n_input_f32, audio_block_f32_t **iqueue) : AudioStream(1, inputQueueArray_i16), |
|
|
|
|
num_inputs_f32(n_input_f32), inputQueue_f32(iqueue) { |
|
|
|
|
//active_f32 = false;
|
|
|
|
|
destination_list_f32 = NULL; |
|
|
|
@ -86,20 +118,20 @@ class AudioStream_F32 : public AudioStream { |
|
|
|
|
}; |
|
|
|
|
static void initialize_f32_memory(audio_block_f32_t *data, unsigned int num); |
|
|
|
|
static void initialize_f32_memory(audio_block_f32_t *data, unsigned int num, const AudioSettings_F32 &settings); |
|
|
|
|
//virtual void update(audio_block_f32_t *) = 0;
|
|
|
|
|
//virtual void update(audio_block_f32_t *) = 0;
|
|
|
|
|
static uint8_t f32_memory_used; |
|
|
|
|
static uint8_t f32_memory_used_max; |
|
|
|
|
static audio_block_f32_t * allocate_f32(void); |
|
|
|
|
static void release(audio_block_f32_t * block); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
//bool active_f32;
|
|
|
|
|
unsigned char num_inputs_f32; |
|
|
|
|
void transmit(audio_block_f32_t *block, unsigned char index = 0); |
|
|
|
|
audio_block_f32_t * receiveReadOnly_f32(unsigned int index = 0); |
|
|
|
|
audio_block_f32_t * receiveWritable_f32(unsigned int index = 0);
|
|
|
|
|
audio_block_f32_t * receiveWritable_f32(unsigned int index = 0); |
|
|
|
|
friend class AudioConnection_F32; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
AudioConnection_F32 *destination_list_f32; |
|
|
|
|
audio_block_f32_t **inputQueue_f32; |
|
|
|
|