Suggestions please for 16-channel 24-bit digital audio recorder

Update on above - I tried a couple of higher-end s/pdif DAC units (one stereo, one 5.1 dolby) but neither of them resolved the Ultranet stream into audio. So looks like the thought that the cheap units wouldn't be too fussy about the bitstream was correct. So it's possible to convert Ultranet digital audio to analog, and cheaply (£5 for the unit), but downside is you have to dedicate 8 channels of the Ultranet port to the L/R analog output (or generate 4 x analog signals from one Ultranet port). Fortunately, the X32 can provide 3 Ulranet ports, so this is actually really useful :).
 
Hey there,
I'm working on a FPGA-based audio-mixer using the UltraNet-protocol. Goal is to create a simple audio-mixer to control via Arduino. I'm using the Arduino MKR Vidor 4000-platform with an Intel Cyclone 10LP. Here are my first steps on GitHub: https://github.com/xn--nding-jua/UltranetReceiver. Maybe someone has interests to come on board?

This is my work up to now:
1691763328688.png


So I'm receiving the UltraNet-Data using a MagJack SI-52008-F, feeding the data to an AM26LV32CD and then bringing the data to the Intel Cyclone 10LP FPGA on the Vidor 4000. Here the UltraNet data (8-channel AES/EBU) is received, converted to I2S, then put into 8 individual std_logic_vectors and from then on I can do everything I like. At the moment, the received samples are sent straight to a CS4344 Audio-DAC via another I2S and to a Stereo-SP/DIF (TOSLINK) adapter.

I'm in a very early state and up to now it is not tested yet. Is anyone interested in participating?
 
  • Like
Reactions: 1 user
Hi, I'm really interested in this project. I'm an amateur microcontroller developer, mainly with PIC and Arduino. I also run PA systems and sound for a couple of venues (again amateur). I don't have a lot of time to commit to this kind of project (I have a demanding day job) but can pursue during some evenings and weekends. I've already made a couple of Ultranet extenders and diff/SE converters. I've managed to decode Ultranet simply using a cheap SP/DIFF DAC, but it consumes all 8 ultranet channels from one stream, to provide a single L/R output. I'm very keen to decode the full Ultranet channel set using a microcontroller. Let me know how far you've got and I'll see if I can contribute. What assistance do you need in taking this further?
 
Hi, I would be really interested in participating. I honestly haven't done a lot of stuff with I2S and nothing at all with FPGAs and S/PDIF but I would like to contribute and help to build a cheap Ultranet-Mixer. If I can somehow help you work stuff out or help with mixer side I would be happy to help.
 
Hi,

yesterday I tested my VHDL-code and it worked! I had a P16-I for testing and soldered the Arduino MKR Vidor 4000 to the PCB directly for testing. Behringer is using a SN74LVC245AD Octal-Buffer between their Onboard-FPGA and the RJ45-Interface. So I connected my Arduino to Pin 6 (labeled "A5") of the first SN74LVC245AD and connected a P16-M to the first RJ45-connector to enable the output (green LED at the front turns on).
1693648843219.png


Then I had to increase my FPGA to 200MHz to decode the 192kHz bitstream without noises - 100MHz is working, but I had some noise there, So the code is working and I can decode all 16 channels to 16 individual std_logic_vectors. I still have some problems with the risetime of the signal when connected to the Arduino-board. Maybe I need an additional buffer here to increase signal-strength but for now it is fine for testing.

To test the signals I connected a simple and cheap TOSLINK/SPDIF-converter with coaxial-input to the arduino directly without any converter or buffer:
1693649475956.png
1693649492551.png


Two of the 16 std_logic_vectors are fed into the input of the SPDIF-tx-vhdl-block and I got clean audio at the analog-connectors.


The next steps:
  • establish communication between SAMD21 (of the Arduino MKR Vidor 4000) and Cyclone 10 FPGA
  • establish communication between SAMD21 and USB-port of the Vidor 4000 to control individual volumes via a simple protocol (maybe ASCII like ch01_L_50 and ch01_R_100?)
  • volume-adjusting of all 16 channels for left and right (so that we have a very simple audio-mixing)
  • create PCB with all important components (MagJack, buffers, Audio-DAC with I2S, TOSLINK/SPDIF, etc.)
  • some more ideas?

The code and (lateron the PCB) can be found here:
https://github.com/xn--nding-jua/UltranetReceiver

Stay tuned :)
 
Hi,

the system is now running and I've uploaded everything to Github. If you own an Arduino MKR Vidor 4000, you can start without installing any additional software.

