arduino-audio-tools
Classes | Typedefs | Enumerations | Functions | Variables
audio_tools Namespace Reference

Parser for MP3 ID3 Meta Data: The goal is to implement a simple API which provides the title, artist, albmum and the Genre. More...

Classes

class  A2DPStream
 Stream support for A2DP: begin(TX_MODE) uses a2dp_source - begin(RX_MODE) a a2dp_sink The data is in int16_t with 2 channels at 44100 hertz. More...
 
class  AACDecoderFDK
 Audio Decoder which decodes AAC into a PCM stream This is basically just a wrapper using https://github.com/pschatzmann/arduino-fdk-aac which uses AudioBaseInfo and provides the handlig of AudioBaseInfo changes. More...
 
class  AACDecoderHelix
 AAC Decoder using libhelix: https://github.com/pschatzmann/arduino-libhelix This is basically just a simple wrapper to provide AudioBaseInfo and AudioBaseInfoDependent. More...
 
class  AACEncoderFDK
 Encodes PCM data to the AAC format and writes the result to a stream This is basically just a wrapper using https://github.com/pschatzmann/arduino-fdk-aac. More...
 
class  AnalogAudio
 A very fast ADC and DAC using the ESP32 I2S interface. More...
 
class  AnalogAudioStream
 We support the Stream interface for the AnalogAudio class. More...
 
class  AnalogConfig
 ESP32 specific configuration for i2s input via adc. The default input pin is GPIO34. We always use int16_t values. The default output pins are GPIO25 and GPIO26! More...
 
struct  AudioBaseInfo
 Basic Audio information which drives e.g. I2S. More...
 
class  AudioBaseInfoDependent
 Supports changes to the sampling rate, bits and channels. More...
 
class  AudioBaseInfoSource
 Supports the subscription to audio change notifications. More...
 
class  AudioDecoder
 Docoding of encoded audio into PCM data. More...
 
class  AudioEncoder
 Encoding of PCM data. More...
 
class  AudioEncoderServer
 A simple Arduino Webserver which streams the audio using the indicated encoder.. This class is based on the WiFiServer class. All you need to do is to provide the data with a callback method or from a Stream. More...
 
struct  AudioInfoLAME
 LAME parameters. More...
 
class  AudioLogger
 A simple Logger that writes messages dependent on the log level. More...
 
class  AudioOutputStream
 Construct a new Encoded Stream object which is supporting defined Audio File types. More...
 
class  AudioOutputWithCallback
 ESP8266Audio AudioOutput class which stores the data in a temporary buffer. The buffer can be consumed e.g. by a callback function by calling read();. More...
 
class  AudioPlayer
 Implements a simple audio player which supports the following commands: More...
 
class  AudioPrint
 Abstract Audio Ouptut class. More...
 
class  AudioServer
 A simple Arduino Webserver which streams the result This class is based on the WiFiServer class. All you need to do is to provide the data with a callback method or from an Arduino Stream. More...
 
class  AudioSource
 Abstract Audio Data Source which is used by the Audio Players. More...
 
class  AudioSourceCallback
 Callback Audio Data Source which is used by the Audio Players. More...
 
class  AudioSourceSdFat
 AudioSource using an SD card as data source. This class is based on https://github.com/greiman/SdFat. More...
 
class  AudioSourceURL
 Audio Source which provides the data via the network from an URL. More...
 
class  AudioUSB
 Stream support for mbed USBAudio https://os.mbed.com/docs/mbed-os/v6.10/mbed-os-api-doxy/class_u_s_b_audio.html. More...
 
class  AudioUtils
 Tools for calculating timer values. More...
 
class  AudioWAVServer
 A simple Arduino Webserver which streams the audio as WAV data. This class is based on the AudioEncodedServer class. All you need to do is to provide the data with a callback method or from a Stream. More...
 
class  AudioWriter
 E.g. used by Encoders and Decoders. More...
 
class  BaseBuffer
 Shared functionality of all buffers. More...
 
class  BaseConverter
 Abstract Base class for Converters A converter is processing the data in the indicated array. More...
 
class  BufferedStream
 The Arduino Stream supports operations on single characters. This is usually not the best way to push audio information, but we will support it anyway - by using a buffer. On reads: if the buffer is empty it gets refilled - for writes if it is full it gets flushed. More...
 
class  CallbackAudioStream
 Callback driven Audio Source (rx_tx_mode==RX_MODE) or Audio Sink (rx_tx_mode==TX_MODE). This class allows to to integrate external libraries in order to consume or generate a data stream. More...
 
