• WANTED: Happy members who like to discuss audio and other topics related to our interest. Desire to learn and share knowledge of science required. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

Review and Measurements of Okto DAC8 8Ch DAC & Amp

Here's a direct link to the github repository for the new AVDSP_DAC8.

I've been looking over the code and it seems pretty comprehensive with the ability to do the following on individual channels:
  • crossovers with many different slopes - LR, Butterworth and more
  • HP/LP, HS,LS
  • Peek filters
  • Delay (time)
  • Attenuate
PEQ and allows for biquads as well. Only for PCM audio and up to 24/192.

NO GUI, hope someone makes one. If you think making .cfg files in a text editor is fun then you'll be ok.

This could potentially eliminate a lot of processing on my computer which is currently doing all of this via @mitchco's Hang Loose Convolver.



Looks a bit limited though, not a full convolution engine.

For me, might be ok for 2 channel sources or even tv output - where i dont need to run through pc and can still run active system
 
Here's a direct link to the github repository for the new AVDSP_DAC8.

I've been looking over the code and it seems pretty comprehensive with the ability to do the following on individual channels:
  • crossovers with many different slopes - LR, Butterworth and more
  • HP/LP, HS,LS
  • Peek filters
  • Delay (time)
  • Attenuate
PEQ and allows for biquads as well. Only for PCM audio and up to 24/192.

NO GUI, hope someone makes one. If you think making .cfg files in a text editor is fun then you'll be ok.

This could potentially eliminate a lot of processing on my computer which is currently doing all of this via @mitchco's Hang Loose Convolver.



This would be great if it could replace a simple outboard DSP for crossover duty. I didn't realize it had that much processing on board! I like having the volume at the Okto, so adding DSP, if it's done well, would be convenient.
 
Early this morning in Japan, I also received the email from Okto Research.

My DAC8PRO's firmware is still 1.32 and the USB ASIO driver is still DIYINHK_UsbAudio_v4.59.0_2019-02-28 on Windows 11 Pro PC together with DSP software EKIO; they are all working super-fine at least in my "Pure-USB/DAC8PRO" audio setup (ref. #774, #858, #906 on my multichannel project thread).

I very much satisfy and love the robust and flexible (even on-the-fly parameter change) EKIO GUI capabilities, on the other hand I am still rather afraid of possible trouble which might be given by firmware update on DAC8PRO since I am in Japan far away from Prague.

Consequently, even though I am much interested in the contents of the mail from OKTO, for the time being, I will be carefully reading/watching other users' coming experiences on the new features.
 
Last edited:
I have an early DAC8 prototype, in fact it’s the one that Amir originally reviewed here that ended up in my hands. It uses MiniDSP USB streamer for USB input, it’s XMOS based. Any hope the DSP code can be loaded on it?
I would reach out to Okto directly. They're pretty responsive.
 
I respect the multiple DAC shenanigans, but respectfully, if one wants a ton of D/A channels in perfect sync, it's much more logical to just buy studio-oriented reference converters like those from Merging Technologies. Their two main models, Hapi and Horus, with DA8P expansion card modules, give you respectively 16 and 48 channels of very high-performance D/A conversion (THD+N -116 dB, 125 dB DR), and since you can just connect as many of the base units with AES67 as you like, the number of perfectly synced possible channels is effectively infinite. Any input (by block of 8 channels per module and 2 channels for headphones) can be routed to any number of outputs as required at the same time.

Quite costly endavour, but in my opinion, it's the definitive hardware solution if one wants to do something crazy, like, for example, a 5.X multichannel audio setup with all multi-way active DIY speakers.
And with Merging Hapi/Horus you can play DSD256 on all channels mode, which no other multichannel dac i capable of in 8 or more channel mode. Not Exasound S88, Dac8Pro, Topping DM7.
I haven't found even any other Pro studio interface except Merging that plays DSD at all.
I would love to buy an Merging, but too expensive for me.
Just to get rid of the usb thing.
 
