Jan Stary
2021-05-25 13:45:17 UTC
This is current/amd64. I am trying to use the -c option of aucat,
specifying the channels to be played from a multichannel file.
As an example, here is a quad audio file produced by sox:
$ sox -n -b 16 quad.wav synth 10 sin 200 sin 300 sin 400 sin 600 gain -6
$ soxi quad.wav
Input File : 'quad.wav'
Channels : 4
Sample Rate : 48000
Precision : 16-bit
Duration : 00:00:10.00 = 480000 samples ~ 750 CDDA sectors
File Size : 3.84M
Bit Rate : 3.07M
Sample Encoding: 16-bit Signed Integer PCM
Now trying to use aucat -c to play the individual channels
doesn't seem to do what it says:
$ aucat -dd -c 0:0 -i quad.wav
quad.wav: skipped unknown chunk
quad.wav,pst=cfg: play, chan 0:3, 48000Hz, s16le, bytes 80..3840080, vol 32768
default: 48000Hz, play 0:3, 36 blocks of 480 frames
quad.wav,pst=cfg: allocated 17280 frame buffer
cmap: nch = 4, ostart = 0, onext = 0, istart = 0, inext = 0
quad.wav,pst=ini: chain initialized
quad.wav,pst=run: started
started
^Cquad.wav,pst=ini: stopped
stopped
quad.wav,pst=ini: closed
Indeed quad.wav has channels 0:3, but why does auact play channels 0:3
with -c 0:0 specified? Specifying other channels seem even more confusing:
$ aucat -dd -c 2:2 -i quad.wav
quad.wav: skipped unknown chunk
quad.wav,pst=cfg: play, chan 2:5, 48000Hz, s16le, bytes 80..3840080, vol 32768
default: 48000Hz, play 0:5, 36 blocks of 480 frames
quad.wav,pst=cfg: allocated 17280 frame buffer
cmap: nch = 4, ostart = 2, onext = 0, istart = 0, inext = 0
quad.wav,pst=ini: chain initialized
quad.wav,pst=run: started
started
^Cquad.wav,pst=ini: stopped
stopped
quad.wav,pst=ini: closed
Now it considers quad.wav to have channels 2 to 5
and it plays channels 0:5, given -c 2:2.
Maybe I am misunderstanding the -c option
(or what the -dd messages say):
-c min:max The range of audio file channel numbers.
The default is 0:1, i.e. stereo.
When playing a file with aucat -i, does that mean
"use these channels from the file"?
If not, how does one specify "play just channel 2, out of 0,1,2,3"?
There is a chunk that aucat skips; this is what sndfile-info says:
File : quad.wav
Length : 384080
RIFF : 384072
WAVE
fmt : 40
Format : 0xFFFE => WAVE_FORMAT_EXTENSIBLE
Channels : 4
Sample Rate : 48000
Block Align : 8
Bit Width : 16
Bytes/sec : 384000
Valid Bits : 16
Channel Mask : 0x33 (L, R, Ls, Rs)
Subformat
esf_field1 : 0x1
esf_field2 : 0x0
esf_field3 : 0x10
esf_field4 : 0x80 0x0 0x0 0xAA 0x0 0x38 0x9B 0x71
format : pcm
fact : 4
frames : 48000
data : 384000
End
----------------------------------------
Sample Rate : 48000
Frames : 48000
Channels : 4
Format : 0x00130002
Sections : 1
Seekable : TRUE
Duration : 00:00:01.000
Signal Max : 16424 (-6.00 dB)
With 1 second instead of 10 seconds of audio (synth 1) the file
is small enough, I am attaching it.
Thanks for any clue.
Jan
specifying the channels to be played from a multichannel file.
As an example, here is a quad audio file produced by sox:
$ sox -n -b 16 quad.wav synth 10 sin 200 sin 300 sin 400 sin 600 gain -6
$ soxi quad.wav
Input File : 'quad.wav'
Channels : 4
Sample Rate : 48000
Precision : 16-bit
Duration : 00:00:10.00 = 480000 samples ~ 750 CDDA sectors
File Size : 3.84M
Bit Rate : 3.07M
Sample Encoding: 16-bit Signed Integer PCM
Now trying to use aucat -c to play the individual channels
doesn't seem to do what it says:
$ aucat -dd -c 0:0 -i quad.wav
quad.wav: skipped unknown chunk
quad.wav,pst=cfg: play, chan 0:3, 48000Hz, s16le, bytes 80..3840080, vol 32768
default: 48000Hz, play 0:3, 36 blocks of 480 frames
quad.wav,pst=cfg: allocated 17280 frame buffer
cmap: nch = 4, ostart = 0, onext = 0, istart = 0, inext = 0
quad.wav,pst=ini: chain initialized
quad.wav,pst=run: started
started
^Cquad.wav,pst=ini: stopped
stopped
quad.wav,pst=ini: closed
Indeed quad.wav has channels 0:3, but why does auact play channels 0:3
with -c 0:0 specified? Specifying other channels seem even more confusing:
$ aucat -dd -c 2:2 -i quad.wav
quad.wav: skipped unknown chunk
quad.wav,pst=cfg: play, chan 2:5, 48000Hz, s16le, bytes 80..3840080, vol 32768
default: 48000Hz, play 0:5, 36 blocks of 480 frames
quad.wav,pst=cfg: allocated 17280 frame buffer
cmap: nch = 4, ostart = 2, onext = 0, istart = 0, inext = 0
quad.wav,pst=ini: chain initialized
quad.wav,pst=run: started
started
^Cquad.wav,pst=ini: stopped
stopped
quad.wav,pst=ini: closed
Now it considers quad.wav to have channels 2 to 5
and it plays channels 0:5, given -c 2:2.
Maybe I am misunderstanding the -c option
(or what the -dd messages say):
-c min:max The range of audio file channel numbers.
The default is 0:1, i.e. stereo.
When playing a file with aucat -i, does that mean
"use these channels from the file"?
If not, how does one specify "play just channel 2, out of 0,1,2,3"?
There is a chunk that aucat skips; this is what sndfile-info says:
File : quad.wav
Length : 384080
RIFF : 384072
WAVE
fmt : 40
Format : 0xFFFE => WAVE_FORMAT_EXTENSIBLE
Channels : 4
Sample Rate : 48000
Block Align : 8
Bit Width : 16
Bytes/sec : 384000
Valid Bits : 16
Channel Mask : 0x33 (L, R, Ls, Rs)
Subformat
esf_field1 : 0x1
esf_field2 : 0x0
esf_field3 : 0x10
esf_field4 : 0x80 0x0 0x0 0xAA 0x0 0x38 0x9B 0x71
format : pcm
fact : 4
frames : 48000
data : 384000
End
----------------------------------------
Sample Rate : 48000
Frames : 48000
Channels : 4
Format : 0x00130002
Sections : 1
Seekable : TRUE
Duration : 00:00:01.000
Signal Max : 16424 (-6.00 dB)
With 1 second instead of 10 seconds of audio (synth 1) the file
is small enough, I am attaching it.
Thanks for any clue.
Jan