struct  CallbackAudioStreamInfo
 CallbackAudioStream Configuration. More...
 
class  CallbackConverter
 Converts e.g. 24bit data to the indicated bigger data type. More...
 
class  CallbackStream
 AudioOutput class which stores the data in a temporary buffer. The buffer can be consumed e.g. by a callback function by calling read();. More...
 
class  ChannelConverter
 Covnerts the data from T src[][2] to a Frame array. More...
 
class  CodecNOP
 Dummpy no implmentation Codec. This is used so that we can initialize some pointers to decoders and encoders to make sure that they do not point to null. More...
 
class  ConverterAutoCenter
 Makes sure that the avg of the signal is set to 0. More...
 
class  ConverterFillLeftAndRight
 Make sure that both channels contain any data. More...
 
class  ConverterScaler
 Multiplies the values with the indicated factor adds the offset and clips at maxValue. To mute use a factor of 0.0! More...
 
class  ConverterSwitchLeftAndRight
 Switches the left and right channel. More...
 
class  ConverterToInternalDACFormat
 special case for internal DAC output, the incomming PCM buffer needs to be converted from signed 16bit to unsigned More...
 
class  CsvStream
 Stream Wrapper which can be used to print the values as readable ASCII to the screen to be analyzed in the Serial Plotter The frames are separated by a new line. The channels in one frame are separated by a ,. More...
 
class  DACInfo
 Config info for DeltaSigma DAC. More...
 
class  DACOut
 Output method for DeltaSigma DAC. More...
 
class  DeltaSigmaDAC
 Software Implementation of a Delta Sigma DAC - The advantage of this implementation is that it works with any digital output pin and that it supports as many channels as necessary! The logic is inspired by Earl Phil Howers ESP8266Audio's AudioOutputI2SNoDAC implementation. More...
 
class  EncodedAudioStream
 A more natural Stream class to process encoded data (aac, wav, mp3...). More...
 
class  ExternalBufferStream
 A Stream backed by a SingleBufferStream. We assume that the memory is externally allocated and that we can submit only full buffer records, which are then available for reading. More...
 
class  GeneratedSoundStream
 Source for reading generated tones. Please note. More...
 
class  HexDumpStream
 Creates a Hex Dump. More...
 
class  HttpChunkReader
 Http might reply with chunks. So we need to dechunk the data. see https://en.wikipedia.org/wiki/Chunked_transfer_encoding. More...
 
class  HttpHeader
 In a http request and reply we need to process header information. With this API we can define and query the header information. The individual header lines are stored in a vector. This is the common functionality for the HttpRequest and HttpReplyHeader subclasses. More...
 
struct  HttpHeaderLine
 A individual key - value header line. More...
 
class  HttpLineReader
 We read a single line. A terminating 0 is added to the string to make it compliant for c string functions. More...
 
class  HttpReplyHeader
 Reading and Writing of Http Replys. More...
 
class  HttpRequest
 Simple API to process get, put, post, del http requests I tried to use Arduino HttpClient, but I did not manage to extract the mime type from streaming get requests. More...
 
class  HttpRequestHeader
 Reading and writing of Http Requests. More...
 
class  I2S
 A Simple I2S interface class for multiple Architectures that supports the reading and writing with a defined data type. More...
 
class  I2SBase
 Basic I2S API - for the ESP32. If we receive 1 channel, we expand the result to 2 channels. More...
 
class  I2SConfig
 configuration for all common i2s settings More...
 
class  I2SStream
 We support the Stream interface for the I2S access. In addition we allow a separate mute pin which might also be used to drive a LED... More...
 
struct  ID3v1
 ID3 verion 1 TAG (130 bytes) More...
 
struct  ID3v1Enhanced
 ID3 verion 1 Enchanced TAG (227 bytes) More...
 
struct  ID3v2
 ID3 verion 2 TAG Header (10 bytes) More...
 
struct  ID3v2Frame
 ID3 verion 2 Tag. More...
 
struct  ID3v2FrameString
 ID3 verion 2 Tag. More...
 
class  MemoryStream
 A simple Stream implementation which is backed by allocated memory. More...
 
class  MetaDataID3
 Simple ID3 Meta Data Parser which supports ID3 V1 and V2 and implements the Stream interface. You just need to set the callback(s) to receive the result and copy the audio data to this stream. More...
 
class  MetaDataID3Base
 ID3 Meta Data Common Functionality. More...
 
