Genial solutions usually appear when two-three-more ideas meet each other. I got the initial idea from xiphmont‘s pages. He advocates for old but extremely stable Emagic emi6|2 USB soundcards. These are his pages written on the topic:
[1] – http://xiphmont.livejournal.com/46858.html (the initial idea + benefits analysis)
[2] – http://xiphmont.livejournal.com/62676.html?thread=501972 (drivers’ update)
Where is the catch? Of course inside of a phrase that Linux is the only modern operation system still supporting these “cards”. Well, actually xiphmont remains rather modest, because he himself updated the drivers and made them available. Due to the fact that the world has got crazy and ppl do value copyright issues more than the green mindset, you have to grab the current drivers from here:
[3] – http://people.xiph.org/~xiphmont/emagic/ (patches to politically correct Linux)
This way, if Linux is a problem for you, stop reading now. Vice versa, if Linux is your friend, do install some Debian 7.5 or similar, do apt-get some kernel headers and voila, make install xiphmont’s emi* sources. As the result, the politically correct (but non-working) Linux firmware will be overridden by the latest emi62m firmware.
[ 23.512066] usb 7-1: new full-speed USB device number 2 using uhci_hcd [ 23.680208] usb 7-1: New USB device found, idVendor=0451, idProduct=2036 [ 23.680214] usb 7-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0 [ 23.680218] usb 7-1: Product: General Purpose USB Hub [ 23.687093] hub 7-1:1.0: USB hub found [ 23.688186] hub 7-1:1.0: 3 ports detected [ 23.970077] usb 7-1.1: new full-speed USB device number 3 using uhci_hcd [ 24.079094] usb 7-1.1: New USB device found, idVendor=086a, idProduct=0110 [ 24.079100] usb 7-1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0 [ 24.081167] emi62 - firmware loader 7-1.1:1.0: emi62_probe start [ 24.085501] usb 7-1.1: firmware: agent aborted loading emi62/loader.fw (not found?) [ 24.085753] usb 7-1.1: Error [ 24.085767] emi62 - firmware loader: probe of 7-1.1:1.0 failed with error -5 [ 24.085783] usb 7-1.1: emi: starting firmware load for emi6|2m / a62m (SPDIF mode) [ 24.107976] usb 7-1.1: firmware: agent loaded emi/loader.fw into memory [ 24.133874] usb 7-1.1: firmware: agent loaded emi/emi62_bitstream.fw into memory [ 24.144509] usb 7-1.1: firmware: agent loaded emi/emi62_firmware_spdif.fw into memory [ 28.361093] usb 7-1.1: emi: firmware load successful [ 28.411095] usb 7-1.1: USB disconnect, device number 3 [ 31.686125] usb 7-1.1: new full-speed USB device number 4 using uhci_hcd [ 31.809132] usb 7-1.1: New USB device found, idVendor=086a, idProduct=0111 [ 31.809139] usb 7-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 31.809143] usb 7-1.1: Product: Emagic A62m [ 31.809146] usb 7-1.1: Manufacturer: Emagic GmbH [ 31.849112] usb_audio: Warning! Unlikely big volume range (=32768), cval->res is probably wrong. [ 31.849119] usb_audio: [5] FU [PCM Playback Volume] ch = 1, val = -32768/0/1 [ 31.859111] usb_audio: Warning! Unlikely big volume range (=32763), cval->res is probably wrong. [ 31.859117] usb_audio: [6] FU [Mic Capture Volume] ch = 6, val = -32763/0/1
Well, a pre-requisite towards the solution was actually obtaining these nice blue soundboards (because of these are USB, let us to speak not about the cards but boards or modules). It seems that the EBay price level is 30-50€ per piece. I somehow suxxeeded to get three ex-demo pieces for 3×25€.
(For some reason, one board out of three was not satisfied with the USB power, thus I had to apply the external one. Warning: “+” and “–” pinout does differ from the most frequent pinout – plus is the outside ring!)
There are some well known tricks to connect USB multimedia devices, one of these is that each device has to be on a separate USB controller. With this purpose in mind, I installed an extra USB2 card with 4 external sockets present, while only the first and third sockets carry a plug. The third sound board is connected to the motherboard USB controller.
So far so good. Physical connection was the easy part.
The prevailing sound system for the current Linux is ALSA, which is a relatively under-documented system. Configuring emi6|2 USB sound modules for ALSA is not an easy task. The reason is that due to the 12MBit USB bandwidth, there exist very strict limitations on the audio modes. These are the audio modes usable for multichannel recording (cited as printed in original manual):
# Mode Input Output Sampling Rate OS # -----+---------+----------+------------------+--------------------- # XXX 6x16 2x24 44.1 or 48 MaxOSX, MacOS9, Win # YYY 6x16 2x16 44.1 or 48 MaxOsX, MacOS9, Win # ZZZ 6x24 2x16 44.1 MacOSX, MaxOS9, Win # QQQ 6x24 - 48 MacOS #
Mode ZZZ and Mode QQQ are most usable ones for the multi channel recording. In field conditions, one need 24 bit enabled headroom. In case of mode QQQ, monitoring is only possible via another sound card (e.g. that on the mobo).
NB! There is a strong suspicion that ALSA is not suitable to setup the full mode ZZZ. The problem: we need the asym definition to setup S24_3LE input vs S16_LE output and then we need to gather two sets of multi devices – one for rec, another for play. Due to ALSA limitations (see below) we actually have to introduce mode ZZZR which is S24_3LE recording with no playback at all.
Speaking in terms of ALSA, you need to apply three concurrent configuration tricks:
- describe any of the boards as an “asym” device, with different setups for playback and capture sides;
- for the preferred mode, you should apply the “slave” directive to describe the input as 6 channels by S24_2LE but the output as 2 channels S16_LE. However, this is something which ALSA probably cannot obey.
- you have to use “multi” directive to put together a compound device. Moreover, you actually have to put together two compound devices – one on the recording side and another on the playback side. And, if you wish, a supercompound device containing both the recording and playback sides.
Below is my asound.conf file that works. With this configuration file, it is possible to have three concurrent “while true” loops going, one is constantly recording 18 input channels, another is constantly outputting a 6-channel wav and the third is outputting pink noise to the mobo headphones..
# 2014-06-29 # cleary@karuperse.ee (well, actually no such FQDN) # # Description of the motherboard card - ICH6 - snd_intel8x0 # Outside dependance: fighting the religion: # commented out this: # options snd-intel8x0m index=-2 # in /etc/modprobe.d/alsa-base.conf # # ---------------------------------- # aplay -l # **** List of PLAYBACK Hardware Devices **** # card 0: ICH6 [Intel ICH6], device 0: Intel ICH [Intel ICH6] # Subdevices: 1/1 # Subdevice #0: subdevice #0 # card 0: ICH6 [Intel ICH6], device 4: Intel ICH - IEC958 [Intel ICH6 - IEC958] # Subdevices: 1/1 # Subdevice #0: subdevice #0 # ---------------------------------- # arecord -l # **** List of CAPTURE Hardware Devices **** # card 0: ICH6 [Intel ICH6], device 0: Intel ICH [Intel ICH6] # Subdevices: 1/1 # Subdevice #0: subdevice #0 # card 0: ICH6 [Intel ICH6], device 1: Intel ICH - MIC ADC [Intel ICH6 - MIC ADC] # Subdevices: 1/1 # Subdevice #0: subdevice #0 # card 0: ICH6 [Intel ICH6], device 2: Intel ICH - MIC2 ADC [Intel ICH6 - MIC2 ADC] # Subdevices: 1/1 # Subdevice #0: subdevice #0 # card 0: ICH6 [Intel ICH6], device 3: Intel ICH - ADC2 [Intel ICH6 - ADC2] # Subdevices: 1/1 # Subdevice #0: subdevice #0 # ============================ ONBOARD MB ICH6 ===== # # The goal for this section: # Define the motherboard sound reasonably well so that some known glitches will not visit us: # *) we absolutely need desymmetrize the card (describe the playback and capture parts separately) # *) we need to describe both playback and capture functions - so that playback/record indexing be the same # c) we optionally can to define 2 mic devices (eventually even as a stereo pair). If we want ;) # # ================================================== pcm.!default { type asym playback.pcm { type plug slave.pcm "hw:0,0" } capture.pcm { type plug slave.pcm "hw:0,0" } } # ANY CTL needed ;)? # ========================== END of onboard HW ===== # ######################################################### # Here we describe the multi-channel recording hardware # in our case - this is 3 pieces of emi62m USB modules. # ####################################################### # The goal for this section: # *) an absolute one: to join 3x6 input channels to form a 18 channel capture device # *) secondary one: *if possible* - read - if ALSA permits such a complex setup, # do join 3x2 outputs into a 6-channel output device. # *) While describing capture and playback parameters, *do consider* certain *mode limitations* # that emi62m cards have according to the paper manual # ================= Start of multi-channel HW setup ==== # # See the timing calculation here: # http://www.alsa-project.org/main/index.php/FramesPeriods # It is important - you cannot just invent random numbers as me. # -------------------- # BPS rate = 24 channels * 4bytes_per_sample * analog rate 41000 = 3 936 000 bytes/sec # well, omitting the playback and using S24_3LE format: 18*3*41000= 2214000 bytes/sec # or, for 18ch * S243LE * 48k = 2592000 bytes/sec # Ignoring the latency and having an interrrupt every 1 sec # (yeah - we are only recording!), # the buffer size should be 2592000 bytes # Das ist unsere Rechnung ;) # It is important to understand - the optimal number differ for 48k and 44.1k. # They also differ depending whether the playback channel is in use or not. # --------------------------------------------------------------------- # # -------------------------------- MULTICHANNEL CARD NO 1 # --------capture pcm definition pcm.capture_emi62_A { type dsnoop slave { pcm { type hw card 1 } # format "S24_3LE" - If we use that, the "multiplay" and "total_asym" defs will not work anymore # This seems to be a limitation for ALSA format "S16_LE" rate 44100 channels 6 buffer_size 2592000 # period_size 1024 } ipc_key 16612 } # --------playback pcm definition pcm.playback_emi62_A { type dmix slave { pcm { type hw card 1 } format "S16_LE" rate 44100 channels 2 buffer_size 864000 # period_size 1024 } ipc_key 16611 } # --------------------------------- MULTICHANNEL CARD NO 2 # --------capture pcm definition pcm.capture_emi62_B { type dsnoop slave { pcm { type hw card 2 } # format "S24_3LE" - If we use that, the "multiplay" and "total_asym" defs will not work anymore # This seems to be a limitation for ALSA format "S16_LE" rate 44100 channels 6 buffer_size 2592000 # period_size 1024 } ipc_key 16622 } # --------playback pcm definition pcm.playback_emi62_B { type dmix slave { pcm { type hw card 2 } format "S16_LE" rate 44100 channels 2 buffer_size 864000 # period_size 1024 } ipc_key 16621 } # ------------------------------ MULTICHANNEL CARD NO 3 # --------capture pcm definition pcm.capture_emi62_C { type dsnoop slave { pcm { type hw card 3 } # format "S24_3LE" - If we use that, the "multiplay" and "total_asym" defs will not work anymore # This seems to be a limitation for ALSA format "S16_LE" rate 44100 channels 6 buffer_size 2592000 # period_size 1024 } ipc_key 16632 } # --------playback pcm definition pcm.playback_emi62_C { type dmix slave { pcm { type hw card 3 } format "S16_LE" rate 44100 channels 2 buffer_size 864000 # period_size 1024 } ipc_key 16631 } # ---------------------- END of physical cards ======== # # ========= Description of the LOGICAL aspects # --------- Recording side of the cards: # pcm.multirec { type multi; slaves.a.pcm "pcm.capture_emi62_A"; slaves.a.channels 6; slaves.b.pcm "pcm.capture_emi62_B"; slaves.b.channels 6; slaves.c.pcm "pcm.capture_emi62_C"; slaves.c.channels 6; # 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 b; bindings.6.channel 0; bindings.7.slave b; bindings.7.channel 1; bindings.8.slave b; bindings.8.channel 2; bindings.9.slave b; bindings.9.channel 3; bindings.10.slave b; bindings.10.channel 4; bindings.11.slave b; bindings.11.channel 5; # bindings.12.slave c; bindings.12.channel 0; bindings.13.slave c; bindings.13.channel 1; bindings.14.slave c; bindings.14.channel 2; bindings.15.slave c; bindings.15.channel 3; bindings.16.slave c; bindings.16.channel 4; bindings.17.slave c; bindings.17.channel 5; } # Oh unhappy Jack :) ctl.multirec { type hw; card 1; } pcm.rec18 { type route; slave.pcm "multirec"; slave.channels 18; # ttable.0.0 1; ttable.1.1 1; ttable.2.2 1; ttable.3.3 1; ttable.4.4 1; ttable.5.5 1; ttable.6.6 1; ttable.7.7 1; ttable.8.8 1; ttable.9.9 1; ttable.10.10 1; ttable.11.11 1; ttable.12.12 1; ttable.13.13 1; ttable.14.14 1; ttable.15.15 1; ttable.16.16 1; ttable.17.17 1; } # ctl.rec18 { type hw; card 1; } # ========= PlayBack part of the cards: ============== # # THIS PART DOES NOT WORK AS EXPECTED with asymmetric modes # pcm.multiplay { type multi; slaves.a.pcm "pcm.playback_emi62_A"; slaves.a.channels 2; slaves.b.pcm "pcm.playback_emi62_B"; slaves.b.channels 2; slaves.c.pcm "pcm.playback_emi62_C"; slaves.c.channels 2; # bindings.0.slave a; bindings.0.channel 0; bindings.1.slave a; bindings.1.channel 1; bindings.2.slave b; bindings.2.channel 0; bindings.3.slave b; bindings.3.channel 1; bindings.4.slave c; bindings.4.channel 0; bindings.5.slave c; bindings.5.channel 1; } # # Oh unhappy Jack :) # ctl.multiplay { type hw; card 1; } # pcm.play6 { type route; slave.pcm "multiplay"; slave.channels 6; # ttable.0.0 1; ttable.1.1 1; ttable.2.2 1; ttable.3.3 1; ttable.4.4 1; ttable.5.5 1; } # ctl.play6 { type hw; card 1; } # ========================================================= # # This part will not work with an asymmetric mode because of the PLAYBACK section does not work # pcm.total_asym { type asym capture.pcm "multirec" playback.pcm "multiplay" } # # Todo: is that "card 0" effective at all? # Can I write card 77 instead of it? # ctl.total_asym { type hw card 1 } # # ====================================================== # pcm.copy { type plug slave { pcm rec18 } route_policy copy } # # ======================================================
How we understand this configuration WORKS?
# arecord -v -d 10 -f S24_3LE -r 44100 -c18 -t wav -D total_asym ./testing-18-tracks.wav # aplay -v -D total_asym /home/karuperse/00.wav # ====================================================== # jackd -R -d alsa -d rec18 -p 4096 -C -n3 # # -------------------------------------------------------- # # jackd -R -d alsa -r 44100 -d total_asym -n3 # jackdmp 1.9.9 # Copyright 2001-2005 Paul Davis and others. # Copyright 2004-2012 Grame. # jackdmp comes with ABSOLUTELY NO WARRANTY # This is free software, and you are welcome to redistribute it # under certain conditions; see the file COPYING for details # no message buffer overruns # no message buffer overruns # no message buffer overruns # JACK server starting in realtime mode with priority 10 # audio_reservation_init # Acquire audio card Audio1 # creating alsa driver ... total_asym|total_asym|1024|3|44100|0|0|nomon|swmeter|-|32bit # configuring for 44100Hz, period = 1024 frames (23.2 ms), buffer = 3 periods # ALSA: final selected sample format for capture: 16bit little-endian # ALSA: use 3 periods for capture # ALSA: final selected sample format for playback: 16bit little-endian # ALSA: use 3 periods for playback
DISCLAIMER: I do not actually speak asound.conf. What you see, is a practical experiment with copypasting until it started working. I do not know why it works or what are the limitations 😉
About synchronizing all three cards together. As much as one understand from xiphmont’s valuable directions, one has to take S/PDIF worldclock from the first module and input it into the S/PDIF inputs of boards 2 and 3 (while the particular Sync switches being in according positions). The best (but unfortunately a too costly) solution would be an industrial wordclock. The dilemma is, which kind cabling to use – a sequential one from Unit 1 to Unit 2 and then again from Unit 2 to Unit 3? Another solution is a 50 Ohm coaxial cable (a waveform) with terminators. With 3 and more units, both solutions have drawbacks. A middle of the road solution depicted below works reasonably well.
The 48KHz mode recording has been tested, too. However, in that case, the playback part is to be commented out of the configuration.
Extra 1: what aplay -v will tell you:
Script started on Mon 30 Jun 2014 09:18:20 PM EEST root@jolk:/tmp# aplay -v -D total_asym 00.wav Playing WAVE '00.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Channels 6 Multi PCM Channel bindings: 0: slave 0, channel 0 1: slave 0, channel 1 2: slave 1, channel 0 3: slave 1, channel 1 4: slave 2, channel 0 5: slave 2, channel 1 Its setup is: stream : PLAYBACK access : RW_INTERLEAVED format : S16_LE subformat : STD channels : 6 rate : 44100 exact rate : 44100 (44100/1) msbits : 16 buffer_size : 4096 period_size : 1024 period_time : 23219 tstamp_mode : NONE period_step : 1 avail_min : 1024 period_event : 0 start_threshold : 4096 stop_threshold : 4096 silence_threshold: 0 silence_size : 0 boundary : 1073741824 Slave #0: Direct Stream Mixing PCM Its setup is: stream : PLAYBACK access : MMAP_INTERLEAVED format : S16_LE subformat : STD channels : 2 rate : 44100 exact rate : 44100 (44100/1) msbits : 16 buffer_size : 4096 period_size : 1024 period_time : 23219 tstamp_mode : NONE period_step : 1 avail_min : 1024 period_event : 0 start_threshold : 4096 stop_threshold : 4096 silence_threshold: 0 silence_size : 0 boundary : 1073741824 Hardware PCM card 1 'Emagic A62m' device 0 subdevice 0 Its setup is: stream : PLAYBACK access : MMAP_INTERLEAVED format : S16_LE subformat : STD channels : 2 rate : 44100 exact rate : 44100 (44100/1) msbits : 16 buffer_size : 4096 period_size : 1024 period_time : 23219 tstamp_mode : ENABLE period_step : 1 avail_min : 1024 period_event : 0 start_threshold : 1 stop_threshold : 1073741824 silence_threshold: 0 silence_size : 1073741824 boundary : 1073741824 appl_ptr : 0 hw_ptr : 0 Slave #1: Direct Stream Mixing PCM Its setup is: stream : PLAYBACK access : MMAP_INTERLEAVED format : S16_LE subformat : STD channels : 2 rate : 44100 exact rate : 44100 (44100/1) msbits : 16 buffer_size : 4096 period_size : 1024 period_time : 23219 tstamp_mode : NONE period_step : 1 avail_min : 1024 period_event : 0 start_threshold : 4096 stop_threshold : 4096 silence_threshold: 0 silence_size : 0 boundary : 1073741824 Hardware PCM card 2 'Emagic A62m' device 0 subdevice 0 Its setup is: stream : PLAYBACK access : MMAP_INTERLEAVED format : S16_LE subformat : STD channels : 2 rate : 44100 exact rate : 44100 (44100/1) msbits : 16 buffer_size : 4096 period_size : 1024 period_time : 23219 tstamp_mode : ENABLE period_step : 1 avail_min : 1024 period_event : 0 start_threshold : 1 stop_threshold : 1073741824 silence_threshold: 0 silence_size : 1073741824 boundary : 1073741824 appl_ptr : 0 hw_ptr : 0 Slave #2: Direct Stream Mixing PCM Its setup is: stream : PLAYBACK access : MMAP_INTERLEAVED format : S16_LE subformat : STD channels : 2 rate : 44100 exact rate : 44100 (44100/1) msbits : 16 buffer_size : 4096 period_size : 1024 period_time : 23219 tstamp_mode : NONE period_step : 1 avail_min : 1024 period_event : 0 start_threshold : 4096 stop_threshold : 4096 silence_threshold: 0 silence_size : 0 boundary : 1073741824 Hardware PCM card 3 'Emagic A62m' device 0 subdevice 0 Its setup is: stream : PLAYBACK access : MMAP_INTERLEAVED format : S16_LE subformat : STD channels : 2 rate : 44100 exact rate : 44100 (44100/1) msbits : 16 buffer_size : 4096 period_size : 1024 period_time : 23219 tstamp_mode : ENABLE period_step : 1 avail_min : 1024 period_event : 0 start_threshold : 1 stop_threshold : 1073741824 silence_threshold: 0 silence_size : 1073741824 boundary : 1073741824 appl_ptr : 0 hw_ptr : 0 root@jolk:/tmp# exit exit Script done on Mon 30 Jun 2014 09:18:52 PM EEST
Extra 2: What arecord -v will tell you
<pre<
Script started on Mon 30 Jun 2014 09:19:27 PM EEST
root@jolk:/# arecord -v -d 600 -f S16_LE -r 44100 -c18 -t wav -D total_asym ./testing-18-tracks-002.wav
Recording WAVE ‘./testing-18-tracks-002.wav’ : Signed 16 bit Little Endian, Rate 44100 Hz, Channels 18
Multi PCM
Channel bindings:
0: slave 0, channel 0
1: slave 0, channel 1
2: slave 0, channel 2
3: slave 0, channel 3
4: slave 0, channel 4
5: slave 0, channel 5
6: slave 1, channel 0
7: slave 1, channel 1
8: slave 1, channel 2
9: slave 1, channel 3
10: slave 1, channel 4
11: slave 1, channel 5
12: slave 2, channel 0
13: slave 2, channel 1
14: slave 2, channel 2
15: slave 2, channel 3
16: slave 2, channel 4
17: slave 2, channel 5
Its setup is:
stream : CAPTURE
access : RW_INTERLEAVED
format : S16_LE
subformat : STD
channels : 18
rate : 44100
exact rate : 44100 (44100/1)
msbits : 16
buffer_size : 4096
period_size : 1024
period_time : 23219
tstamp_mode : NONE
period_step : 1
avail_min : 1024
period_event : 0
start_threshold : 1
stop_threshold : 4096
silence_threshold: 0
silence_size : 0
boundary : 1073741824
Slave #0: Direct Snoop PCM
Its setup is:
stream : CAPTURE
access : MMAP_INTERLEAVED
format : S16_LE
subformat : STD
channels : 6
rate : 44100
exact rate : 44100 (44100/1)
msbits : 16
buffer_size : 4096
period_size : 1024
period_time : 23219
tstamp_mode : NONE
period_step : 1
avail_min : 1024
period_event : 0
start_threshold : 1
stop_threshold : 4096
silence_threshold: 0
silence_size : 0
boundary : 1073741824
Hardware PCM card 1 ‘Emagic A62m’ device 0 subdevice 0
Its setup is:
stream : CAPTURE
access : MMAP_INTERLEAVED
format : S16_LE
subformat : STD
channels : 6
rate : 44100
exact rate : 44100 (44100/1)
msbits : 16
buffer_size : 4096
period_size : 1024
period_time : 23219
tstamp_mode : ENABLE
period_step : 1
avail_min : 1024
period_event : 0
start_threshold : 1
stop_threshold : 1073741824
silence_threshold: 0
silence_size : 0
boundary : 1073741824
appl_ptr : 0
hw_ptr : 0
Slave #1: Direct Snoop PCM
Its setup is:
stream : CAPTURE
access : MMAP_INTERLEAVED
format : S16_LE
subformat : STD
channels : 6
rate : 44100
exact rate : 44100 (44100/1)
msbits : 16
buffer_size : 4096
period_size : 1024
period_time : 23219
tstamp_mode : NONE
period_step : 1
avail_min : 1024
period_event : 0
start_threshold : 1
stop_threshold : 4096
silence_threshold: 0
silence_size : 0
boundary : 1073741824
Hardware PCM card 2 ‘Emagic A62m’ device 0 subdevice 0
Its setup is:
stream : CAPTURE
access : MMAP_INTERLEAVED
format : S16_LE
subformat : STD
channels : 6
rate : 44100
exact rate : 44100 (44100/1)
msbits : 16
buffer_size : 4096
period_size : 1024
period_time : 23219
tstamp_mode : ENABLE
period_step : 1
avail_min : 1024
period_event : 0
start_threshold : 1
stop_threshold : 1073741824
silence_threshold: 0
silence_size : 0
boundary : 1073741824
appl_ptr : 0
hw_ptr : 0
Slave #2: Direct Snoop PCM
Its setup is:
stream : CAPTURE
access : MMAP_INTERLEAVED
format : S16_LE
subformat : STD
channels : 6
rate : 44100
exact rate : 44100 (44100/1)
msbits : 16
buffer_size : 4096
period_size : 1024
period_time : 23219
tstamp_mode : NONE
period_step : 1
avail_min : 1024
period_event : 0
start_threshold : 1
stop_threshold : 4096
silence_threshold: 0
silence_size : 0
boundary : 1073741824
Hardware PCM card 3 ‘Emagic A62m’ device 0 subdevice 0
Its setup is:
stream : CAPTURE
access : MMAP_INTERLEAVED
format : S16_LE
subformat : STD
channels : 6
rate : 44100
exact rate : 44100 (44100/1)
msbits : 16
buffer_size : 4096
period_size : 1024
period_time : 23219
tstamp_mode : ENABLE
period_step : 1
avail_min : 1024
period_event : 0
start_threshold : 1
stop_threshold : 1073741824
silence_threshold: 0
silence_size : 0
boundary : 1073741824
appl_ptr : 0
hw_ptr : 0
overrun!!! (at least 457635848.226 ms long)
Status:
state : XRUN
trigger_time: 1404152402.511721000
tstamp : 155733.73779800
delay : 0
avail : 43701
avail_max : -39605
^CAborted by signal Interrupt…
root@jolk:/# exit
exit
Script done on Mon 30 Jun 2014 09:20:11 PM EEST
To do: choose optimal buffer values to avoid these strange XRUN artefacts.
[ADDED 2018-03-19]:
Someone asked: What DACs? The picture should answer that question: