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