On Mon, Jun 01, 2026 at 05:13:01PM +0200, Jan Stary wrote:
> There is this nice handheld recorder that I have been using
> for years to do filed recordings; only recently have I found
> that it has the option to present itself to an OS
> as a usb-compliant sound card.
> 
> https://www.zoom.co.jp/node/54
> 
> So I tested it on current/amd64 (full dmesg + UAUDIO_DEBUG below);
> it basicaly works fine (the sound is great), but there is this one problem.
> 
> When plugged in, the device lets you choose between interfacing
> as a usb disk or a usb sound card. Choosing the disk will attach
> as an sd @ umass and it works as expected (seeing the audio files
> on a FAT filesystem). Choosing the sound card lets you choose the
> audio format first; it seems there are two options (both stereo):
> signed 16 bit @ 44100 and signed 16 bit @ 48000.
> 
> It only attaches _after_ you choose the format.

I've one too, one of my favourites, btw. Mine has no options to chose
the sample rate, though. The OS chooses the sample rate between
44.1kHz and 48kHz. If I run sndiod with -r 44100, its small screen
displays "44.1k" in the bottom-left corner and I confirm that it
operats at 44.1kHz.

> This is how it attaches with 48k chosen:

[...]
> 
> parameters:
> pchan = 2, s16le2, rchan = 2, s16le2, rates: 44100 48000

the device claims both 44100 and 48000 are available to the OS.

[...]

> When 44k is chosen, it attaches exactly the same (says dmesg);
> audioctl -f /dev/audio1 still thinks the device is doing 48k:
> 
> name=H1
> mode=play
> pause=0
> active=0
> nblks=2
> blksz=960
> rate=48000
> encoding=s16le
> play.channels=2
> play.bytes=0
> play.errors=0
> record.channels=2
> record.bytes=0
> record.errors=0
> 
> I can do audioctl -f /dev/audio1 rate=44100 explicitly to "fix" that;
> but aucat -o file.wav will create a stereo s16le @ 44 wav file,
> BUT the header will say 48k (so aucat -i file.wav will then play it
> faster then appropriate, resulting in hilarious funny voices and all).
> 
> This is what sndiod -ddd says during that recording.
> It seems tio think the device does 48k.
>

[...]

> rsnd/1: 48000Hz, s16le, play 0:1, rec 0:1, 16 blocks of 480 frames

^^^^^^^^^^^

sndiod is still using 48kHz. The driver allowed this because the
device claimed 48000 capability.

My guess is that the device tries to force 44.1kHz, but doesn't do it
correctly. It's supposed to "hide" the 48kHz capability to force the
driver to use 44.1kHz.

What's the version of the firmware? FWIW, mine says its v1.19.

> 
> It seems that the running sndiod (-f rsnd/0 -F rnsd/1)
> does not fully negotiate the sio_par with the device.
> Or it the device not telling sndiod the truth?
> 
> The sample rate of 48k is aucat's default; thinking the device
> _is_ doing 48k, aucat creates an audio stream of what it gets.
> But the device is doing 44100.

Note that sndiod chooses the rate, no matter what the client
requests. If the client rate doesn't match the current hardware rate,
then sndiod will resample.

> 
> Is there something obvious I should test next?
> 

Try to update the firmware, if applicable

Reply via email to