And with Merging Hapi/Horus you can play DSD256 on all channels mode, which no other multichannel dac i capable of in 8 or more channel mode. Not Exasound S88, Dac8Pro, Topping DM7.
I haven't found even any other Pro studio interface except Merging that plays DSD at all.
it is true that delivering DSD256 over 8 channels via USB 2.0 is a concern for all solution based on XMOS as the provided USB device library is limited to handling 1 PID where USB 2.0 can support up to 3. Therefore the max bandwidth is 64MBytes/sec for outputs, which is not enough as DSD256 requires 352800x32x8 = 90MBytes...
we have logged a request for enhancement on the xmos GitHub, as trying to extend this by ourselves is just a nightmare. Certainly this company have a dedicated HW or FPGA and a specific host driver. Huge investment.
 
This would be great if it could replace a simple outboard DSP for crossover duty. I didn't realize it had that much processing on board! I like having the volume at the Okto, so adding DSP, if it's done well, would be convenient.
hi, looking forward to convince you on a real case study ! the PureDSP process with dynamic coefficient depending on sample rate is unbeatable.
 
Looks a bit limited though, not a full convolution engine.
Hi !
the dac8pro as 250mips available and even 460 if used in stereo (only 1 AES at a time). This gives 2400 instruction per sample at 192k or 4800 at 96k.
For a generic channel treatment doing input, gain , N biquad, delay, output, the total number of instruction required is roughly 64+Nx19 so just do the math to see if thats enough for your use case.
But you are right, no convolution engine, no FIR. But it can deliver flat group delay crossover with Lipshitz Vanderkoy subtractive filtering (which is unprecedented on commercial product ?)
 
Last edited:
hi, looking forward to convince you on a real case study ! the PureDSP process with dynamic coefficient depending on sample rate is unbeatable.
any chance you could do a walkthrough video showing how to configure the DSP?

also what is Lipstich Vanderkoy subtractive filtering? a google search yields exactly 0 results!
 
any chance you could do a walkthrough video showing how to configure the DSP?

also what is Lipstich Vanderkoy subtractive filtering? a google search yields exactly 0 results!

Try, Lipshitz and Vanderkooy, A Family of Linear-Phase Crossover Networks of High Slope Derived by Time Delay. If you can't find it let me know and I'll send you a copy.

Michael
 
any chance you could do a walkthrough video showing how to configure the DSP?

also what is Lipstich Vanderkoy subtractive filtering? a google search yields exactly 0 results!
Hi, sorry maybe due to a typo in the name. Lipshitz.
This is becoming bit off-topic sorry. Basically the low pass goes trough a Bessel 6 or 8 (for exemple) providing a very flat delay response and then the high pass is created by delaying the signal and just subtracting the lowpass. see in avdsp_dac8_pdf , page 23.
Need to think about the video ... :)
 
FYI, @fabriceo uploaded aarch64 (RPi 64) versions of xmosusb and dspcreate last night. Getting it going is pretty simple.

Code:
sudo apt install libusb-1.0-0-dev
git clone https://github.com/fabriceo/AVDSP_DAC8 ~/AVDSP_DAC8
sudo cp ~/AVDSP_DAC8/avdsptools/rpi_aarch64/dspcreate /usr/local/bin/
sudo cp ~/AVDSP_DAC8/avdsptools/rpi_aarch64/libavdspencoder.so /usr/lib/
sudo cp ~/AVDSP_DAC8/usbtools/rpi_aarch64/xmosusb /usr/local/bin/

"sudo xmosusb --dacstatus" should work with firmware 1.50 (note this needs to be run as sudo).

Code:
michael4@raspberrypi4:~$ sudo xmosusb --dacstatus

This utility is using libusb v1.0.25.11696


[0] > VID 152A, PID 88C4, BCD 0150 : OKTO RESEARCH  DAC8PRO  000096
      (0)  usb Audio Control
      (1)  usb Audio Streaming
      (2)  usb Audio Streaming
      (3)  usb DFU


printing dac status:
DAC mode            = 0x2 usb-aes
I2S Audio config    = 0x21 (48000)
USB Audio config    = 0xA1 (48000)
front panel version = 15
Sound presence      = 0x 0
trigger             = 0x 0
usb volume          = 0dB
front panel volume  = -33dB
xmos BCD version    = 1.50
usb vendor ID       = 0x152A
usb product ID      = 0x88C4
maximum frequency   = 192000
front panel status  = -5 Device running ok
maximum dsp tasks   = 0
Device running ok

Obviously important to read through the documentation, but you can also use dspcreate to generate DSP bin files which can be uploaded to the Okto once the DSP firmware is released. Overall the syntax is pretty easy to get the hang of.