Some bulletpoints on what this thing is doing:
  • FPGA contains working decoder for two Ultranet-Streams with each 8 channels of 24-bit audio-data
  • FPGA has a 16-channel audio-mixer with left/right- and volume-control sending to a stereo-main-bus
  • FPGA receives volume-control-commands from microcontroller
  • Microcontroller can be controlled with simple ASCII-commands via USB (or ethernet if you hook-up an Ethernet-chip). I included MQTT-support as well.
  • The FPGA-bitstream is included in Arduino-Sketch (bitstream.h) and will be uploaded to FPGA on each start of the microcontroller via a JTAG-emulation

The control-commands and more information can be found on the Github-project-page. I've attached a picure, how I connected a P16-I to the Arduino MKR Vidor 4000 - its very easy if you have a non-working P16-device at home :). On my P16-I the RJ45-connectors are not working anymore. So now I have a second-life for this device.

The second attachment shows the FPGA-part. After receiving the Ultranet and decoding into 24-bit-std_logic_vectors I'm doing some simple audio-mixing and perform the output to the SPDIF-interface. The Cyrrus CS4344 via I2S-output is not tested, yet.

If you have any idea, what can be done with this, feel free to let me know. For me it was more of an exercise to see if I could read the data at all ;-)
 

Attachments

  • ConnectionP16I.jpg
    ConnectionP16I.jpg
    658.2 KB · Views: 125
  • UltranetReceiver (FPGA).jpg
    UltranetReceiver (FPGA).jpg
    408 KB · Views: 116
  • Like
Reactions: 1 users
On my P16-I the RJ45-connectors are not working anymore
So you ended up bypassing the RJ45? Please check the small (51 ohms or so) SMD resistors in the outputs of the buffers. It's common failure probably caused by people thinking the outputs are for usual ethernet connection, I've got a second hand unit with some burned resistors, too.
 
Hi guys

if you're interested, here's my Youtube video where I show how to use Ultranet with the Arduino MKR Vidor 4k to build an DIY-audio mixer. The audio output is done via SPDIF as well as via a single digital pin by using pulse density modulation (PDM):

It was the first time I've done anything with a PDM and I find it impressive that you can get clean audio out of a digital chip with just a very simple low pass filter.

Maybe someone finds this useful...

kind regards,
Chris
 
  • Like
Reactions: 1 users
Hi Chris,
Congratulations ! Very interesting project indeed. My question would be how many output (SP/DIF) channels you could generate with the FPGA to create a multi-channel in-ear monitoring solution. The P16Ms are nice but hardly affordable for mid-size (or large) amatuer bands. If the FPGA could generate 10 stereo outputs then in-ear monitoring could become affordable for many musicians who now destroy their ears with stage monitors or suffer from shared mono in-ear sound.
Beste Gruesse !
H
 
Hi,

thank you for your feedback. Well, the FPGA (Intel Cyclone 10CL016) on this specific Arduino-Board has 15,408 logic elements. The current design (1x SPDIF-output, 1x I2S-output, 1xPDM-output) uses about 4,900 LE (30%). So there is plenty of space left on this FPGA and lot of output-pins are available either over the Arduino-Headers or the small pin-header on the front of the PCB.

For a quick test I've removed the I2S-output and the PDM-output and used in total 11 SPDIF-outputs. Without testing the real outputs the design is synthesizable and uses only 4,738 logic elements (29%). So the answer is yes, multiple digital outputs with volume-control and left-right balancing is possible. with this system. So creating a user-defined, computer-controlled audiomixer is possible. If you add a WIZ5500 ethernet-chip (this is already prepared within the code on Github) or use a ESP32 with webserver you could control this via a mobile-phone, too.

cu,
Chris
 
Thanks Chris !
I'm amazed about your enthusiasm. This looks like a promising project to work on. Good advice on the ESP32 - that totally makes sense. I'll order an Arduino Vidor board and some parts and start working. Will need to learn more about FPGAs (I do have some experience with microcontroellers, audio circuits etc.).
Will let you know if anythign comes out of this (or if I get stuck ;-)
Best,
H
 
I'm in the middle of pursuing a similar but more resource-constrained approach of attempting to build the same in a Raspberry pi Pico W. The PIO inputs can suck in the two AES/spdif streams, and the wifi is available via spi. The PIO can also create an i2s output to a DAC. I'm still figuring out if the 2 M0+ cores can keep up with everything, but it looks potentially promising. Great work, Chris!
 
