News:

SMF for DIYStompboxes.com!

Main Menu

Audio Effects DSP Board

Started by markseel, June 13, 2016, 11:53:46 AM

Previous topic - Next topic

mizgreen

Definitely like to have one! though I'm not familiar with coding stuff.
How many IRs it can hold at once?
I need a small Cabsim board inside of my DIY preamp pedal.

orbitbot

Quote from: markseel on April 24, 2017, 06:40:39 PM
Quote from: orbitbot on April 24, 2017, 06:34:52 PM
... a bit wary of construction complexity and screwing up something...

Also, a cheap guitar/analog interface board is in the works so then you'd just have to connect it to the XMOS board and wire up your audio jacks and switches and what-not. 

Oh, must have missed the part about the guitar/analog interface if it's been mentioned somewhere. Sounds reasonable enough. It seems like an interface like that where you can do the volume and current scaling to whatever the digital boards or codecs supports (and back afterwards) is the missing element (or something you're expected to be able to whip up) in a lot of potential effects solutions for guitar, but it's all a bit over my head electronics-wise.

glennalday

This seems to fit my needs for a multichannel usb audio interface. Please count me in! I wan't one! :)

markseel

#143
Quote from: glennalday on April 25, 2017, 07:55:33 PM
This seems to fit my needs for a multichannel usb audio interface. Please count me in! I wan't one! :)

Great.  This little board can do up to 32x32 USB audio channels (32-bit samples) or up to 48x48 using 24-bit samples.  And even at max channel count you still have 15 processing cores for DSP if needed.  Amazing.

There's MCLK, BCLK and WCLK signals (the I2S clocks) as well as four ADC data wires and four DAC data wires.  Each data wire can support 2 (stereo), 4, or 8 sample slots per wire (time division multiplexed and supported by many higher channel count DACs/ADCs/CODECs) - this as well as sample rates, USB product/vendor descriptor ID and strings, are all configurable at compile-time.

BTW with OS X and Linux support USB audio 2.0 natively while with Windows you need a third party driver (figures).

glennalday

Question:
How was you able to implement the usb bootloader?

pruttelherrie

Quote from: markseel on April 25, 2017, 11:07:02 PM
Quote from: glennalday on April 25, 2017, 07:55:33 PM
This seems to fit my needs for a multichannel usb audio interface. Please count me in! I wan't one! :)

Great.  This little board can do up to 32x32 USB audio channels (32-bit samples) or up to 48x48 using 24-bit samples.  And even at max channel count you still have 15 processing cores for DSP if needed.  Amazing.

There's MCLK, BCLK and WCLK signals (the I2S clocks) as well as four ADC data wires and four DAC data wires.  Each data wire can support 2 (stereo), 4, or 8 sample slots per wire (time division multiplexed and supported by many higher channel count DACs/ADCs/CODECs) - this as well as sample rates, USB product/vendor descriptor ID and strings, are all configurable at compile-time.

BTW with OS X and Linux support USB audio 2.0 natively while with Windows you need a third party driver (figures).

Nice to see this progress Mark! Of course I'm in for a board as well.

Question: how much effort is it to incorporate ADAT lightpipe functionality in your framework? Have you considered it? The 4 DAC data wires could be used two drive two toslink receivers and two toslink transmitters, for a total of 16 in/16 out.

Also, I believe this board would be a possibility to test stuff before the guitar adapter board is available: https://www.pjrc.com/store/teensy3_audio.html

micromegas

Quote from: pruttelherrie on April 27, 2017, 04:37:54 AM
Quote from: markseel on April 25, 2017, 11:07:02 PM
Quote from: glennalday on April 25, 2017, 07:55:33 PM
This seems to fit my needs for a multichannel usb audio interface. Please count me in! I wan't one! :)

Great.  This little board can do up to 32x32 USB audio channels (32-bit samples) or up to 48x48 using 24-bit samples.  And even at max channel count you still have 15 processing cores for DSP if needed.  Amazing.

There's MCLK, BCLK and WCLK signals (the I2S clocks) as well as four ADC data wires and four DAC data wires.  Each data wire can support 2 (stereo), 4, or 8 sample slots per wire (time division multiplexed and supported by many higher channel count DACs/ADCs/CODECs) - this as well as sample rates, USB product/vendor descriptor ID and strings, are all configurable at compile-time.

BTW with OS X and Linux support USB audio 2.0 natively while with Windows you need a third party driver (figures).

Nice to see this progress Mark! Of course I'm in for a board as well.

Question: how much effort is it to incorporate ADAT lightpipe functionality in your framework? Have you considered it? The 4 DAC data wires could be used two drive two toslink receivers and two toslink transmitters, for a total of 16 in/16 out.

