Open Sound Control (OSC) Teensy Audio Library Implementation

At one point I thought I had confirmed communication with the Teensy. The log was showing OSC commands going out, there was no [not connected] message in the GUI. But I couldn't get any sound. I then ran a hardware test USB Passthrough and it worked. so I loaded back up the Empty project... And I can't connect.

Every time I flash the Teensy with that project my keyboard stops working until I unplug the keyboard and plug it back in.

Connect to Serial> Select the Teensy> OK... OSC>Simple ... Not connected.

Disconnect, then try again, OSC>Simple ... Not connected.

At one point I know it was connected, but still no sound. Even after Enable.

Using this.

@JayShoe, you might want to try this, which is my current testbed. Copy the JSON, including the trailing } on the second line, and paste it into the box you get using Import / </>JSON in GUI++
Code:
{"version":1,"settings":{"arduino":{"ProjectName":"DynamicDesignTest","Board":{"Platform":"","Board":"teensy41","Options":""}},"BiDirDataWebSocketBridge":{},"workspaces":{},"sidebar":{},"palette":{},"editor":{},"devTest":{},"IndexedDBfiles":{"testFileNames":"testFile.txt"},"NodeDefGenerator":{},"NodeDefManager":{},"NodeHelpManager":{},"OSC":{}},"workspaces":[{"type":"tab","id":"Main","label":"Main","inputs":0,"outputs":0,"export":true,"isMain":false,"mainNameType":"tabName","mainNameExt":".ino","generateCppDestructor":false,"extraClassDeclarations":"","settings":{},"nodes":[{"id":"Main_waveform2","type":"AudioSynthWaveform","name":"waveform1","comment":"","x":375,"y":340,"z":"Main","bgColor":"#E6E0F8","wires":[["Main_mixer4_2:0","Main_mixer4_1:0"]],"wireNames":[["waveform10mixer10","waveform10mixerR0"]]},{"id":"Main_waveform4","type":"AudioSynthWaveform","name":"waveform2","comment":"","x":375,"y":395,"z":"Main","bgColor":"#E6E0F8","wires":[["Main_mixer4_2:1","Main_mixer4_1:1"]],"wireNames":[["waveform20mixer11","waveform20mixerR1"]]},{"id":"Main_waveform1","type":"AudioSynthWaveform","name":"waveform3","comment":"","x":375,"y":450,"z":"Main","bgColor":"#E6E0F8","wires":[["Main_mixer4_2:2","Main_mixer4_1:2"]],"wireNames":[["waveform30mixer12","waveform30mixerR2"]]},{"id":"Main_waveform3","type":"AudioSynthWaveform","name":"waveform4","comment":"","x":375,"y":505,"z":"Main","bgColor":"#E6E0F8","wires":[["Main_mixer4_2:3","Main_mixer4_1:3"]],"wireNames":[["waveform40mixer13","waveform40mixerR3"]]},{"id":"Main_mixer4_2","type":"AudioMixer4","name":"mixer1","comment":"","inputs":"4","x":565,"y":390,"z":"Main","bgColor":"#E6E0F8","wires":[["Main_i2s1:0"]],"wireNames":[["mixer10i2s0"]]},{"id":"Main_mixer4_1","type":"AudioMixer4","name":"mixerR","comment":"","inputs":"4","x":565,"y":455,"z":"Main","bgColor":"#E6E0F8","wires":[["Main_i2s1:1"]],"wireNames":[["mixerR0i2s1"]]},{"id":"Main_i2s1","type":"AudioOutputI2S","name":"i2s","comment":"","x":801,"y":419,"z":"Main","bgColor":"#E6E0F8","wires":[],"wireNames":[]},{"id":"Main_sgtl5000_1","type":"AudioControlSGTL5000","name":"sgtl5000","comment":"","x":955,"y":415,"z":"Main","bgColor":"#E6E0F8","wires":[],"wireNames":[]},{"id":"Main_Slider1","type":"UI_Slider","name":"volume","comment":"","w":30,"h":300,"textSize":14,"midiCh":"0","midiId":"0","orientation":"v","label":"d.val","minVal":0,"maxVal":100,"val":35,"outputFloat":false,"minValF":-1,"maxValF":1,"floatVal":0,"decimalCount":-1,"steps":201,"sendSpace":true,"repeat":false,"repeatPeriod":0,"sendMode":"r","autoReturn":false,"returnValue":"mid","barFGcolor":"#F6F8BC","sendFormat":"","sendCommand":"var volCmd = OSC.CreateMessageData('/teensy*/audio/sgtl5000/vol','f',d.val/100.0)\nOSC.SendData(volCmd)","x":880,"y":705,"z":"Main","bgColor":"#808080","wires":[],"wireNames":[]},{"id":"Main_Piano1","type":"UI_Piano","name":"Piano","comment":"","w":210,"h":130,"textSize":14,"midiCh":"0","midiId":"0","octave":4,"sendCommand":"var freq = Math.pow(2,d.octave+(d.keyIndex-9)/12)*55/4\nvar w1Msg = OSC.CreateMessageData('/teensy1/audio/waveform1/be','ffi',0.1,freq,0)\nOSC.SendData(w1Msg)","headerHeight":30,"whiteKeysColor":"#FFFFFF","blackKeysColor":"#A0A0A0","blackKeysWidthDiff":6,"x":135,"y":115,"blackKeyLabelsVisible":true,"whiteKeyLabelsVisible":true,"z":"Main","bgColor":"#F6F8BC","wires":[],"wireNames":[]},{"id":"Main_Piano2","type":"UI_Piano","name":"Piano","comment":"","w":210,"h":130,"textSize":14,"midiCh":"0","midiId":"0","octave":4,"sendCommand":"var freq = Math.pow(2,d.octave+(d.keyIndex-9)/12)*55/4\nvar w1Msg = OSC.CreateMessageData('/teensy1/audio/waveform3/be','ffi',0.1,freq,0)\nOSC.SendData(w1Msg)","headerHeight":30,"whiteKeysColor":"#FFFFFF","blackKeysColor":"#A0A0A0","blackKeysWidthDiff":6,"x":130,"y":435,"blackKeyLabelsVisible":true,"whiteKeyLabelsVisible":true,"z":"Main","bgColor":"#F6F8BC","wires":[],"wireNames":[]},{"id":"Main_Piano3","type":"UI_Piano","name":"Piano","comment":"","w":210,"h":130,"textSize":14,"midiCh":"0","midiId":"0","octave":4,"sendCommand":"var freq = Math.pow(2,d.octave+(d.keyIndex-9)/12)*55/4\nvar w1Msg = OSC.CreateMessageData('/teensy1/audio/waveform2/be','ffi',0.1,freq,0)\nOSC.SendData(w1Msg)","headerHeight":30,"whiteKeysColor":"#FFFFFF","blackKeysColor":"#A0A0A0","blackKeysWidthDiff":6,"x":135,"y":280,"blackKeyLabelsVisible":true,"whiteKeyLabelsVisible":true,"z":"Main","bgColor":"#F6F8BC","wires":[],"wireNames":[]},{"id":"Main_Piano4","type":"UI_Piano","name":"Piano","comment":"","w":210,"h":130,"textSize":14,"midiCh":"0","midiId":"0","octave":5,"sendCommand":"var freq = Math.pow(2,d.octave+(d.keyIndex-9)/12)*55/4\nvar w1Msg = OSC.CreateMessageData('/teensy1/audio/waveform4/be','ffi',0.1,freq,0)\nOSC.SendData(w1Msg)","headerHeight":30,"whiteKeysColor":"#FFFFFF","blackKeysColor":"#A0A0A0","blackKeysWidthDiff":6,"x":125,"y":585,"blackKeyLabelsVisible":true,"whiteKeyLabelsVisible":true,"z":"Main","bgColor":"#F6F8BC","wires":[],"wireNames":[]},{"id":"Main_Slider2","type":"UI_Slider","name":"volume","comment":"","w":30,"h":300,"textSize":14,"midiCh":"0","midiId":"0","orientation":"v","label":"d.val","minVal":0,"maxVal":100,"val":7,"outputFloat":false,"minValF":-1,"maxValF":1,"floatVal":0,"decimalCount":-1,"steps":201,"sendSpace":true,"repeat":false,"repeatPeriod":0,"sendMode":"r","autoReturn":false,"returnValue":"mid","barFGcolor":"#F6F8BC","sendFormat":"","sendCommand":"var volCmd = OSC.CreateMessageData('/teensy1/audio/mixer1/ga','if',0,d.val/100.0)\nOSC.SendData(volCmd)","x":550,"y":685,"z":"Main","bgColor":"#808080","wires":[],"wireNames":[]},{"id":"Main_Button1","type":"UI_Button","name":"enable","comment":"","w":100,"h":30,"textSize":14,"midiCh":"0","midiId":"0","pressAction":"","repeatPressAction":false,"releaseAction":"","repeatReleaseAction":false,"local":"true","sendCommand":"var volCmd = OSC.CreateMessageData('/teensy1/audio/sgtl5000/enabl','')\nOSC.SendData(volCmd)","x":965,"y":548,"z":"Main","bgColor":"#F6F8BC","wires":[],"wireNames":[]},{"id":"Main_scriptBtn1","type":"UI_ScriptButton","name":"delete all!","comment":"var volCmd = OSC.CreateMessageData('/teensy1/dynamic/clearAll','')\nOSC.SendData(volCmd)","w":100,"h":30,"textSize":14,"nodes":[],"x":835,"y":45,"z":"Main","bgColor":"#FF4623","wires":[],"wireNames":[]},{"id":"Main_Slider3","type":"UI_Slider","name":"volume","comment":"","w":30,"h":300,"textSize":14,"midiCh":"0","midiId":"0","orientation":"v","label":"d.val","minVal":0,"maxVal":100,"val":25,"outputFloat":false,"minValF":-1,"maxValF":1,"floatVal":0,"decimalCount":-1,"steps":201,"sendSpace":true,"repeat":false,"repeatPeriod":0,"sendMode":"r","autoReturn":false,"returnValue":"mid","barFGcolor":"#F6F8BC","sendFormat":"","sendCommand":"var volCmd = OSC.CreateMessageData('/teensy1/audio/mixer1/ga','if',1,d.val/100.0)\nOSC.SendData(volCmd)","x":615,"y":685,"z":"Main","bgColor":"#808080","wires":[],"wireNames":[]},{"id":"Main_Slider4","type":"UI_Slider","name":"volume","comment":"","w":30,"h":300,"textSize":14,"midiCh":"0","midiId":"0","orientation":"v","label":"d.val","minVal":0,"maxVal":100,"val":65,"outputFloat":false,"minValF":-1,"maxValF":1,"floatVal":0,"decimalCount":-1,"steps":201,"sendSpace":true,"repeat":false,"repeatPeriod":0,"sendMode":"r","autoReturn":false,"returnValue":"mid","barFGcolor":"#F6F8BC","sendFormat":"","sendCommand":"var volCmd = OSC.CreateMessageData('/teensy1/audio/mixer1/ga','if',2,d.val/100.0)\nOSC.SendData(volCmd)","x":680,"y":685,"z":"Main","bgColor":"#808080","wires":[],"wireNames":[]},{"id":"Main_Slider5","type":"UI_Slider","name":"volume","comment":"","w":30,"h":300,"textSize":14,"midiCh":"0","midiId":"0","orientation":"v","label":"d.val","minVal":0,"maxVal":100,"val":97,"outputFloat":false,"minValF":-1,"maxValF":1,"floatVal":0,"decimalCount":-1,"steps":201,"sendSpace":true,"repeat":false,"repeatPeriod":0,"sendMode":"r","autoReturn":false,"returnValue":"mid","barFGcolor":"#F6F8BC","sendFormat":"","sendCommand":"var volCmd = OSC.CreateMessageData('/teensy1/audio/mixer1/ga','if',3,d.val/100.0)\nOSC.SendData(volCmd)","x":740,"y":685,"z":"Main","bgColor":"#808080","wires":[],"wireNames":[]},{"id":"Main_Slider6","type":"UI_Slider","name":"volume","comment":"","w":30,"h":300,"textSize":14,"midiCh":"0","midiId":"0","orientation":"v","label":"d.val","minVal":0,"maxVal":100,"val":88,"outputFloat":false,"minValF":-1,"maxValF":1,"floatVal":0,"decimalCount":-1,"steps":201,"sendSpace":true,"repeat":false,"repeatPeriod":0,"sendMode":"r","autoReturn":false,"returnValue":"mid","barFGcolor":"#F6F8BC","sendFormat":"","sendCommand":"var volCmd = OSC.CreateMessageData('/teensy1/audio/mixer2/ga','if',0,d.val/100.0)\nOSC.SendData(volCmd)","x":530,"y":175,"z":"Main","bgColor":"#808080","wires":[],"wireNames":[]},{"id":"Main_Slider7","type":"UI_Slider","name":"volume","comment":"","w":30,"h":300,"textSize":14,"midiCh":"0","midiId":"0","orientation":"v","label":"d.val","minVal":0,"maxVal":100,"val":50,"outputFloat":false,"minValF":-1,"maxValF":1,"floatVal":0,"decimalCount":-1,"steps":201,"sendSpace":true,"repeat":false,"repeatPeriod":0,"sendMode":"r","autoReturn":false,"returnValue":"mid","barFGcolor":"#F6F8BC","sendFormat":"","sendCommand":"var volCmd = OSC.CreateMessageData('/teensy1/audio/mixer2/ga','if',1,d.val/100.0)\nOSC.SendData(volCmd)","x":600,"y":175,"z":"Main","bgColor":"#808080","wires":[],"wireNames":[]},{"id":"Main_Slider8","type":"UI_Slider","name":"volume","comment":"","w":30,"h":300,"textSize":14,"midiCh":"0","midiId":"0","orientation":"v","label":"d.val","minVal":0,"maxVal":100,"val":11,"outputFloat":false,"minValF":-1,"maxValF":1,"floatVal":0,"decimalCount":-1,"steps":201,"sendSpace":true,"repeat":false,"repeatPeriod":0,"sendMode":"r","autoReturn":false,"returnValue":"mid","barFGcolor":"#F6F8BC","sendFormat":"","sendCommand":"var volCmd = OSC.CreateMessageData('/teensy1/audio/mixer2/ga','if',2,d.val/100.0)\nOSC.SendData(volCmd)","x":665,"y":175,"z":"Main","bgColor":"#808080","wires":[],"wireNames":[]},{"id":"Main_Slider9","type":"UI_Slider","name":"volume","comment":"","w":30,"h":300,"textSize":14,"midiCh":"0","midiId":"0","orientation":"v","label":"d.val","minVal":0,"maxVal":100,"val":6,"outputFloat":false,"minValF":-1,"maxValF":1,"floatVal":0,"decimalCount":-1,"steps":201,"sendSpace":true,"repeat":false,"repeatPeriod":0,"sendMode":"r","autoReturn":false,"returnValue":"mid","barFGcolor":"#F6F8BC","sendFormat":"","sendCommand":"var volCmd = OSC.CreateMessageData('/teensy1/audio/mixer2/ga','if',3,d.val/100.0)\nOSC.SendData(volCmd)","x":725,"y":175,"z":"Main","bgColor":"#808080","wires":[],"wireNames":[]},{"id":"Main_Slider10","type":"UI_Slider","name":"volume (all)","comment":"","w":30,"h":300,"textSize":14,"midiCh":"0","midiId":"0","orientation":"v","label":"d.val","minVal":0,"maxVal":100,"val":9,"outputFloat":false,"minValF":-1,"maxValF":1,"floatVal":0,"decimalCount":-1,"steps":201,"sendSpace":true,"repeat":false,"repeatPeriod":0,"sendMode":"r","autoReturn":false,"returnValue":"mid","barFGcolor":"#F6F8BC","sendFormat":"","sendCommand":"var volCmd = OSC.CreateMessageData('/teensy1/audio/mixer*/ga','if',0,d.val/100.0)\nOSC.SendData(volCmd)","x":420,"y":710,"z":"Main","bgColor":"#808080","wires":[],"wireNames":[]}]}],"nodeAddons":{}
}

