MichaelMeissner
Senior Member+
I decided to add to my series of tests to do simple audio output to different devices (I already have DAC, DACS, Audio Shield, I2S, I2S2, and Prop Shield). So I cloned my source that does ToneSweep on both the right and left channels to target USB output. But when I start the program, it just hangs there. I suspect I need something on the Linux side that takes the sound and sends it to the speakers. What do I need to hear the sounds from the Teensy on the Linux side? I am running Fedora 33 at the moment.
Here is the program. I've tried it on a Teensy 3.2, specifying the USB type to be either Audio or Serial+Midi+Audio:
Here is the program. I've tried it on a Teensy 3.2, specifying the USB type to be either Audio or Serial+Midi+Audio:
Code:
/*
Demo of the audio sweep function.
The user specifies the amplitude,
start and end frequencies (which can sweep up or down)
and the length of time of the sweep.
Modified to eliminate the audio shield, and use the Teensy to send output via
USB to the PC. */
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
// GUItool: begin automatically generated code (edited by meissner afterwards).
AudioSynthToneSweep tonesweep; //xy=99,198
AudioMixer4 mixer2; //xy=280,253
AudioMixer4 mixer1; //xy=280,175
AudioOutputUSB usb1; //xy=452,189
AudioConnection patchCord1 (tonesweep, 0, mixer1, 0);
AudioConnection patchCord2 (tonesweep, 0, mixer2, 0);
AudioConnection patchCord3 (mixer2, 0, usb1, 1);
AudioConnection patchCord4 (mixer1, 0, usb1, 0);
// GUItool: end automatically generated code
const float t_ampx = 0.8;
const int t_lox = 10;
const int t_hix = 22000;
const float t_timex = 10; // Length of time for the sweep in seconds
// Do a sweep in both directions, enabling or disabling the left/right speakers
void do_sweep (int i)
{
int do_left = (i & 1) != 0;
int do_right = (i & 2) != 0;
float gain = (do_left && do_right) ? 0.5f : 1.0f;
Serial.printf ("Sweep up, left = %c, right = %c\n",
(do_left) ? 'Y' : 'N',
(do_right) ? 'Y' : 'N');
mixer1.gain (0, do_left ? gain : 0.0f);
mixer2.gain (0, do_right ? gain : 0.0f);
if (!tonesweep.play (t_ampx, t_lox, t_hix, t_timex)) {
Serial.println ("ToneSweep - play failed");
while (1)
;
}
// wait for the sweep to end
while (tonesweep.isPlaying ())
;
// and now reverse the sweep
Serial.printf ("Sweep down, left = %c, right = %c\n",
(do_left) ? 'Y' : 'N',
(do_right) ? 'Y' : 'N');
if (!tonesweep.play (t_ampx, t_hix, t_lox, t_timex)) {
Serial.println("ToneSweep - play failed");
while (1)
;
}
// wait for the sweep to end
while (tonesweep.isPlaying ())
;
Serial.println ("Sweep done");
}
void setup(void)
{
// Wait for at least 3 seconds for the USB serial connection
Serial.begin (9600);
while (!Serial && millis () < 3000)
;
AudioMemory (8);
Serial.println ("setup done");
for (int i = 1; i <= 3; i++)
do_sweep (i);
Serial.println ("Done");
}
void loop (void)
{
}
Last edited: