// TDM test using a RP2040 with a CS42448 DAC #include "AudioTools.h" #include "AudioTools/AudioLibs/AudioBoardStream.h" const AudioInfo info_in(44100, 1, 16); const AudioInfo info_out(44100, 8, 16); const MusicalNotes notes; Vector> sineWaves{info_out.channels}; Vector> sound{info_out.channels}; InputMerge imerge; // merge to 8 channels DriverPins dac_pins; AudioBoard board(AudioDriverCS42448, dac_pins); AudioBoardStream tdm(board); StreamCopy copier(tdm, imerge); // we use the AudioBoard API to set up the pins for the DAC void setupDACPins() { // add i2c codec pins: scl, sda, port dac_pins.addI2C(PinFunction::CODEC, 4, 5); // add i2s pins: mclk, bck, ws,data_out, data_in ,(port) dac_pins.addI2S(PinFunction::CODEC,-1, 3, 4, 5, -1); } // Arduino Setup void setup(void) { // Open Serial Serial.begin(115200); AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Info); // setup input sound and merge -> we get an merge with 8 channels for (int j = 0; j < info_out.channels; j++) { // use a different tone for each channel sineWaves[j].begin(info_in, notes.frequency(j * 2)); // setup GeneratedSoundStream sound[j].setInput(sineWaves[j]); sound[j].begin(info_in); // setup merge input stream channels imerge.add(sound[j], 1); } // setup DAC pins setupDACPins(); // setup DAC & I2S auto cfg = tdm.defaultConfig(); cfg.copyFrom(info_out); cfg.input_device = ADC_INPUT_NONE; cfg.output_device = DAC_OUTPUT_ALL; cfg.signal_type = TDM; tdm.begin(); Serial.println("started..."); } // Arduino loop - copy sound to out void loop() { copier.copy(); }