You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boblark 330959b30d Correction for testMode==1 - Thanks Jonathan 14 hours ago
docs Add Voice Clipper class 7 days ago
examples Correction for testMode==1 - Thanks Jonathan 14 hours ago
gui Add Voice Clipper class 7 days ago
utility Delete SDTEST4.WAV 2 months ago
.gitattributes
.gitignore
.travis.yml
AudioAlignLR_F32.cpp removed conditional declare 10 months ago
AudioAlignLR_F32.h added L and R BPF at fs/4 to AlignLR & cleaned up comments 1 year ago
AudioAnalyzePhase_F32.cpp
AudioAnalyzePhase_F32.h
AudioCalcEnvelope_F32.h
AudioCalcGainWDRC_F32.h
AudioConfigFIRFilterBank_F32.cpp
AudioConfigFIRFilterBank_F32.h
AudioControlSGTL5000_Extended.h
AudioControlTester.cpp
AudioControlTester.h
AudioConvert_F32.h fixed a typo int -> float -> int conversion is now lossless 10 months ago
AudioEffectCompWDRC_F32.h Add i/o F32 from Chip Audette's Tympan library. 2 years ago
AudioEffectCompressor2_F32.cpp Add AudioEffectCompressor2_F32 2 years ago
AudioEffectCompressor2_F32.h Add AudioEffectCompressor2_F32 2 years ago
AudioEffectCompressor_F32.h
AudioEffectDelay_OA_F32.cpp
AudioEffectDelay_OA_F32.h
AudioEffectEmpty_F32.h
AudioEffectFreqShiftFD_OA_F32.cpp
AudioEffectFreqShiftFD_OA_F32.h
AudioEffectGain_F32.h
AudioEffectNoiseGate_F32.h add NoiseGate effect 2 years ago
AudioEffectWDRC2_F32.h
AudioFilter90Deg_F32.cpp
AudioFilter90Deg_F32.h Correct comments 1 month ago
AudioFilterBiquad_F32.cpp Added FMtoneCTCSS example 1 year ago
AudioFilterBiquad_F32.h Corrected comments, no code change 1 year ago
AudioFilterConvolution_F32.cpp Fixed to not have compile error for Teensy before T3.5 2 months ago
AudioFilterConvolution_F32.h Fixed to not have compile error for Teensy before T3.5 2 months ago
AudioFilterEqualizer_F32.cpp
AudioFilterEqualizer_F32.h
AudioFilterFIRGeneral_F32.cpp
AudioFilterFIRGeneral_F32.h Corrected comments, no code change 1 year ago
AudioFilterFIR_F32.cpp
AudioFilterFIR_F32.h
AudioFilterIIR_F32.h
AudioLMSDenoiseNotch_F32.cpp Rev to new LMSDenoiseNotch 1 year ago
AudioLMSDenoiseNotch_F32.h Rev to new LMSDenoiseNotch 1 year ago
AudioMathAdd_F32.cpp Add math add, multiply, offset and scale 3 weeks ago
AudioMathAdd_F32.h Add math add, multiply, offset and scale 3 weeks ago
AudioMathConstant_F32.cpp Add AudioMathConstant_F32 1 week ago
AudioMathConstant_F32.h Add AudioMathConstant_F32 1 week ago
AudioMathMultiply_F32.cpp Add math add, multiply, offset and scale 3 weeks ago
AudioMathMultiply_F32.h Add math add, multiply, offset and scale 3 weeks ago
AudioMathOffset_F32.cpp Add math add, multiply, offset and scale 3 weeks ago
AudioMathOffset_F32.h Add math add, multiply, offset and scale 3 weeks ago
AudioMathScale_F32.cpp Add math add, multiply, offset and scale 3 weeks ago
AudioMathScale_F32.h Add math add, multiply, offset and scale 3 weeks ago
AudioMixer_F32.cpp
AudioMixer_F32.h
AudioMultiply_F32.cpp
AudioMultiply_F32.h Added note: Use AudioMathMultiply_F32 instead 3 weeks ago
AudioSDPlayer_F32.cpp Minor corrections for playing WAV files from SD cards 2 months ago
AudioSDPlayer_F32.h Add WaveFilePlayer, test files. Revised to lower WAV rates 2 months ago
AudioSettings_F32.cpp have defaults for AudioSettings_F32 10 months ago
AudioSettings_F32.h have defaults for AudioSettings_F32 10 months ago
AudioSpectralDenoise_F32.cpp spectral: Add Spectral noise reduction 10 months ago
AudioSpectralDenoise_F32.h spectral: Add Spectral noise reduction 10 months ago
AudioStream_F32.cpp Add i/o F32 from Chip Audette's Tympan library. 2 years ago
AudioStream_F32.h
AudioSwitch_OA_F32.cpp
AudioSwitch_OA_F32.h
BTNRH_WDRC_Types.h
FFT_OA_F32.h
FFT_Overlapped_OA_F32.cpp
FFT_Overlapped_OA_F32.h
OA_LibraryStatus.gif
OpenAudio_ArduinoLibrary.h Add Voice Clipper class 7 days ago
RadioFMDetector_F32.cpp New functionality for BFSK 9 months ago
RadioFMDetector_F32.h added squelch to FM 2 years ago
RadioFMDiscriminator_F32.cpp New functionality for BFSK 9 months ago
RadioFMDiscriminator_F32.h New functionality for BFSK 9 months ago
RadioIQMixer_F32.cpp Correct sample rate entry and add overall gain control 1 month ago
RadioIQMixer_F32.h Correct sample rate entry and add overall gain control 1 month ago
UART_F32.cpp New functionality for BFSK 9 months ago
UART_F32.h New functionality for BFSK 9 months ago
USB_Audio_F32.h
analyze_CTCSS_F32.cpp Add 12 ksps rate and correct block from receiveReadOnly_f32() 2 days ago
analyze_CTCSS_F32.h Add 12 ksps rate and correct block from receiveReadOnly_f32() 2 days ago
analyze_fft256_iq_F32.cpp Fix xAxis cmd for dBFS & dBFS offset (+12dB) 2 years ago
analyze_fft256_iq_F32.h Fix xAxis cmd for dBFS & dBFS offset (+12dB) 2 years ago
analyze_fft1024_F32.cpp Corrections to comments 1 month ago
analyze_fft1024_F32.h Update real input 1024 fft 2 years ago
analyze_fft1024_iq_F32.cpp Corrected xAxis function for dBFS out on analyze_fft1024_iq_F32 2 years ago
analyze_fft1024_iq_F32.h Corrected xAxis function for dBFS out on analyze_fft1024_iq_F32 2 years ago
analyze_fft2048_iq_F32.cpp Corrected avaeraging in FFT IQ 2048 2 years ago
analyze_fft2048_iq_F32.h Corrected avaeraging in FFT IQ 2048 2 years ago
analyze_fft4096_iq_F32.cpp Corrected comments, only 1 year ago
analyze_fft4096_iq_F32.h Corrected array size, save 16kByte 3 months ago
analyze_fft4096_iqem_F32.cpp Corrected syntax to stop warnings 10 months ago
analyze_fft4096_iqem_F32.h Correct xAxis values 1 year ago
analyze_peak_f32.cpp
analyze_peak_f32.h
analyze_rms_f32.cpp
analyze_rms_f32.h
analyze_tonedetect_F32.cpp Add setGain() function 1 week ago
analyze_tonedetect_F32.h Add setGain() function 1 week ago
async_input_spdif3_F32.cpp Fixed to compile with T3.x (run only T4.x) 2 months ago
async_input_spdif3_F32.h Fixed to compile with T3.x (run only T4.x) 2 months ago
control_tlv320aic3206.cpp.xxx
control_tlv320aic3206.h.xxx
input_i2s_f32.cpp Removed old commented out code. No functional change 10 months ago
input_i2s_f32.h Removed old commented out code. No functional change 10 months ago
input_spdif3_f32.cpp Corrrected references to f32 and F32 10 months ago
input_spdif3_f32.h Added float modules for 24 bit precision S/PDIF I/O. They are forked from current code of the "offical" (16 bit 44.1kHz only) Teensy audio library, but extended to 24 bit precision and configurable sample rate. 10 months ago
keywords.txt Add AudioAlignLR_F32 1 year ago
mathDSP_F32.cpp
mathDSP_F32.h
memcpy_audio.h
output_i2s_f32.cpp Removed old commented out code. No functional change 10 months ago
output_i2s_f32.h Removed old commented out code. No functional change 10 months ago
output_spdif3_f32.cpp Added float modules for 24 bit precision S/PDIF I/O. They are forked from current code of the "offical" (16 bit 44.1kHz only) Teensy audio library, but extended to 24 bit precision and configurable sample rate. 10 months ago
output_spdif3_f32.h Added float modules for 24 bit precision S/PDIF I/O. They are forked from current code of the "offical" (16 bit 44.1kHz only) Teensy audio library, but extended to 24 bit precision and configurable sample rate. 10 months ago
play_queue_f32.cpp Removed old comments 3 weeks ago
play_queue_f32.h Major addition of functions from J. Oakley per I16 library. Thanks! 3 weeks ago
radioBFSKmodulator_F32.cpp New functionality for BFSK 9 months ago
radioBFSKmodulator_F32.h Corrected variable name 8 months ago
radioCESSB_Z_transmit_F32.cpp Added IQ corrections for hardware errors 1 month ago
radioCESSB_Z_transmit_F32.h Added IQ corrections for hardware errors 1 month ago
radioCESSBtransmit_F32.cpp Corrected comments 1 month ago
radioCESSBtransmit_F32.h Corrected comments 1 month ago
radioFT8Demodulator_F32.cpp Fixed unused ii 4 months ago
radioFT8Demodulator_F32.h Corrected comment 1 week ago
radioFT8Modulator_F32.cpp Add new radioFT8Modulator_F32 7 months ago
radioFT8Modulator_F32.h Clarified copyright 7 months ago
radioModulatedGenerator_F32.cpp Corrected warnings (no problems) 10 months ago
radioModulatedGenerator_F32.h Added setFMScale to radioModulatedGenerator_F32 1 year ago
radioNoiseBlanker_F32.cpp Corrected block release for 1 channel operation 2 years ago
radioNoiseBlanker_F32.h Revised NoisBlanker to have I+Q option 2 years ago
radioVoiceClipper_F32.cpp Add Voice Clipper class 7 days ago
radioVoiceClipper_F32.h Add Voice Clipper class 7 days ago
readme.md Fixed typos. 10 months ago
record_queue_f32.cpp
record_queue_f32.h
sinTable512_f32.h
synth_GaussianWhiteNoise_F32.cpp Changed to allow very small noise power 1 year ago
synth_GaussianWhiteNoise_F32.h
synth_pinknoise_f32.cpp
synth_pinknoise_f32.h
synth_sin_cos_f32.cpp Added pureSpectrum filtering option. 1 year ago
synth_sin_cos_f32.h Added pureSpectrum filtering option. 1 year ago
synth_sine_f32.cpp Added pureSpectrum filtering option. 1 year ago
synth_sine_f32.h Added pureSpectrum filtering option. 1 year ago
synth_waveform_F32.cpp
synth_waveform_F32.h
synth_whitenoise_f32.cpp
synth_whitenoise_f32.h

readme.md

OpenAudio Library for Teensy

This is a library of Teensy Arduino classes to provide audio signal processing with 32-bit floating point data transfers. This parallels the 16-bit integer Teensy Audio Library but, interconnects blocks using 32-bit floating point data types. Converters for inter-connecting the two types are provided. Both data types can be used in the same sketch. To distinguish the two types, file and class names for this library have a trailing "_F32."

This library was originally put together by Chip Audette and he summed up the reasons for this:

Purpose: The purpose of this library is to build upon the Teensy Audio Library to enable new functionality for real-time audio processing.

Approach: To follow the structure and approach of the Teensy Audio Library, so that coding techniques, style, and structure that works for the Teensy Audio Library will also work with this library.

Send Help!: If you see ways to make my code better aligned with the Teensy Audio Library, send a pull request!

Information

Design Tool Many changes and additions were made in the 2020 time period. Hopefully this has brought this library to the point where blocks can be just assembled and run. To make that practical, there is now an OpenAudio Library Design Tool that again parallels the Teensy Audio Design Tool, that has been borrowed upon for both code and content. This OpenAudio Design Tool is intended to be a temporary design aid with improvements to come, like being able to combine integer and floating point blocks.

The primary documentation is the Design Tool. Clicking on any of the classes brings up a right-side help panel. This lists the use of the class, the constraints, all the functions and at the botom are general notes. Most classes have example INO files and these are listed and available when this library is installed. Sometimes elements of this documentation is not completed, yet. In some of those cases it is worth looking at the .h include file for the class. At the top of these files are comments with more information.