Using the latest OSCAudio, Audio code.

Not using an FTDI (is this the problem?)

Default Serial settings, no changes.

Teensy is showing up on COM 3 in the GUI Tool.
 
I should publish my rather hacky Python code to create the derived OSCAudio classes from the Audio library headers - will do that tonight if I remember. I could probably export some .md code as well, which would make the documentation that bit easier. But maybe it's best to start from the OSCaudio headers, as they may be out of date.

On code size, I'm not too bothered by Flash usage, as there's plenty in the T4.1. But because it gets copied to RAM it leaves that a bit more constrained - not a problem right now, but it could be for bigger projects. I just mentioned it as a consideration for the future, and for when I get round to doing the T3.x dynamic library. Also, occasionally someone comes up with a really big RAM consumer - MarkT's recent convolution object, for example: I haven't dared try that out! If Paul's ever going to consider rolling any of this into the official Teensyduino releases, he's not going to want the T3.x community left with an unusable tool.
 
@JayShoe
you can try this
https://github.com/manicken/OSCAudioPlatformIO/blob/main/src/OSCAudioEmpty.ino
don't forget
to copy these to your sketch folder
https://github.com/manicken/OSCAudioPlatformIO/blob/main/src/SLIPEncodedUSBSerial1.cpp
https://github.com/manicken/OSCAudioPlatformIO/blob/main/src/SLIPEncodedUSBSerial1.h

here is my post if you missed it
https://forum.pjrc.com/threads/6879...Implementation?p=295545&viewfull=1#post295545



where I have replaced all (at least in the ino file)
Serial with a #define DBG_SERIAL Serial
that is just to make it easy to change it later, to for example a hardware serial port

in void setup()
I have removed the
while(!Serial);
because it will block the program until the "DBG_SERIAL" is connected to

and then put the crash report stuff in the end of the void loop()




@anyone
I also did try to make the while (!OSC_SERIAL.endofPacket())
non blocking by replacing it with a if instead

it will look something like this (in it's easiest format)
Code:
if (OSC_SERIAL.endofPacket())
  {
    
    msgLen = OSC_SERIAL.available();
    while (msgLen--)
    {
      char c = OSC_SERIAL.read();
      // figure out if it's a message or a bundle
      if (0 == firstCh)
        firstCh = c;
      if ('#' == firstCh)
        bndl.fill((uint8_t) c); // simple messages should result in a 1-message "bundle", but don't
      else
        msg.fill((uint8_t) c); // so process them specifically
    }
  }
  else
        return;
that above don't work OSC_SERIAL.endofPacket() will never be true


What I actually tried was to put the whole OSC "task" in a separate function
and I also implemented my LED blink task (highly efficient one)

the led was blinkin
but OSC_SERIAL.endofPacket() is always false


I believe that the OSC_SERIAL.endofPacket()
need to be continuous monitored otherwise there will be data loss
 
I'm getting somewhere!

I decided to download your PlatformIO project and compile it there. Looks like you have Dual Serial starting to function. And that seems to have started to make things work, if I'm not mistaken.

Code:
Welcome to the WebSocketServer!Welcome to the WebSocketServer!new connection: /new connection: /midiDevicesIn(TouchOSC Bridge No details available Real Time Sequencer Software sequencer) midiDevicesOut(Gervill Software MIDI Synthesizer Microsoft MIDI Mapper Windows MIDI_MAPPER Microsoft GS Wavetable Synth Internal software synthesizer TouchOSC Bridge External MIDI Port Real Time Sequencer Software sequencer) raw send:
#bundleØ�e�=���ØØØØ /teensy*/dynamic/clearAl*ØØØ,ØØØØØØ</teensy*/dynamic/cr*O*ØØ,ssØAudioSynthWaveformØØwaveform1ØØØØØØ</teensy*/dynamic/cr*O*ØØ,ssØAudioSynthWaveformØØwaveform2ØØØØØØ</teensy*/dynamic/cr*O*ØØ,ssØAudioSynthWaveformØØwaveform3ØØØØØØ</teensy*/dynamic/cr*O*ØØ,ssØAudioSynthWaveformØØwaveform4ØØØØØØ0/teensy*/dynamic/cr*O*ØØ,ssØAudioMixer4Ømixer1ØØØØØ0/teensy*/dynamic/cr*O*ØØ,ssØAudioMixer4ØmixerRØØØØØ0/teensy*/dynamic/cr*O*ØØ,ssØAudioOutputI2SØØi2sØØØØ@/teensy*/dynamic/cr*O*ØØ,ssØAudioControlSGTL5000ØØØØsgtl5000ØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform10mixer10ØØØØØØH/teensy*/audio/waveform10mixer10/c*Ø,sisiØØØwaveform1ØØØØØØØmixer1ØØØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform10mixerR0ØØØØØØH/teensy*/audio/waveform10mixerR0/c*Ø,sisiØØØwaveform1ØØØØØØØmixerRØØØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform20mixer11ØØØØØØH/teensy*/audio/waveform20mixer11/c*Ø,sisiØØØwaveform2ØØØØØØØmixer1ØØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform20mixerR1ØØØØØØH/teensy*/audio/waveform20mixerR1/c*Ø,sisiØØØwaveform2ØØØØØØØmixerRØØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform30mixer12ØØØØØØH/teensy*/audio/waveform30mixer12/c*Ø,sisiØØØwaveform3ØØØØØØØmixer1ØØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform30mixerR2ØØØØØØH/teensy*/audio/waveform30mixerR2/c*Ø,sisiØØØwaveform3ØØØØØØØmixerRØØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform40mixer13ØØØØØØH/teensy*/audio/waveform40mixer13/c*Ø,sisiØØØwaveform4ØØØØØØØmixer1ØØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform40mixerR3ØØØØØØH/teensy*/audio/waveform40mixerR3/c*Ø,sisiØØØwaveform4ØØØØØØØmixerRØØØØØØØØ(/teensy*/dynamic/cr*C*ØØ,sØØmixer10i2s0ØØØØ</teensy*/audio/mixer10i2s0/c*ØØØ,sisiØØØmixer1ØØØØØØi2sØØØØØØØØ(/teensy*/dynamic/cr*C*ØØ,sØØmixerR0i2s1ØØØØ</teensy*/audio/mixerR0i2s1/c*ØØØ,sisiØØØmixerRØØØØØØi2sØØØØ
[not connected]
raw send:
#bundleØ�e�Mf$�ØØØØ /teensy*/dynamic/clearAl*ØØØ,ØØØØØØ</teensy*/dynamic/cr*O*ØØ,ssØAudioSynthWaveformØØwaveform1ØØØØØØ</teensy*/dynamic/cr*O*ØØ,ssØAudioSynthWaveformØØwaveform2ØØØØØØ</teensy*/dynamic/cr*O*ØØ,ssØAudioSynthWaveformØØwaveform3ØØØØØØ</teensy*/dynamic/cr*O*ØØ,ssØAudioSynthWaveformØØwaveform4ØØØØØØ0/teensy*/dynamic/cr*O*ØØ,ssØAudioMixer4Ømixer1ØØØØØ0/teensy*/dynamic/cr*O*ØØ,ssØAudioMixer4ØmixerRØØØØØ0/teensy*/dynamic/cr*O*ØØ,ssØAudioOutputI2SØØi2sØØØØ@/teensy*/dynamic/cr*O*ØØ,ssØAudioControlSGTL5000ØØØØsgtl5000ØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform10mixer10ØØØØØØH/teensy*/audio/waveform10mixer10/c*Ø,sisiØØØwaveform1ØØØØØØØmixer1ØØØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform10mixerR0ØØØØØØH/teensy*/audio/waveform10mixerR0/c*Ø,sisiØØØwaveform1ØØØØØØØmixerRØØØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform20mixer11ØØØØØØH/teensy*/audio/waveform20mixer11/c*Ø,sisiØØØwaveform2ØØØØØØØmixer1ØØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform20mixerR1ØØØØØØH/teensy*/audio/waveform20mixerR1/c*Ø,sisiØØØwaveform2ØØØØØØØmixerRØØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform30mixer12ØØØØØØH/teensy*/audio/waveform30mixer12/c*Ø,sisiØØØwaveform3ØØØØØØØmixer1ØØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform30mixerR2ØØØØØØH/teensy*/audio/waveform30mixerR2/c*Ø,sisiØØØwaveform3ØØØØØØØmixerRØØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform40mixer13ØØØØØØH/teensy*/audio/waveform40mixer13/c*Ø,sisiØØØwaveform4ØØØØØØØmixer1ØØØØØØØØ0/teensy*/dynamic/cr*C*ØØ,sØØwaveform40mixerR3ØØØØØØH/teensy*/audio/waveform40mixerR3/c*Ø,sisiØØØwaveform4ØØØØØØØmixerRØØØØØØØØ(/teensy*/dynamic/cr*C*ØØ,sØØmixer10i2s0ØØØØ</teensy*/audio/mixer10i2s0/c*ØØØ,sisiØØØmixer1ØØØØØØi2sØØØØØØØØ(/teensy*/dynamic/cr*C*ØØ,sØØmixerR0i2s1ØØØØ</teensy*/audio/mixerR0i2s1/c*ØØØ,sisiØØØmixerRØØØØØØi2sØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/sgtl5000/enablØØØ,ØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C\ØØØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C\ØØØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C\ØØØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C\ØØØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���CO�ØØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���CO�ØØØØØ
raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���CC�jØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���CC�jØØØØ
raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C8�IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C8�IØØØØ
raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���CC�jØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���CC�jØØØØ
raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C.�7ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C.�7ØØØØ
raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C$�TØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C$�TØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ=#�
raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ=L��
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ>\)
raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ>W =
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ>\)
raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ>.{
raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ>W =
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ>Ǯ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ>���
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer*/gaØØØØ,ifØØØØØ?.{
raw send:
/teensy1/audio/mixer*/gaØØØØ,ifØØØØØ?333
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer*/gaØØØØ,ifØØØØØ?=p�
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer*/gaØØØØ,ifØØØØØ?B�\
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer*/gaØØØØ,ifØØØØØ?L��
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer*/gaØØØØ,ifØØØØØ?W =
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer*/gaØØØØ,ifØØØØØ?\(�
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer*/gaØØØØ,ifØØØØØ?^�R
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer*/gaØØØØ,ifØØØØØ?c�
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer*/gaØØØØ,ifØØØØØ?fff
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��IØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��7ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��7ØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��TØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��TØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��AØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��AØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��ØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��`ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��`ØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��ØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��TØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��TØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��7ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��7ØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��IØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��7ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��7ØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��TØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��TØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��jØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��jØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��7ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��7ØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��IØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��7ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��7ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/sgtl5000/enablØØØ,ØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C�ØØØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C�ØØØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��jØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��jØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��7ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��7ØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��AØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��AØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���C\ØØØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���C\ØØØØØØ
raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���C8�IØØØØ
raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���C8�IØØØØ
raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���C$�TØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���C$�TØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C8�IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C8�IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C8�IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C8�IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C8�IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C8�IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C8�IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C8�IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C8�IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C8�IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy*/dynamic/createObject*ØØ,ssØAudioInputUSBØØØusbØ
added node (AudioInputUSB) usb
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

removed link (waveform1, 0, mixer1, 0)
removed link (waveform1, 0, mixerR, 0)
raw send:
#bundleØ�e����0ØØØØ4/teensy*/dynamic/destroy*ØØØ,sØØwaveform10mixer10ØØØØØØ4/teensy*/dynamic/destroy*ØØØ,sØØwaveform10mixerR0ØØØØØØ,/teensy*/dynamic/destroy*ØØØ,sØØwaveform1ØØØ
removed node waveform1
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
#bundleØ�e��st�ØØØØ0/teensy*/dynamic/createConn*ØØØØ,sØØusb0mixer10ØØØØ@/teensy*/audio/usb0mixer10/connect*Ø,sisiØØØusbØØØØØmixer1ØØØØØØ
added link [usb0mixer10] (usb, 0, mixer1, 0)
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
#bundleØ�e���j�ØØØØ0/teensy*/dynamic/createConn*ØØØØ,sØØusb1mixerR0ØØØØ@/teensy*/audio/usb1mixerR0/connect*Ø,sisiØØØusbØØØØmixerRØØØØØØ
added link [usb1mixerR0] (usb, 1, mixerR, 0)
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���CO�ØØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���CO�ØØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer1/gaØØØØ,ifØØØØØ?(�
raw send:
/teensy1/audio/mixer1/gaØØØØ,ifØØØØØ?(��
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer1/gaØØØØ,ifØØØØØ?^�R
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer1/gaØØØØ,ifØØØØØ?fff
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer1/gaØØØØ,ifØØØØ?\(�
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer1/gaØØØØ,ifØØØØ?c�
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy*/audio/sgtl5000/volØ,fØØ?n{
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���CC�jØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���CC�jØØØØ
raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C.�7ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C.�7ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ? =
raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ?(�
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ?G�
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ?Tz�
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ?Y��
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ?fff
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ?n{
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���Cv�ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���Cv�ØØØØ
raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���C\ØØØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���C\ØØØØØØ
raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���CC�jØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���CC�jØØØØ
raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���C.�7ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���C.�7ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ?@ØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/mixer2/gaØØØØ,ifØØØØ?Q��
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���C\ØØØØØØ
raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���C\ØØØØØØ
raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���CC�jØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���CC�jØØØØ
raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���C$�TØØØØ
raw send:
/teensy1/audio/waveform1/beØ,ffiØØØØ=���C$�TØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C8�IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���C8�IØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���CC�jØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform2/beØ,ffiØØØØ=���CC�jØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C�ØØØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C�ØØØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��jØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��jØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��TØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��TØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��ØØØØ
raw send:
/teensy1/audio/waveform4/beØ,ffiØØØØ=���C��ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���CO�ØØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���CO�ØØØØØ
raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C8�IØØØØ
raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C8�IØØØØ
raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C�AØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C�AØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���CC�jØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���CC�jØØØØ
raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C.�7ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C.�7ØØØØ
raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C�ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C�ØØØØ
raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C$�TØØØØ
raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C$�TØØØØ
raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C.�7ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy1/audio/waveform3/beØ,ffiØØØØ=���C.�7ØØØØ
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy*/audio/sgtl5000/volØ,fØØ?p��
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

raw send:
/teensy*/audio/sgtl5000/volØ,fØØ?s33
#bundleØØØØØØØØØØØØ/replyØØ,ØØØ
timeTag:{"raw":[0,0],"native":-2208988800000}
packets:
{"address":"/reply","args":[]}

I had to comment out this line in OSCAudioAutogen-static.h to get rid of an error.

Code:
            // else if (isTarget(msg,addressOffset,"/se*","i")) {setMaxBuffers(msg.getInt(0)); addReplyExecuted(msg,addressOffset,reply);} // void setMaxBuffers(uint8_t);

Ok, so it appears that I'm talking with the Teensy, right? I just can't get any sound to come out. I can confirm that my hardware is at least somewhat correct because I run the Audio Passthrough example and I can get it to play from the USB audio using that project.

I have turned up all volumes.

I have clicked "enable" at the start of it.

The port that I connected to was the Dual Serial Com 14. There is also a dual serial Com 13.

My keyboard is still oddly effected by this entire system. Right now, as a type, it's very slow. Strange.

You'll see in the log above that I tried adding USB audio to this project (as a test) but that didn't work. And I'd bet it is because of the project type (Dual Serial) not including USB Audio. So I know that won't work, but still stuck trying to figure out how to get a simple waveform playing as in the example.

Anything else I could be missing?
 
you have to do the export twice

OSCAudioAutogen-static.h is only included when there is no dynamic audio lib available

this is from your post:
3. Put branch "features/dynamic-updates" into Arduino/Libraries/Audio/
4. Overwrote the "cores" library in "C:\Program Files (x86)\Arduino\hardware\teensy\avr\cores" with https://github.com/h4yn0nnym0u5e/cores (This part was more difficult because it's hard to Git in the Program Files...)

3.
you should put branch features/dynamic-updates from

Code:
git clone -b feature/Audio/dynamic-updates https://github.com/h4yn0nnym0u5e/cores.git

into
"C:\Program Files (x86)\Arduino\hardware\teensy\avr"
first rename the old "cores" folder to (for example cores.old)
then put the "new" cores folder there

best is to just git to a temp folder ex. C:\Temp
and then copy the cores folder from there

4.
then https://github.com/h4yn0nnym0u5e/OSCAudio
into either the sketch folder or
Arduino/Libraries/Audio/
 
I have now added a additional import function to the Tool
so if you input a url in the JSON import dialog

for example:
https://raw.githubusercontent.com/manicken/OSCAudioPlatformIO/main/DesignToolGui.json

then that is downloaded and imported

By the way that is my latest
test setup
It utilizes a lot of generalization
to all the sent OSC messages.

There is also a new field available to all UI items called tag
it can be set to any value and then be used in the script

here for example I use the string split to separate multiple tag:s
the tag is set to g 0
and the parent groupname is mixer

the code is for a slider
Code:
var tags = d.tag.split(' ');
var addr = RED.OSC.settings.RootAddress + "/audio/"+d.parentGroup.name+"/"+tags[0]+"*";
OSC.SendData(OSC.CreateMessageData(addr,"if", tags[1], d.val/d.maxVal));

here is how it looks like
OSCtestSetup.png

so if you for example needs another waveform, just copy/paste one of the waveform groups
the just rename the group to match the new waveform name
Or if you want an additional envelope controller just do the same with that.


By the way there seems to be some problem setting and using the Pulse waveform type.

@JayShoe
I hope that you get it up and running soon.
 
Loving the new test layout. Can't figure out the problem with the Pulse waveform, though part of it will be you don't scale the duty cycle to a 0.0-1.0 range: doesn't fix the problem, though. You have the same issue on env.sustain, and scaling that to the correct range does work.

if you want the frequency sliders to operate in semitones then this is workable code for setting the output frequency:
Code:
var freq = Math.pow(2,d.val/12)*55/4;
var addr = RED.OSC.settings.RootAddress + "/audio/"+d.parentGroup.name+"/"+d.tag+"*";
OSC.SendData(OSC.CreateMessageData(addr,"f", freq));
Need to set the slider range to 0-100 to give sane values, and obviously change the bottom label calculation. Actually, with a bit of thought we could probably make 0-127 give the correct frequencies for MIDI notes.
 
Yes the scales (pulse and sustain) was totally wrong, thanks

I did it right in my PolySynth project
but that calculation is behind MIDI messages
so I did forget it.

other fixes
* wave form types was missing arbitrary in the list and therefore all the indexes after triangle where incorrect
have now added that and all Band Limit waveform types

* changed the range of offset slider so it goes from -1.0 to 1.0 (-100 to 100)

I have now pushed the fixes to my example JSON in post #132
https://forum.pjrc.com/threads/6879...Implementation?p=295627&viewfull=1#post295627
 
I have now added a tiny mod to the slider

instead of doing
Code:
var addr = RED.OSC.settings.RootAddress + "/audio/"+d.parentGroup.name+"/"+d.tag+"*";
OSC.SendData(OSC.CreateMessageData(addr,"f", (d.val/d.maxVal)));

you can now do
Code:
var addr = RED.OSC.settings.RootAddress + "/audio/"+d.parentGroup.name+"/"+d.tag+"*";
OSC.SendData(OSC.CreateMessageData(addr,"f", d.fval));

by setting this new divVal
sliderKindOf_float.png

what it do inside is just
d.fval = d.val/d.divVal;

this makes the code a little less ugly

also this d.fval can also be put into the slider bottom label for simpler setup

note. you can't put a zero in the div val field (there is a failsafe functionality)
 
I have now added two new functions
to the OSC namespace
to use in the GUI objects

SendBundle(bundle)
SendMessage(address, valueTypes, ...values)

so instead of writing
Code:
OSC.SendData(OSC.CreateMessageData(addr,"if", tags[1], d.fval));

or

OSC.SendData(OSC.CreateBundleData(bundle));

it can now be
Code:
OSC.SendMessage(addr,"if", tags[1], d.fval));

or 

OSC.SendBundle(bundle);

don't know why I did not implement it before

I will update my example design later
 
@anyone
I also did try to make the while (!OSC_SERIAL.endofPacket()) non blocking by replacing it with a if instead

it will look something like this (in it's easiest format)
Code:
<some code removed here!>
that above don't work OSC_SERIAL.endofPacket() will never be true

What I actually tried was to put the whole OSC "task" in a separate function and I also implemented my LED blink task (highly efficient one). the led was blinkin but OSC_SERIAL.endofPacket() is always false.

I believe that the OSC_SERIAL.endofPacket() need to be continuous monitored otherwise there will be data loss
I've just done another commit which makes this non-blocking concept work. Good call, always best to leave space / time to add stuff to the execution loop...
 
Forgot to say ... although it looks horribly inefficient, translating an incoming MIDI Note On to a bundle of three OSC messages, including using a sprintf() for each one, and then routing through the whole OSC router to get to the relevant audio objects for actioning, still only takes ~85µs, or under 3 MIDI bit times!
 
@h4yn0nnym0u5e
why don't you put the CrashReport stuff in the main loop?

like this
Code:
if (CrashReport && Serial)
  {
    Serial.println(CrashReport);
    CrashReport.clear();
  }

then it will not block in the setup until you connect to the USB serial
 
Last edited:
@h4yn0nnym0u5e
why don't you put the CrashReport stuff in the main loop?

like this
Code:
if (CrashReport && DBG_SERIAL)
  {
    DBG_SERIAL.println(CrashReport);
    CrashReport.clear();
  }

then it will not block in the setup until you connect to the USB serial

Errr ... because I don't like continually testing for something that's only going to happen once, at boot? Seems logical to have it in setup(). I don't mind blocking until I get round to opening the serial port, but I realise it's a personal preference!

Here's a piece of code I hate seeing:
Code:
if(!(SD.begin(SDCARD_CS_PIN))) {
    // stop here, but print a message repetitively
    while (1) {
      Serial.println("Unable to access the SD card");
      delay(500);
    }
}
Utterly pointless, especially as (in my experience), re-trying the SD.begin() often works... You'll note from my code I don't like that brace layout, either.
 
I don't like it in the main loop either,

Maybe there should be some kind of timeout.

in the setup
Code:
unsigned long ms = millis();
while (Serial) { if ((millis() - ms) > 5000) break; }


And by the way I have totally misunderstand how the SLIPEncoded(Serial/USBSerial) receives data
It need to both check the endofPacket and then also execute available
as the available() function checks for FIRSTEOT to change it's internal state
so that finally endofPacket can return true


I was thinkin it was interrupt based
(yes I know it have USB interrupt in the background)

but now when I really analyze the SLIPEncoded code then I realize how it's working.
 
by the way I found this
https://forum.pjrc.com/threads/66330-Dual-SerialUSB-and-MIDI-config-possible

Looks like we can have Dual Serial, MIDI and Audio at the same time

but I think Audio is not needed right now

I just changed USB_MIDI_SERIAL
to this (with success):
Code:
#elif defined(USB_MIDI_SERIAL)
  #define VENDOR_ID		0x16C0
  #define PRODUCT_ID		0x0489
  #define MANUFACTURER_NAME	{'T','e','e','n','s','y','d','u','i','n','o'}
  #define MANUFACTURER_NAME_LEN	11
  #define PRODUCT_NAME		{'T','e','e','n','s','y',' ','M','I','D','I'}
  #define PRODUCT_NAME_LEN	11
  #define EP0_SIZE		64
  #define NUM_ENDPOINTS         6
  #define NUM_INTERFACE		5
  #define CDC_IAD_DESCRIPTOR	1
  #define CDC_STATUS_INTERFACE	0
  #define CDC_DATA_INTERFACE	1	// Serial
  #define CDC_ACM_ENDPOINT	2
  #define CDC_RX_ENDPOINT       3
  #define CDC_TX_ENDPOINT       3
  #define CDC_ACM_SIZE          16
  #define CDC_RX_SIZE_480       512
  #define CDC_TX_SIZE_480       512
  #define CDC_RX_SIZE_12        64
  #define CDC_TX_SIZE_12        64
  
  #define CDC2_STATUS_INTERFACE 2       // SerialUSB1
  #define CDC2_DATA_INTERFACE   3
  #define CDC2_ACM_ENDPOINT     5
  #define CDC2_RX_ENDPOINT      6
  #define CDC2_TX_ENDPOINT      6
  
  #define MIDI_INTERFACE        4	// MIDI
  #define MIDI_NUM_CABLES       1
  #define MIDI_TX_ENDPOINT      4
  #define MIDI_TX_SIZE_12       64
  #define MIDI_TX_SIZE_480      512
  #define MIDI_RX_ENDPOINT      4
  #define MIDI_RX_SIZE_12       64
  #define MIDI_RX_SIZE_480      512
  #define ENDPOINT2_CONFIG	ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_INTERRUPT
  #define ENDPOINT3_CONFIG	ENDPOINT_RECEIVE_BULK + ENDPOINT_TRANSMIT_BULK
  #define ENDPOINT4_CONFIG	ENDPOINT_RECEIVE_BULK + ENDPOINT_TRANSMIT_BULK
  
  #define ENDPOINT5_CONFIG	ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_INTERRUPT
  #define ENDPOINT6_CONFIG	ENDPOINT_RECEIVE_BULK + ENDPOINT_TRANSMIT_BULK

and then have this in both
SLIPEncodeUSBSerial1.cpp/.h

Code:
#if (defined(CORE_TEENSY) && (defined(USB_DUAL_SERIAL) || defined(USB_TRIPLE_SERIAL) || defined(USB_MIDI_SERIAL)))


that Means I can test the MIDI as well
 
of some strange reason
The Web Serial API did not like
the product id 0x0489
and not any ports was not available when using that
(refreshed the page, changed to manicken.github.io, restarted the whole browser)
nothing worked

then I changed it to

#define PRODUCT_ID 0x048B

and they are there

very strange behavior


@product id 0x0489
The ports was visible in windows
and I could connect and send and receive data with success
from Br@y Terminal
 
Sounds good, I may well move over to using that.

Not going to get much done for the next few days - moving sons about the country! Then it’s time to look at your ideas for voice-based grouping and control, I think.
 
@adrianfreed, when you're able to give this some bandwidth, it'd be good to discuss OSC stuff (maybe start another thread, or on github). Just looked at the outstanding PRs, and have agreed with #100, and definitely like #93 (in principle: though I don't fully understand it, I've encountered the problem that I think it's trying to solve :)).
 
I have been thinkin we actually need some special object, hink we should use OSCAudioBase:s functionality so that special object have it's own address "space" to store the "entry" point for a linked list so we then can create "cascaded linked lists".

Putting everything in a huge linked list, would be not so performance wise as every object has to be checked

...

so what do you think?
I'm looking into this ... very similar ideas to yours, but introducing an OSCAudioGroup object to do a nested linkage to arbitrary depth. Getting my linked lists very tangled, and have to go out now ... but it'll work out in the end!
 
Back
Top