Open raplin opened 1 year ago
ok I bit the bullet and installed all the necessary crap and .. I have 16 channel Scream device working under ASIO4ALL! Woot!
(Audio sink device is a RPi3 with a pair of CM6206 8ch soundcards, via an MTT-capable USB hub; complicated reasons why the RPi4 doesn't (yet) work properly in this role and why the MTT hub is required)
It was literally as simple as changing MAX_CHANNELS and then dealing with all the windows signing stuff...
Meanwhile I'm looking at getting a new signing cert ...
Yay! Got it all working! 16ch streaming from windows!
a) Modified Windows Scream driver to 16ch. Run it under ASIO4ALL (b/c regular windows doesn't understand >7.1 audio devices!) so can use with Cubase, Fruityloops, and other ASIO apps. Regular windows apps still work but only the first 8ch work. ...Stupid windows!
b) Modified unix Scream client to 16ch (plus make it start up with 16ch instead of 2 b/c alsa issue where 'multi' device doesn't work with less channels)
c) Target is a RPi3 (note! RPI4 doesn't work properly) with an MTT USB hub (important) and two CM6206 8ch soundcards with them both running from the same clock (removed 12mhz xtal from slave unit and wired XIN to the CM6206 XIN on the other board, works fine). Playing with Scream in ALSA mode.
d) .asoundrc on the RPI creates a 16ch 'multi' sound device out of the two USB devices.. (note hw1,0 and hw2,0 are the two devices) `pcm.multi { type multi; slaves.a.pcm "hw:1,0"; slaves.a.channels 8; slaves.b.pcm "hw:2,0"; slaves.b.channels 8; bindings.0.slave a; bindings.0.channel 0; bindings.1.slave a; bindings.1.channel 1; bindings.2.slave a; bindings.2.channel 2; bindings.3.slave a; bindings.3.channel 3; bindings.4.slave a; bindings.4.channel 4; bindings.5.slave a; bindings.5.channel 5; bindings.6.slave a; bindings.6.channel 6; bindings.7.slave a; bindings.7.channel 7;
bindings.8.slave b;
bindings.8.channel 0;
bindings.9.slave b;
bindings.9.channel 1;
bindings.10.slave b;
bindings.10.channel 2;
bindings.11.slave b;
bindings.11.channel 3;
bindings.12.slave b;
bindings.12.channel 4;
bindings.13.slave b;
bindings.13.channel 5;
bindings.14.slave b;
bindings.14.channel 6;
bindings.15.slave b;
bindings.15.channel 7;
}
ctl.multi { type hw; card 1; } `
Run scream sink with
./scream -u -o alsa -dmulti -t100
Notes on the RPI: RPI4 doesn't work because the onboard USB3 hub doesn't support >1024bytes of isochronous data per USB tick (so >1 8ch card exhausts this). RPI3 does. Needs an MTT capable USB hub to run the cars because the two soundcards are fullspeed and exhaust FS bandwidth if both run at the same time; MTT hub fixes this with split USB transactions
Yay!
Can I just say that just about the ONLY windows app that understands Scream when compiled with 16 channels is Asio4All. Almost everything else thinks it's 8ch, some apps insist it's 2ch, it's kind of a mess. Fortunately Asio4all works, which is what I was after. I'm not sure why this is but I am guessing it's related to the windows speaker configuration menus which max out at 7.1, and further guessing that most windows app use the speaker config to determine #channels on a card, whereas Asio4all might be looking lower level. This is a guess. Anyway, windows sucks at >8ch.
8ch is awesome but 12 moreso; I'd love to preview Atmos 7.1.4 mixes over Scream. I'd use a custom receiver (on a RPi) driving two USB sound cards in parallel
I would do this myself as it looks straightfwd but.. ugh, driver signing hell..
..obvs I would have to resolve phase issues between the two cards (i.e. they wouldn't necessarily start streaming audio at the same instant) - but I have a plan for that; I think I can just analog-sum two output channels (one from each card) then feed them back into the line-in on one card. This would be good enough information so the output code can detect/adjust a delay to one of the cards card to bump them into phase.
Thankyou so much if it is possible to build a signed windows driver that supports this (just need 12ch streaming TO network, rest I can take care of). Thankyou!