Teensy 3 and 4 During 2020 this library has undergone revision to make it Teensy 4.x compatible. Much of this related to using multiple sampling rates with the I2S clocks and the interrupt/DMA code for data transfer. The files and associated classes output_i2s_f32.h, output_i2s_f32.cpp, input_i2s_f32.h, input_i2s_f32.cpp are now ready to be used for T3.x and T4.x. There are some restrictions, particularly this should be used with 16-bit I2S codec data. Codec sample rates can be varied. Variable block size is supported, but be sure the settings option is used. Thanks to Chip, @jcj83429 and all the Teensy development folks.

Tympan Project Many of the classes in this library were put together as part of the Tympan Project. That is oriented towards open-source hearing aid and hearing aid development tools. It has its own Tympan Design Tool as well as some custom Teensy-based hardware. Additionally, there are a few classes in this library that use terminology and variables that are specific to audiology. It is intended that these, in time, be replaced by similar classes with more conventional descriptors. And, of course, if your interest is in hearing aids, you should spend time at the Tympan project!

Notes

1 - The USB_Audio_F32.h includes all the functions needed to use USB audio for input and output. However, it is not in the OpenAudio_ArduinoLibrary.h as would be expected. To use this class, add "#include USB_Audio_F32.h" to the INO file and before compiling, go to the IDE Tools>USB Type and set the radio button to "Audio." This should then compile without error. Also, using this class requires some amount of I16 audio memory, such as a line in the top of the INO, "AudioMemory(10);"