class  MetaDataID3V1
 Simple ID3 Meta Data API which supports ID3 V1. More...
 
class  MetaDataID3V2
 Simple ID3 Meta Data API which supports ID3 V2: We only support the "TALB", "TOPE", "TIT2", "TCON" tags. More...
 
struct  MozziConfig
 Mozzi Configuration for input or output stream. More...
 
class  MozziGenerator
 Support for https://sensorium.github.io/Mozzi/ Define your updateControl() method. Define your updateAudio() method. Start by calling begin(control_rate) do not call audioHook(); in the loop ! More...
 
class  MozziStream
 We use the output functionality of Mozzi to output audio data. We expect the data as array of int16_t with one or two channels. Though we support the setting of a sample rate, we recommend to use the default sample rate from Mozzi which is available with the AUDIO_RATE define. More...
 
class  MP3DecoderHelix
 MP3 Decoder using libhelix: https://github.com/pschatzmann/arduino-libhelix This is basically just a simple wrapper to provide AudioBaseInfo and AudioBaseInfoDependent. More...
 
class  MP3DecoderMAD
 MP3 Decoder using https://github.com/pschatzmann/arduino-libmad. More...
 
class  MP3EncoderLAME
 Encodes PCM data to the MP3 format and writes the result to a stream This is basically just a wrapper using https://github.com/pschatzmann/arduino-liblame. More...
 
class  MultiConverter
 Combines multiple converters. More...
 
class  MusicalNotes
 Determination of the frequency of a music note. More...
 
struct  Nano_BLE_freq_info
 
struct  Nano_BLE_ratio_info
 
class  NBuffer
 A lock free N buffer. If count=2 we create a DoubleBuffer, if count=3 a TripleBuffer etc. More...
 
class  NoiseGenerator
 Generates a random noise sound with the help of rand() function. More...
 
class  NOPConverter
 Dummy converter which does nothing. More...
 
class  NullStream
 The Arduino Stream which provides silence and simulates a null device when used as audio target. More...
 
class  NumberReader
 Reads n numbers from an Arduino Stream. More...
 
class  OversamplingDAC
 Abstract Software Implementation of an Oversampling DAC. More...
 
class  OversamplingDAC32
 Software Implementation of a Simple DAC - We quantize a digital int16_t sample my mapping the value to the range of 0b0 to 0b11111111111111111111111111111111, where the intensity is represented by the number of ones. This gives an overall resultion of 5 bits and just uses one single timer. More...
 
struct  PicoChannelOut
 Rasperry Pico Channel to pin assignments. More...
 
struct  PinInfoESP32
 Information for a PIN. More...
 
class  PortAudioConfig
 PortAudio information. More...
 
class  PortAudioStream
 Arduino Audio Stream using PortAudio. More...
 
class  PWMAudioStreamAVR
 Experimental: Audio output to PWM pins for the AVR. The AVR supports only up to 2 channels. More...
 
class  PWMAudioStreamBase
 Common functionality for PWM output. More...
 
class  PWMAudioStreamESP32
 Audio output to PWM pins for the ESP32. The ESP32 supports up to 16 channels. More...
 
class  PWMAudioStreamMBED
 Audio output to PWM pins for MBED based Arduino implementations. More...
 
class  PWMAudioStreamPico
 Audio output for the Rasperry Pico to PWM pins. The Raspberry Pi Pico has 8 PWM blocks/slices(1-8) and each PWM block provides up to two PWM outputs(A-B). More...
 
struct  PWMConfig
 Configuration data for PWM audio output. More...
 
class  PWMDAC
 Audio Output with PWM signal. More...
 
class  RingBuffer
 Implements a typed Ringbuffer. More...
 
class  RingBufferStream
 A Stream backed by a Ringbuffer. We can write to the end and read from the beginning of the stream. More...
 
class  SerialDAC
 A SimpleDAC which uses the Serial UART to output values. This implementation is not using any timers and therefore should work on any microcontroller. More...
 
class  SilenceGenerator
 Provides 0 as sound data. This can be used e.g. to test the output functionality which should optimally just output silence and no artifacts. More...
 
class  SimpleDAC
 Software Implementation of a Simple DAC - We quantize a digital int16_t sample my mapping the value to the range of 0b0 to info.output_bits number of 1, where the intensity is represented by the number of ones. This is very similar to PWM! More...
 
class  SineWaveGenerator
 Generates a Sound with the help of sin() function. More...
 
