Re: aucat can't seem to properly play a 24-bit 44.1kHz stdout of flac -d

From: Job Bautista <job_at_tilde.team>
Date: Mon, 23 May 2022 15:51:02 +0800
Alexandre Ratchov wrote:
> On Mon, May 23, 2022 at 02:21:11PM +0800, Job Bautista wrote:
>> I'm using Devuan GNU/Linux (testing branch) and its packaging of sndio
>> (which comes from Debian).
>>
>> My sndiod flags are: -L 0.0.0.0 -m play,mon -e s24
>>
>> Setting -e to s16 or s32, or omitting -e doesn't help the problem I will
>> explain shortly below. Also, weirdly if I set sndiod's format encoding to
>> s24, my /proc/asound/card0/pcm0p/sub0/hw_params says that the format is
>> S32_LE. But anyway...
>>
>> I'm trying to make aucat play flac's stdout of its decoding of a 24-bit,
>> 44.1kHz FLAC file, but it's only returning noise to me, even if I specify
>> aucat's input format as suggested in this email thread.[1] 16-bit FLACs work
>> fine in this setup though. And if I decode the 24-bit FLAC first to a file,
>> then make aucat play from there, it plays it properly. It's only when I try
>> to use the stdout setup it fails. Weird.
>>
>> Here's the exact command-line:
>>
>> $ flac -dcs bf3.flac | aucat -e s24 -r 44100 -i -
>>
> 
> Hi,
> 
> First, flac produces a .wav file to stdout (which has a header) while
> aucat expects raw samples on stdin.  In turn, it starts playing junk
> (the .wav header) then may start playing unaligned with the first
> sample which results in noise.
> 
> The "s24" strings means signed 24-bit samples stored in 4-byte words
> (i.e. the smalles power of two large enough to hold the 24 bits).
> While flac produces 24-bit samples in 3-byte packets, not 4-byte
> words. The corresponding encoding name is s24le3
> 
> By forcing flac to output raw samples and using s24le3, this works:
> 
> flac -dc --force-raw --endian=little --sign=signed bf3.flac | aucat -r 44100 -e s24le3 -i -
> 
>>
>> Here's what aucat -dd tells me:
>>
>> stdin,pst=cfg: play, chan 0:1, 44100Hz, s24le4msb, vol 32768
>> default: 44100Hz, play 0:1, 36 blocks of 441 frames
>> stdin,pst=cfg: allocated 15876 frame buffer
>> cmap: nch = 2, ostart = 0, onext = 0, istart = 0, inext = 0
>> dec: s24le4msb, 2 channels
>    ^^^^^^^^^^^^^^
> 
> s -> signed
> 24 -> 24 bits of data
> le -> little endian byte order
> 4 -> 4-byte packets
> msb -> data aligned in most significant bits
> 
> 
>>
>> Perhaps the "3bytes" may be throwing off aucat? I don't know, I'm not that
>> well-versed with audio. If you need more information, please tell me. Thanks
>>
> 
> yes!
> 
> 

Ah, that perfectly explains why aucat is giving me noise. I knew 
something looks off with the "3bytes" there, I didn't know it is its own 
encoding format. Thanks!

-- 
Job Bautista

http://rw.rs/~job/
Received on Mon May 23 2022 - 09:51:02 CEST

This archive was generated by hypermail 2.3.0 : Tue Aug 09 2022 - 16:23:52 CEST