2 - This library generally supports changing sample rates within the range of the Codec hardware being used. See Examples/PassthroughF32/PassthroughF32.ino. In addition, be aware that classes that need speed scaling such as waveform generators and filters must be modified individually using built-in functions such as AudioSynthWaveformSine_F32::setSampleRate_Hz(float &fs_Hz). Also, see https://forum.pjrc.com/threads/38753-Discussion-about-a-simple-way-to-change-the-sample-rate for discussion of both T3.x and T4.x I2S sample rates.

Installation

Download (and unzip) this library into the Arduino libraries directory on your computer. On my computer, that means I put it here:

C:\Users\chipaudette\Documents\Arduino\libraries\OpenAudio_ArduinoLibrary

Restart your Arduino IDE and you should now see this libraries example sketches under File->Examples->OpenAudio_ArduinoLibrary

After installing this library into your Arduino->Libraries direction, you can have access to any of these capabilities simply by including the following command in your Arduino sketch: #include <OpenAudio_ArduinoLibrary.h>.

As an alternative to the ZIP download, you can use git to maintain a local copy of the library. This has the advantage of easy updating. See GitHub and git documentation on how to do this.

Dependencies

This library extends the functionality of the Teensy Audio Library, so you'll need to install it per its instructions.

The floating-point processing takes advantage of the DSP acceleration afforded by the ARM core inside the Teensy 3.x and 4.x processor. Therefore, it uses arm_math.h. This dependencies is installed automatically when you install the Teensy Audio Library, so you don't need to take any extra steps. It's there already.