class  SingleBuffer
 A simple Buffer implementation which just uses a (dynamically sized) array. More...
 
class  SoundGenerator
 Base class to define the abstract interface for the sound generating classes. More...
 
class  SquareWaveGenerator
 Generates a square wave sound. More...
 
class  STKStream
 Stream Source which provides the audio data using the STK framework: https://github.com/pschatzmann/Arduino-STK. More...
 
class  Str
 A simple wrapper to provide string functions on char*. If the underlying char* is a const we do not allow any updates; The ownership of the chr* must be managed externally! More...
 
class  StreamCopy
 We provide the typeless StreamCopy as a subclass of StreamCopyT. More...
 
class  StreamCopyT
 Typed Stream Copy which supports the conversion from channel to 2 channels. We make sure that we allways copy full samples. More...
 
class  StrExt
 Str which keeps the data on the heap. We grow the allocated memory only if the copy source is not fitting. More...
 
class  TimerAlarmRepeatingDef
 Common Interface definition for TimerAlarmRepeating. More...
 
class  TimerAlarmRepeatingESP32
 Repeating Timer functions for simple scheduling of repeated execution. The basic logic is taken from https://www.toptal.com/embedded/esp32-audio-sampling. Plaease use the typedef TimerAlarmRepeating. More...
 
class  TimerAlarmRepeatingESP8266
 Repeating Timer functions for repeated execution: Plaease use the typedef TimerAlarmRepeating. More...
 
class  TimerAlarmRepeatingMBED
 Repeating Timer functions for repeated execution: Plaease use the typedef TimerAlarmRepeating. More...
 
class  TimerAlarmRepeatingRP2040
 Repeating Timer functions for repeated execution: Plaease use the typedef TimerAlarmRepeating. More...
 
class  TimerAlarmRepeatingSTM32
 STM32 Repeating Timer functions for repeated execution: Plaease use the typedef TimerAlarmRepeating. More...
 
class  TimerCallback
 Internal class to manage the different timer callbacks for the 4 hardware timers. More...
 
class  Url
 URL parser which breaks a full url string up into its individual parts. More...
 
class  URLStream
 Represents the content of a URL as Stream. We use the WiFi.h API. More...
 
class  UserCallback
 Internal class to manage User callbacks. An optinal parameter can be passed to the callback method. More...
 
class  Vector
 Vector implementation which provides the most important methods as defined by std::vector. This class it is quite handy to have and most of the times quite better then dealing with raw c arrays. More...
 
class  VolumeOutput
 Output PWM object on which we can apply some volume settings. More...
 
struct  WAVAudioInfo
 Sound information which is available in the WAV header. More...
 
class  WAVDecoder
 WAVDecoder - We parse the header data on the first record and send the sound data to the stream which was indicated in the constructor. Only WAV files with WAV_FORMAT_PCM are supported! More...
 
class  WAVEncoder
 A simple WAV file encoder. More...
 
class  WAVHeader
 Parser for Wav header data for details see https://de.wikipedia.org/wiki/RIFF_WAVE. More...
 

Typedefs

typedef int16_t arrayOf2int16_t[2]
 
typedef sdfat::FsFile AudioFile
 
typedef sdfat::SdFs AudioFs
 
typedef void(* AudioServerDataCallback) (Stream &out)
 Calback which writes the sound data to the stream.
 
typedef PortAudioStream DefaultStream
 
typedef void(* my_repeating_timer_callback_t) (void *obj)
 
typedef PinInfoESP32 PinInfo
 
typedef PWMAudioStreamAVR PWMAudioStream
 
typedef bool(* PWMCallbackType) (uint8_t channels, int16_t *data)
 
typedef void(* repeating_timer_callback_t) (void *obj)
 
typedef sdfat::SdSpiConfig SdSpiConfig
 
typedef void(* simple_callback) (void)
 
typedef TimerAlarmRepeatingESP32 TimerAlarmRepeating
 

Enumerations

enum  FillLeftAndRightStatus { Auto , LeftIsEmpty , RightIsEmpty }
 
enum  I2SMode {
  I2S_STD_MODE , I2S_LSB_MODE , I2S_MSB_MODE , I2S_PHILIPS_MODE ,
  I2S_RIGHT_JUSTIFIED_MODE , I2S_LEFT_JUSTIFIED_MODE
}
 
enum  MetaDataType { Title , Artist , Album , Genre }
 Type of meta info.
 