Also, I believe this board would be a possibility to test stuff before the guitar adapter board is available: https://www.pjrc.com/store/teensy3_audio.html
I've use the Teensy's audio adaptor quite a lot. It is good, but you would still need some signal conditioning for input & output (an option is to use Piotr's IO board: http://www.hexeguitar.com/diy/utility/devloop). Another one that has been there for a while is Mikroe's WM8731 board.
Software Developer @ bela.io

markseel

Quote from: pruttelherrie on April 27, 2017, 04:37:54 AM
Question: how much effort is it to incorporate ADAT lightpipe functionality in your framework? Have you considered it? The 4 DAC data wires could be used two drive two toslink receivers and two toslink transmitters, for a total of 16 in/16 out.

OK that's an interesting thought.  I've already coded ADAT and SPDIF for XMOS so adding output capability to this audio/effects development kit would be trivial.  I also have code for ADAT and SPDIF input but only for the wire protocol - not for the clock recovery aspect in which you'd use the SYNC info in the protocol(s) along with a PLL (configured via I2C) to generate a recovered bit clock.  But that's certainly doable if there's enough interest :-)

Quote from: pruttelherrie on April 27, 2017, 04:37:54 AM
Also, I believe this board would be a possibility to test stuff before the guitar adapter board is available: https://www.pjrc.com/store/teensy3_audio.html

Good idea.  That board would hook right up to the I2C and I2S signals.  It would be straightforward to port over the CODEC configuration code that uses I2C).  The only missing piece is a 3.3V supply but the board has 5V so I guess you'd just have to add a 5V to 3.3 regulator.

pruttelherrie

Quote from: markseel on April 27, 2017, 11:17:04 AM
Quote from: pruttelherrie on April 27, 2017, 04:37:54 AM
Question: how much effort is it to incorporate ADAT lightpipe functionality in your framework? Have you considered it? The 4 DAC data wires could be used two drive two toslink receivers and two toslink transmitters, for a total of 16 in/16 out.

OK that's an interesting thought.  I've already coded ADAT and SPDIF for XMOS so adding output capability to this audio/effects development kit would be trivial.
Good to hear,
QuoteI also have code for ADAT and SPDIF input but only for the wire protocol - not for the clock recovery aspect in which you'd use the SYNC info in the protocol(s) along with a PLL (configured via I2C) to generate a recovered bit clock.
... but you lost me here :)

QuoteBut that's certainly doable if there's enough interest :-)
There might be, once people realize that the Behringer ADA8000 provides 8in/8out for a ridiculously low price :)
Behringer gets a lot of crap, much of it deserved, but the mic pres in the ADA8000 are actually very good designs.

Quote from: pruttelherrie on April 27, 2017, 04:37:54 AM
Also, I believe this board would be a possibility to test stuff before the guitar adapter board is available: https://www.pjrc.com/store/teensy3_audio.html

Good idea.  That board would hook right up to the I2C and I2S signals.  It would be straightforward to port over the CODEC configuration code that uses I2C). 
[/quote]
I assume that's just a matter of sending the right initialization commands, datasheet in hand.

peterv999

Please count me in Mark for one!

Great project!

Piet

Tuff Pedals

Hi Mark,

Fantastic project , please count me in for a board.

Cheers daz

tcpoint

Put me down for a board.  I appreciate all the work.

markseel

#152
Quote from: micromegas on April 24, 2017, 05:09:10 PM
I am definitely interested in one
Quote from: mizgreen on April 25, 2017, 01:11:31 AM
Definitely like to have one! though I'm not familiar with coding stuff.
How many IRs it can hold at once?
I need a small Cabsim board inside of my DIY preamp pedal.
Quote from: orbitbot on April 24, 2017, 06:34:52 PM
I'd also be interested in a board when the time comes along, although I'm still a bit wary of construction complexity and screwing up something expensive while trying to DIY. Which is to say that I'm a bit price-sensitive, but following the development with great interest 8) A Kickstarter or something as mentioned earlier in the thread sounds like a reasonable approach to me.
Quote from: glennalday on April 25, 2017, 07:55:33 PM
This seems to fit my needs for a multichannel usb audio interface. Please count me in! I wan't one! :)
Quote from: pruttelherrie on April 27, 2017, 04:37:54 AM
Nice to see this progress Mark! Of course I'm in for a board as well.
Quote from: peterv999 on May 01, 2017, 11:54:27 AM
Please count me in Mark for one!
Quote from: Tuff Pedals on May 09, 2017, 12:36:39 PM
Fantastic project , please count me in for a board.
Quote from: tcpoint on May 09, 2017, 12:56:45 PM
Put me down for a board.  I appreciate all the work.

Thanks for the interest everyone.  Some unanswered questions from previous posts:

1) Regarding using a CODEC: "I assume that's just a matter of sending the right initialization commands, datasheet in hand."

Right, the development kit has I2S functions you can call.  The FlexFX firmware will call callback functions for events like volume changes from USB, sample-rate changes from USB, a timer, etc.  You can add your I2C code to these callbacks to manage the CODEC's behavior/settings appropriately.

2) How was you able to implement the usb boot loader?

The XMOS chip has a ROM boot loader that loads the FlexFX firmware from its internal FLASH memory.  This firmware in FLASH memory can be upgraded at any time via USB MIDI.

3) How many IRs it can hold at once?

