This commit is contained in:
2026-02-12 21:00:02 -08:00
parent 77f8236347
commit 8bdbf227ca
1141 changed files with 1010880 additions and 2 deletions

View File

@@ -0,0 +1,69 @@
#include "AudioTools.h"
#include "AudioTools/Sandbox/USB/USBDeviceAudioAdafruit.h"
size_t sample_count_mic = 0;
size_t sample_count_spk = 0;
// Microphone: generate data for USB
size_t readCB(uint8_t* data, size_t len, USBDeviceAudio& ref) {
int16_t* data16 = (int16_t*)data;
size_t samples = len / sizeof(int16_t);
size_t result = 0;
// generate random stereo data
for (int j = 0; j < samples; j+=2) {
data16[j] = random(-32000, 32000);
data16[j+1] = random(-32000, 32000);;
result += sizeof(int16_t)*2;
sample_count_mic += 2;
}
return result;
}
// Speaker: receive data from USB and write them to the final destination
size_t writeCB(const uint8_t* data, size_t len, USBDeviceAudio & ref) {
int16_t* data16 = (int16_t*)data;
size_t samples = len / sizeof(int16_t);
sample_count_spk += samples;
return len;
}
auto config() {
USBAudioConfig result;
result.p_read_callback = readCB;
result.p_write_callback = writeCB;
return result;
}
USBDeviceAudioAdafruit usb{config()};
void setup() {
// Manual begin() is required on core without built-in support e.g. mbed rp2040
if (!TinyUSBDevice.isInitialized()) {
TinyUSBDevice.begin(0);
}
Serial.begin(115200);
// If already enumerated, additional class driver begin() e.g msc, hid, midi won't take effect until re-enumeration
if (TinyUSBDevice.mounted()) {
TinyUSBDevice.detach();
delay(10);
TinyUSBDevice.attach();
}
}
void loop() {
#ifdef TINYUSB_NEED_POLLING_TASK
// Manual call tud_task since it isn't called by Core's background
TinyUSBDevice.task();
#endif
// use LED do display status
if (usb.updateLED(LED_BUILTIN)){
Serial.print("Total Microphone samples: ");
Serial.print(sample_count_mic);
Serial.print(" / Speaker samples: ");
Serial.print(sample_count_spk);
Serial.print(" / Sample rate: ");
Serial.println(usb.rate());
}
}

View File

@@ -0,0 +1,51 @@
/*********************************************************************
This example generates a sawtooth that you can output on your PC
We use the AudioTools to generate the data input.
We could use the callback function here as well, but we demo how
to integrate with a (fast) Arduino Stream.
Please read the Wiki of the project for the supported platforms!
*********************************************************************/
#include "Adafruit_TinyUSB.h" // https://github.com/pschatzmann/Adafruit_TinyUSB_Arduino
#include "AudioTools.h" // https://github.com/pschatzmann/arduino-audio-tools
Adafruit_USBD_Audio usb;
AudioInfo info(44100, 2, 16);
SawToothGenerator<int16_t> sawtooth;
GeneratedSoundStream<int16_t> sawthooth_stream(sawtooth);
void setup() {
// Manual begin() is required on core without built-in support e.g. mbed rp2040
if (!TinyUSBDevice.isInitialized()) {
TinyUSBDevice.begin(0);
}
Serial.begin(115200);
//while(!Serial); // wait for serial
// generate 493 hz (note B4)
sawtooth.begin(info, 493.0f);
// Start USB device as Audio Source
usb.setInput(sawthooth_stream);
usb.begin(info.sample_rate, info.channels, info.bits_per_sample);
// If already enumerated, additional class driverr begin() e.g msc, hid, midi won't take effect until re-enumeration
if (TinyUSBDevice.mounted()) {
TinyUSBDevice.detach();
delay(10);
TinyUSBDevice.attach();
}
}
void loop() {
#ifdef TINYUSB_NEED_POLLING_TASK
// Manual call tud_task since it isn't called by Core's background
TinyUSBDevice.task();
#endif
// optional: use LED do display status
usb.updateLED();
}