enum  ParseStatus {
  TagNotFound , PartialTagAtTail , TagFoundPartial , TagFoundComplete ,
  TagProcessed
}
 current status of the parsing
 
enum  RxTxMode { TX_MODE , RX_MODE }
 
enum  TimeUnit { MS , US }
 Time Units.
 

Functions

RingBuffer< uint8_t > a2dp_buffer (A2DP_BUFFER_SIZE *A2DP_BUFFER_COUNT)
 
void a2dp_stream_sink_sound_data (const uint8_t *data, uint32_t len)
 
int32_t a2dp_stream_source_sound_data (Frame *data, int32_t len)
 
static int16_t convert16 (int value, int value_bits_per_sample)
 
static int16_t convert8 (int value, int value_bits_per_sample)
 
static int16_t convert8DAC (int value, int value_bits_per_sample)
 
static int16_t convertFrom24To16 (int24_t value)
 
static int32_t convertFrom24To32 (int24_t value)
 
static float convertFrom24ToFloat (int24_t value)
 
static int16_t convertFrom32To16 (int32_t value)
 
void defaultPWMAudioOutputCallback ()
 separate method that can be defined as friend so that we can access protected information More...
 
bool defaultPWMAudioOutputCallbackPico (repeating_timer *ptr)
 
NBuffer< uint8_t > i2s_buffer (i2s_buffer_size, 5)
 
void I2S_IRQHandler (void)
 
 ISR (TIMER1_COMPA_vect)
 timer callback: write the next frame to the pins
 
static int64_t maxValue (int value_bits_per_sample)
 
void stop ()
 stops any further processing by spinning in an endless loop
 

Variables

const char * ACCEPT = "Accept"
 
const char * ACCEPT_ALL = "*/*"
 
const char * ACCEPT_ENCODING = "Accept-Encoding"
 
static PWMAudioStreamAVRaccessAudioPWM = nullptr
 
static PWMAudioStreamESP32accessAudioPWM = nullptr
 
static PWMAudioStreamMBEDaccessAudioPWM = nullptr
 
const char * ADC_TAG = "ADC"
 
AudioBaseInfoDependentaudioChangeAACHelix =nullptr
 
AudioBaseInfoDependentaudioChangeFDK = nullptr
 
AudioBaseInfoDependentaudioChangeMAD
 
AudioBaseInfoDependentaudioChangeMP3Helix =nullptr
 
const char * CHUNKED = "chunked"
 
const char * CON_CLOSE = "close"
 
const char * CON_KEEP_ALIVE = "keep-alive"
 
const char * CONNECTION = "Connection"
 
const char * CONTENT_LENGTH = "Content-Length"
 
const char * CONTENT_TYPE = "Content-Type"
 
const char * DEFAULT_AGENT = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
 
audio_tools::PWMConfig default_config
 
const Nano_BLE_freq_info freq_table []
 
const char * genres [] = { "Classic Rock", "Country", "Dance", "Disco", "Funk", "Grunge", "Hip-Hop", "Jazz", "Metal", "New Age", "Oldies", "Other", "Pop", "R&B", "Rap", "Reggae", "Rock", "Techno", "Industrial", "Alternative", "Ska", "Death Metal", "Pranks", "Soundtrack", "Euro-Techno", "Ambient", "Trip-Hop", "Vocal", "Jazz+Funk", "Fusion", "Trance", "Classical", "Instrumental", "Acid", "House", "Game", "Sound Clip", "Gospel", "Noise", "Alternative Rock", "Bass", "Soul", "Punk", "Space", "Meditative", "Instrumental Pop", "Instrumental Rock", "Ethnic", "Gothic", "Darkwave", "Techno-Insdustiral", "Electronic", "Pop-Folk", "Eurodance", "Dream", "Southern Rock", "Comedy", "Cult", "Gangsta", "Top 40", "Christian Rap", "Pop/Funk", "Jungle", "Native US", "Cabaret", "New Wave", "Psychadelic", "Rave", "Showtunes", "Trailer", "Lo-Fi", "Tribal", "Acid Punk", "Acid Jazz", "Polka", "Retro", "Musical", "Rock & Roll", "Hard Rock", "Folk", "Folk-Rock", "National Folk", "Swing", "Fast Fusion", "Bebob", "Latin", "Revival", "Celtic", "Bluegrass", "Avantgarde", "Gothic Rock", "Progressive Rock", "Psychedelic Rock", "Symphonic Rock", "Slow Rock", "Big Band", "Chorus", "Easy Listening", "Acoustic","Humour", "Speech", "Chanson", "Opera", "Chamber Music", "Sonata", "Symphony", "Booty Bass", "Primus", "Porn Groove", "Satire", "Slow Jam", "Club", "Tango", "Samba", "Folklore", "Ballad", "Power Ballad", "Rhytmic Soul", "Freestyle", "Duet", "Punk Rock", "Drum Solo", "Acapella", "Euro-House", "Dance Hall", "Goa", "Drum & Bass", "Club-House", "Hardcore", "Terror", "Indie", "BritPop", "Negerpunk", "Polsk Punk", "Beat", "Christian Gangsta", "Heavy Metal", "Black Metal", "Crossover", "Contemporary C", "Christian Rock", "Merengue", "Salsa", "Thrash Metal", "Anime", "JPop", "SynthPop" }
 String array with genres.
 