The XEF232 has 2MB of FLASH of which less than 1MB is program code.  So there will be at least 1MB for data (like IR data).  For a decent size IR (80 msec at 48k with 32-bit samples) one IR would consume a bit less than 16KB.  So that would be 68 IR's.

4) Audio board support?

A companion board is being designed now that has a CS4270 audio CODEC with stereo line-in and line-out connections, a 9V to 5V linear voltage regulator for powering the system from 9V, and some signal conditions for guitar inputs as the alternative input (rather than line-in) that can be selected via a couple of jumpers.

pruttelherrie

Lately I've been playing a bit with jQuery knobs and WebMIDI. It's definitely possible to make a web-based mixer UI, running in the browser, that sends (SysEx) commands to a USB-MIDI device. See screenshot here: https://www.dropbox.com/s/e60tqgpv1oo1xa9/webmidi.png?dl=0
This simple example shows four channel strips with each four EQ bands, a panpot and four output busses.

I have also tested this page with a real USB-MIDI thingy, hardware looped-back from out back to the in with a MIDI cable, and all commands bounce back nicely. Next thing to implement are shelving EQs and what not, and include the calculations to convert EQ-settings to biquads. (which other people have done before me, for example http://www.earlevel.com/main/2013/10/13/biquad-calculator-v2/ and the therein linked .js file)

I find this webbased way of working very effective in that you can create a decent UI real quickly, is platform-independent, no drivers needed, etc.

Just thinking out loud: another possibility might be to link a RasPi Zero or maybe even an ESP chip to the FlexFX board (UART), which then can serve a page and calculate biquads and pass them to the FlexFX.

With your framework, the possibilities seem endless.

markseel

That's really cool - I would love to be able to control this via MIDI using a GUI running in a browser.  Is it possible to do this?  Sounds like it if I understood you correctly.  Does that WebMIDI support MIDI in both directions?

Yeah I thought about using an RasPi via USB and briefly looked around at RasPi MIDI host support but I wasn't convinced that this would be easy.  So MIDI over UART would be the way to go I guess.

But I'd be more interested in the WebMIDI route if I could send MIDI to the FlexFX board and receive MIDI from it as well.  I'm going to look into that!

Also saw this which looks interesting: https://www.midi.org/specifications/item/bluetooth-le-midi

orbitbot

Looking at the spec WebMidi seems to be Chrome-only, but should support MIDI in both directions. Most of the WebAudio stuff has been implemented a few years back, so I guess the functionality in general should be pretty comprehensive, but haven't had time to check out any implementation details yet.

Spec is here if you have time on your hands or know what to search for in particular: https://webaudio.github.io/web-midi-api/

pruttelherrie

Indeed, it works both ways. You add an event handler to any type of message you wish to process. In the code below it's processed by an unnamed inline function.

It's supposed to work in other major browsers with a plugin.


// jQuery handler for changes in the UI
$( ".knob-values" ).on( "knobnewvalue", function(a,b,c) {
    console.log(   $(this).parent().parent().parent().attr("id") + "/"
                 + $(this).parent().parent().attr("class") + "/"
                 + $(this).parent().attr("knob")
                 + ": " + $(this).val() );
    if(midi) output.playNote("A1",1);
});

var output;
var input;
var midi = false; // to prevent errors when there's nothing connected

WebMidi.enable(function (err) {
  if (err) {
           console.log("WebMidi could not be enabled.");
  } else {
  // Show available inputs and outputs
  console.log(WebMidi.inputs);
  console.log(WebMidi.outputs);
  // Retrieving an output port/device using its name
  output = WebMidi.getOutputByName("Scarlett 2i4 USB");
  input = WebMidi.getInputByName("Scarlett 2i4 USB");
  midi = true;
  try {
input.addListener('noteon', "all",
    function (e) {
    console.log("Received 'noteon' message (" + e.note.name + e.note.octave + ").");
    });
  } catch(err) { midi = false; };
  }
},true);


markseel

#157
Very cool.  A FlexFX controller, display, and uploader running in Chrome.  Check these out:

http://wiki.lividinstruments.com/wiki/Bluetooth_LE_MIDI_Connection
http://community.silabs.com/t5/Bluetooth-Wi-Fi-Knowledge-Base/Midi-over-BLE/ta-p/170804
https://www.midi.org/specifications/item/bluetooth-le-midi

So control could be wireless too and BLE MIDI is supported by lots of platforms already.

mhelin

#158
Get this:
http://www.ebay.com/itm/New-NRF51822-BLE4-0-Bluetooth-2-4GHz-Wireless-Module-Board-Core51822-B-/292006080825

and use this software:
https://github.com/sieren/blidino/tree/master/nRF51822-BLEMIDI

Works on Arduino, maybe not too difficult to port to xCORE platform.

nRF51822 SoC includes Cortex-M0 core, maybe the BLE-MIDI stack could run on the chip instead of xCORE.

nRF5 is supported by MBED so it might be easiest that way:
https://developer.mbed.org/teams/Bluetooth-Low-Energy/

See also this:
http://redbearlab.com/blenano/

markseel

Bingo!  I'm going to get one  :D