Code:
michael4@raspberrypi4:~$ dspcreate -dspformat 2 -dsptext lxminibsc.txt -binfile prog1.bin
DSP ENCODER : format generated for handling integer 64 bits, with 28 bits mantissa
reading file lxminibsc.txt

   0 : [#1 +12] 0 0 0 0 102 40001C 4 9 0 0 0
DSP_PARAM
label DAC type 3 created with value 0.000000
label AES type 3 created with value 8.000000
label USBhost type 3 created with value 16.000000
label USBdevice type 3 created with value 24.000000
label LeftIn type 3 created with value 16.000000
label RightIn type 3 created with value 17.000000
  12 : [#2 +0]

  13 : biquad section
filter lpf60inv type LPLR2 created with F=60.000000, Q=1.000000, G=-1.000000
FILTER f = 60.000000, Q = 0.500000, G = -1.000000
 b0 = -0.000018,  b1 = -0.000036, b2 = -0.000018, a1 = 1.982976,  a2 = -0.983048
-> 1 biquad cell(s) provided

  53 : biquad section
filter lpf60 type LPLR2 created with F=60.000000, Q=1.000000, G=1.000000
FILTER f = 60.000000, Q = 0.500000, G = 1.000000
 b0 = 0.000018,  b1 = 0.000036, b2 = 0.000018, a1 = 1.982976,  a2 = -0.983048
-> 1 biquad cell(s) provided

  93 : biquad section
filter lt30 LT with F0=30.000000, Q0=0.707000, Fp=38.760000, Qp=0.805000, G=1.000000
FILTER f0 = 30.000000, Q0 = 0.707000, fp = 38.760000, Qp = 0.805000, G = 1.000000
 b0 = 0.999591,  b1 = -1.993139, b2 = 0.993566, a1 = 1.993133,  a2 = -0.993163
-> 1 biquad cell(s) provided

 133 : biquad section
filter subbsc type LS2 created with F=164.000000, Q=0.570000, G=1.995262
FILTER f = 164.000000, Q = 0.570000, G = 1.995262
 b0 = 1.007088,  b1 = -1.965526, b2 = 0.959196, a1 = 1.965715,  a2 = -0.966095
-> 1 biquad cell(s) provided

 173 : biquad section
filter hpf30 type HPBU2 created with F=30.000000, Q=1.000000, G=1.000000
FILTER f = 30.000000, Q = 0.707107, G = 1.000000
 b0 = 0.996982,  b1 = -1.993964, b2 = 0.996982, a1 = 1.993955,  a2 = -0.993973
-> 1 biquad cell(s) provided

 213 : biquad section
filter lpf700 type LPLR2 created with F=700.000000, Q=1.000000, G=1.000000
FILTER f = 700.000000, Q = 0.500000, G = 1.000000
 b0 = 0.002260,  b1 = 0.004519, b2 = 0.002260, a1 = 1.809858,  a2 = -0.818896
-> 1 biquad cell(s) provided

 253 : biquad section
filter peq1800 type PEAK created with F=1800.000000, Q=7.000000, G=1.258925
FILTER f = 1800.000000, Q = 7.000000, G = 1.258925
 b0 = 1.004115,  b1 = -1.903847, b2 = 0.964103, a1 = 1.903847,  a2 = -0.968218
-> 1 biquad cell(s) provided

 293 : biquad section
filter peq5100 type PEAK created with F=5100.000000, Q=8.000000, G=0.158489
FILTER f = 5100.000000, Q = 8.000000, G = 0.158489
 b0 = 0.920521,  b1 = -1.353655, b2 = 0.890583, a1 = 1.353655,  a2 = -0.811104
-> 1 biquad cell(s) provided

 333 : biquad section
filter peq5800 type PEAK created with F=5800.000000, Q=3.000000, G=0.316228
FILTER f = 5800.000000, Q = 3.000000, G = 0.316228
 b0 = 0.877627,  b1 = -1.112593, b2 = 0.764438, a1 = 1.112593,  a2 = -0.642065
-> 1 biquad cell(s) provided

 373 : biquad section
filter hpf700 type HPLR2 created with F=700.000000, Q=1.000000, G=1.000000
FILTER f = 700.000000, Q = 0.500000, G = 1.000000
 b0 = 0.907189,  b1 = -1.814377, b2 = 0.907189, a1 = 1.809858,  a2 = -0.818896
-> 1 biquad cell(s) provided

 413 : biquad section
filter lsf1000 type LS2 created with F=1000.000000, Q=0.600000, G=6.309573
FILTER f = 1000.000000, Q = 0.600000, G = 6.309574
 b0 = 1.115328,  b1 = -1.833143, b2 = 0.765316, a1 = 1.853129,  a2 = -0.860658
-> 1 biquad cell(s) provided

 453 : biquad section
filter peq2600 type PEAK created with F=2600.000000, Q=2.000000, G=0.630957
FILTER f = 2600.000000, Q = 2.000000, G = 0.630957
 b0 = 0.962252,  b1 = -1.673643, b2 = 0.833177, a1 = 1.673643,  a2 = -0.795429
-> 1 biquad cell(s) provided

 493 : biquad section
filter hsf8000 type HS2 created with F=8000.000000, Q=0.700000, G=2.511886
FILTER f = 8000.000000, Q = 0.700000, G = 2.511886
 b0 = 1.779768,  b1 = -1.327702, b2 = 0.476617, a1 = 0.249084,  a2 = -0.177767
-> 1 biquad cell(s) provided

 533 : biquad section
filter peq10000 type PEAK created with F=10000.000000, Q=4.000000, G=1.412538
FILTER f = 10000.000000, Q = 4.000000, G = 1.412538
 b0 = 1.038881,  b1 = -0.263609, b2 = 0.772623, a1 = 0.263609,  a2 = -0.811504
-> 1 biquad cell(s) provided

 573 : biquad section
filter peq13100 type PEAK created with F=13100.000000, Q=7.000000, G=0.562341
FILTER f = 13100.000000, Q = 7.000000, G = 0.562341
 b0 = 0.963451,  b1 = 0.534038, b2 = 0.869529, a1 = -0.534038,  a2 = -0.832980
-> 1 biquad cell(s) provided

 613 : biquad section
filter peq15800 type PEAK created with F=15800.000000, Q=10.000000, G=1.995262
FILTER f = 15800.000000, Q = 10.000000, G = 1.995262
 b0 = 1.026653,  b1 = 1.224396, b2 = 0.919787, a1 = -1.224396,  a2 = -0.946440
-> 1 biquad cell(s) provided
DSP_CORE
 653 : [#5 +7] 0 0 0 0 FFFFFFFF(@652) 0
DSP_LOAD_GAIN
 660 : [#12 +4] 10 3 65EA5A0
DSP_BIQUADS
 664 : [#50 +3] 20 FFFFFD75(@13)
DSP_BIQUADS
 667 : [#50 +3] 26 FFFFFDC2(@93)
DSP_BIQUADS
 670 : [#50 +3] 2C FFFFFDE7(@133)
DSP_STORE
 673 : [#8 +2] 0
DSP_LOAD_GAIN
 675 : [#12 +4] 10 3 65EA5A0
DSP_BIQUADS
 679 : [#50 +3] 32 FFFFFD8E(@53)
DSP_BIQUADS
 682 : [#50 +3] 38 FFFFFDB3(@93)
DSP_BIQUADS
 685 : [#50 +3] 3E FFFFFDD8(@133)
DSP_STORE
 688 : [#8 +2] 1
DSP_CORE
 690 : [#5 +7] 0 0 0 0 FFFFFFFF(@689) 0
DSP_LOAD_GAIN
 697 : [#12 +4] 11 3 65EA5A0
DSP_BIQUADS
 701 : [#50 +3] 44 FFFFFD50(@13)
DSP_BIQUADS
 704 : [#50 +3] 4A FFFFFD9D(@93)
DSP_BIQUADS
 707 : [#50 +3] 50 FFFFFDC2(@133)
DSP_STORE
 710 : [#8 +2] 2
DSP_LOAD_GAIN
 712 : [#12 +4] 10 3 65EA5A0
DSP_BIQUADS
 716 : [#50 +3] 56 FFFFFD69(@53)
DSP_BIQUADS
 719 : [#50 +3] 5C FFFFFD8E(@93)
DSP_BIQUADS
 722 : [#50 +3] 62 FFFFFDB3(@133)
DSP_STORE
 725 : [#8 +2] 3
DSP_CORE
 727 : [#5 +7] 0 0 0 0 FFFFFFFF(@726) 0
DSP_LOAD_GAIN
 734 : [#12 +4] 10 3 10000000
DSP_BIQUADS
 738 : [#50 +3] 68 FFFFFDCB(@173)
DSP_BIQUADS
 741 : [#50 +3] 6E FFFFFDF0(@213)
DSP_BIQUADS
 744 : [#50 +3] 74 FFFFFE15(@253)
DSP_BIQUADS
 747 : [#50 +3] 7A FFFFFE3A(@293)
DSP_BIQUADS
 750 : [#50 +3] 80 FFFFFE5F(@333)
DSP_STORE
 753 : [#8 +2] 4
DSP_CORE
 755 : [#5 +7] 0 0 0 0 FFFFFFFF(@754) 0
DSP_LOAD_GAIN
 762 : [#12 +4] 11 3 10000000
DSP_BIQUADS
 766 : [#50 +3] 86 FFFFFDAF(@173)
DSP_BIQUADS
 769 : [#50 +3] 8C FFFFFDD4(@213)
DSP_BIQUADS
 772 : [#50 +3] 92 FFFFFDF9(@253)
DSP_BIQUADS
 775 : [#50 +3] 98 FFFFFE1E(@293)
DSP_BIQUADS
 778 : [#50 +3] 9E FFFFFE43(@333)
DSP_STORE
 781 : [#8 +2] 5
DSP_CORE
 783 : [#5 +7] 0 0 0 0 FFFFFFFF(@782) 0
DSP_LOAD_GAIN
 790 : [#12 +4] 10 3 50F44D8
DSP_BIQUADS
 794 : [#50 +3] A4 FFFFFE5B(@373)
DSP_BIQUADS
 797 : [#50 +3] AA FFFFFE80(@413)
DSP_BIQUADS
 800 : [#50 +3] B0 FFFFFDDD(@253)
DSP_BIQUADS
 803 : [#50 +3] B6 FFFFFEA2(@453)
DSP_BIQUADS
 806 : [#50 +3] BC FFFFFEC7(@493)
DSP_BIQUADS
 809 : [#50 +3] C2 FFFFFEEC(@533)
DSP_BIQUADS
 812 : [#50 +3] C8 FFFFFF11(@573)
DSP_BIQUADS
 815 : [#50 +3] CE FFFFFF36(@613)
DSP_DELAY
DELAY 60 -> MAXSAMPLE = 11
 818 : [#48 +4] 3C D4 0
DSP_STORE
 822 : [#8 +2] 6
DSP_CORE
 824 : [#5 +7] 0 0 0 0 FFFFFFFF(@823) 0
DSP_LOAD_GAIN
 831 : [#12 +4] 11 3 50F44D8
DSP_BIQUADS
 835 : [#50 +3] E0 FFFFFE32(@373)
DSP_BIQUADS
 838 : [#50 +3] E6 FFFFFE57(@413)
DSP_BIQUADS
 841 : [#50 +3] EC FFFFFDB4(@253)
DSP_BIQUADS
 844 : [#50 +3] F2 FFFFFE79(@453)
DSP_BIQUADS
 847 : [#50 +3] F8 FFFFFE9E(@493)
DSP_BIQUADS
 850 : [#50 +3] FE FFFFFEC3(@533)
DSP_BIQUADS
 853 : [#50 +3] 104 FFFFFEE8(@573)
DSP_BIQUADS
 856 : [#50 +3] 10A FFFFFF0D(@613)
DSP_DELAY
DELAY 60 -> MAXSAMPLE = 11
 859 : [#48 +4] 3C 110 0
DSP_STORE

 863 : [#8 +2] 7
DSP_END_OF_CODE
 865 : [#0 +0]
dsptotallength = 866
dataSize       = 284
check sum      = 0x88D0361
cores declared = 6
max encoded    = 3.930285 = 3:29 vs 4:28
DSP program file successfully generated
stored in-> prog1.bin

Michael
 
I have a Okto Dac8 Pro in black with rackmounts to spare at my studio - asking 1000€ + shipping. DM me if you are looking for one :)
 
Back
Top Bottom