const char * HOST_C = "Host"
 
const int i2s_buffer_size = 1024
 
const char * id3_v2_tags [] = {"TALB", "TOPE", "TIT2", "TCON"}
 Relevant v2 Tags

 
const int ID3FrameSize = 11
 
const char * IDENTITY = "identity"
 
volatile bool is_a2dp_active = false
 
const char * LOCATION = "Location"
 
const int MaxHeaderLineLength = 200
 
const char * MetaDataTypeStr [] = {"Title", "Artis", "Album", "Genre"}
 Test Description for meta info.
 
const char * methods [] = {"?","GET","HEAD","POST","PUT","DELETE","TRACE","OPTIONS","CONNECT","PATCH",nullptr}
 
static portMUX_TYPE mutex_logger = portMUX_INITIALIZER_UNLOCKED
 
volatile uint32_t output_frame_count = 0
 
const Nano_BLE_ratio_info ratio_table []
 
TimerAlarmRepeatingESP8266self
 
class audio_tools::UserCallbacksimpleUserCallback = nullptr
 
const char * SUCCESS = "Success"
 
TimerAlarmRepeatingMBEDtimerAlarmRepeating = nullptr
 
class audio_tools::TimerCallbacktimerCallbackArray = nullptr
 
const char * TRANSFER_ENCODING = "Transfer-Encoding"
 
const char * UNDERFLOW = "data underflow"
 
const char * USER_AGENT = "User-Agent"
 
const char * wav_mime = "audio/wav"
 

Detailed Description

Parser for MP3 ID3 Meta Data: The goal is to implement a simple API which provides the title, artist, albmum and the Genre.

typedefs for Default

Generic Implementation of sound input and output for desktop environments using portaudio.

Author
Phil Schatzmann

Function Documentation

◆ defaultPWMAudioOutputCallback()

void audio_tools::defaultPWMAudioOutputCallback ( )

separate method that can be defined as friend so that we can access protected information

timer callback: write the next frame to the pins

◆ I2S_IRQHandler()

void audio_tools::I2S_IRQHandler ( void  )

I2S Event handler

Variable Documentation

◆ freq_table

const Nano_BLE_freq_info audio_tools::freq_table[]
Initial value:
= {
{ I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV8, 32.0 / 8 },
{ I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV10, 32 / 10 },
{ I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV11, 32.0 / 11 },
{ I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV15, 32.0 / 15 },
{ I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV16, 32.0 / 16 },
{ I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV21, 32.0 / 21 },
{ I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV23, 32.0 / 23 },
{ I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV30, 32.0 / 30 },
{ I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV31, 32.0 / 31 },
{ I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV32, 32.0 / 32 },
{ I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV42, 32.0 / 42 },
{ I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV63, 32.0 / 63 },
{ I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV125, 32.0 / 125 }
}

◆ ratio_table

const Nano_BLE_ratio_info audio_tools::ratio_table[]
Initial value:
= {
{ I2S_CONFIG_RATIO_RATIO_32X, 32.0 },
{ I2S_CONFIG_RATIO_RATIO_48X, 48.0 },
{ I2S_CONFIG_RATIO_RATIO_64X, 64.0 },
{ I2S_CONFIG_RATIO_RATIO_96X, 96.0 },
{ I2S_CONFIG_RATIO_RATIO_128X, 128.0 },
{ I2S_CONFIG_RATIO_RATIO_192X, 192.0 },
{ I2S_CONFIG_RATIO_RATIO_256X, 256.0 },
{ I2S_CONFIG_RATIO_RATIO_384X, 384.0 },
{ I2S_CONFIG_RATIO_RATIO_512X, 512.0 }
}