snapshot
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
Reference in New Issue
Block a user