1+ #include " AudioTools.h"
2+ #include " AudioTools/Sandbox/USB/USBDeviceAudioAdafruit.h"
3+
4+ size_t sample_count_mic = 0 ;
5+ size_t sample_count_spk = 0 ;
6+
7+ // Microphone: generate data for USB
8+ size_t readCB (uint8_t * data, size_t len, USBDeviceAudio& ref) {
9+ int16_t * data16 = (int16_t *)data;
10+ size_t samples = len / sizeof (int16_t );
11+ size_t result = 0 ;
12+ // generate random stereo data
13+ for (int j = 0 ; j < samples; j+=2 ) {
14+ data16[j] = random (-32000 , 32000 );
15+ data16[j+1 ] = random (-32000 , 32000 );;
16+ result += sizeof (int16_t )*2 ;
17+ sample_count_mic += 2 ;
18+ }
19+ return result;
20+ }
21+
22+ // Speaker: receive data from USB and write them to the final destination
23+ size_t writeCB (const uint8_t * data, size_t len, USBDeviceAudio & ref) {
24+ int16_t * data16 = (int16_t *)data;
25+ size_t samples = len / sizeof (int16_t );
26+ sample_count_spk += samples;
27+ return len;
28+ }
29+
30+ auto config () {
31+ USBAudioConfig result;
32+ result.p_read_callback = readCB;
33+ result.p_write_callback = writeCB;
34+ return result;
35+ }
36+
37+ USBDeviceAudioAdafruit usb{config ()};
38+
39+ void setup () {
40+ // Manual begin() is required on core without built-in support e.g. mbed rp2040
41+ if (!TinyUSBDevice.isInitialized ()) {
42+ TinyUSBDevice.begin (0 );
43+ }
44+
45+ Serial.begin (115200 );
46+
47+ // If already enumerated, additional class driver begin() e.g msc, hid, midi won't take effect until re-enumeration
48+ if (TinyUSBDevice.mounted ()) {
49+ TinyUSBDevice.detach ();
50+ delay (10 );
51+ TinyUSBDevice.attach ();
52+ }
53+ }
54+
55+ void loop () {
56+ #ifdef TINYUSB_NEED_POLLING_TASK
57+ // Manual call tud_task since it isn't called by Core's background
58+ TinyUSBDevice.task ();
59+ #endif
60+ // use LED do display status
61+ if (usb.updateLED (LED_BUILTIN)){
62+ Serial.print (" Total Microphone samples: " );
63+ Serial.print (sample_count_mic);
64+ Serial.print (" / Speaker samples: " );
65+ Serial.print (sample_count_spk);
66+ Serial.print (" / Sample rate: " );
67+ Serial.println (usb.rate ());
68+ }
69+ }
0 commit comments