Hi Chris, it took a while until I could find a used P16-I as signal source but this week it finally received one. Meanwhile I kept myself busy wiriting the webapp for the frontend. Next step is the hardware and I have a question there: I'm going to build the prototype with only the line receiver-IC and plan to use an SP/DIF output. I see that you have foreseen a voltage regulator to convert the incoming 15V from the Ultantet connector to power the ICs on board of the circuit. Is there a reason not to take the 3.3V from the Arduino board ? I imagine there would be enough current available to power the lince receiver chip.
 
Hi all! I'm not sure I understand well the basis of this project. Is this completely dependent on P16-i, or can any ultranet device (like my XR18) be compatible?
What I'd like to achieve is exactly what @H3NN1 wants, so I'd really love to know what you've been able to achieve so far.
What I'd like to do is: connect this device to my console using the ultranet connection, and have 5 stereo outputs that we could use for in-ear monitoring. I would create some smaller deported and wired circuit boards, one per musician, containing a fader, a rotary encoder (to select the channel the fader is connected to) and another encoder to use for left-right balancing, and probably a bunch of leds. The output 3.5 jack would be deported on these peripherals. I'm not really afraid of the design and circuitry for that external peripheral, they could each use a small ESP32 board or any another controller and I'm quite comfortable with that, but the main part, the demultiplexing and mixing of the 5 stereo channels is where I would definitely be missing skills.
And to complexify this more, once this works, I would love to develop a V2 version which would be able to go wireless, for the 5 channels of in-ear monitoring, even if only with garage band quality level, so we would only need this main device and in-ear monitoring receivers.
@H3NN1 Have you been able to do something with all that?
@pcdimmer Do you foresee any major issue with such project, besides the overall complexity?
Thanks anyway, this already looks pretty promising!
Brice
 
Hi @Brice1234,

yes, you can use all devices that output Ultranet, you are not limited to the P16-I device. At the moment the only challenge is a better and clean PCB-layout for decoding the Ultranet signal. My self-made PCB is not working very well. I connected the P16-I with jumper-cables directly to the Vidor 4000.

Since last year I've spent a huge amount of time to optimize and enhance the FPGA-mixer project. I also prepared an article for Elector Magazine and I'm waiting for the release-date for this article. So in a couple of weeks I will publish the whole project on GitHub with:
  • 5-band parametric equalizer
  • audio-gate
  • audio-compressor
  • crossover for Left/Right and subwoofer
  • analog/digital inputs
  • SD-card playback for MP3 and WAVE
  • Webinterface for Control

With this project it is possible to create a full-featured DIY monitor-mixer with up to 22 channels (16 Ultranet-Channels, 2 local analog inputs, 2 SPDIF-inputs and stereo SD-Card playback).

Here is the prepared (but still empty) repository on GitHub: https://github.com/xn--nding-jua/Audioplayer. With the release of the Elector article I will publish the sourcecode for SAMD21, ESP32 and FPGA. Together with the Elector article it should be possible for everyone to create and use this mixer.

Beside this I'm working on a new youtube-video on this, so stay tuned :)

kind regards
Chris
 
Wow, this is amazing. Can't wait to see that!
If I understand correctly, this whole project will allow to create a mix using all ultranet and external inputs, and save it to SD as well as output it directly. Is that it?
So for my purpose, I would need to edit your layout to add outputs, and maybe remove sd card support that I don't need if it gets in the way (my station has usb out allowing me to store everything on the connected computer already), for the hardware part, and edit the software accordingly. I think your work will definitely be a huge time saver! Thanks a lot for that!
Besides the VIdor 4000, what should I order, so that your paper is published, I can start tinkering with the project right away?
Best regards
Brice
 
I'm in the middle of pursuing a similar but more resource-constrained approach of attempting to build the same in a Raspberry pi Pico W. The PIO inputs can suck in the two AES/spdif streams, and the wifi is available via spi. The PIO can also create an i2s output to a DAC. I'm still figuring out if the 2 M0+ cores can keep up with everything, but it looks potentially promising. Great work, Chris!
I'm looking at that too, so keep us updated on progress. it looks like the PIO and RP2040 will be more than capable of decoding the AES3 stream (e.g. see the differential Manchester coding example in the RP2040 datasheet PIO section).
I'm thinking of a personal monitor that could take power and signal from Ultranet, with PWM from the RP2040 for the selected channel or channels. There will be enough processing in the RP2040 processor to do basic mixing. Good to see others looking the same way!