On 23/01/09 06:22, Alexandre Ratchov wrote: > On Sun, Jan 08, 2023 at 10:56:31PM +0100, Jan Stary wrote: > > On Oct 16 08:18:17, a...@caoua.org wrote: > > > On Sat, Oct 15, 2022 at 10:03:52PM +0200, Åke Nordin wrote: > > > > On 10/14/22 11:21, Alexandre Ratchov wrote: > > > > > Here are the measures of the aliasing noise using sine sweeps. Check > > > > > the figure for the 44.1kHz to 48kH conversion, the sndiod column: > > > > > > > > > > https://arverb.com/pub/src/ > > > > > > aucat(1) currently says > > > > BUGS > > Resampling is low quality. > > > > Is this still considered to be the case? > > > > IMO, it doesn't deserve the BUGS section anymore, I'll remove this > sentence. Objections?
Not necessarily an objection, but I've been watching this thread silently since it started and wanted to voice some of my thoughts. Although I need to finalize the Perl script I was using to do this (life gets busy), in practice I was able to distinguish between samples created by audio/sox and aucat(1) in informal AB/X testing on my 7th generation X1 Carbon with HiFiMan Sundara headphones plugged in. To describe the circumstances + outcome briefly: 9 out of 10 correct in 10 trials; randomly sampling from an array containing the givens A and B to get an unknown X; comparing 15 seconds of audio; audio/sox as the playback software. In the future, I would do >=16 trials, and perhaps conduct the tests from my desktop instead since it has a discrete amp and DAC. In offline resampling from 48kHz to 44.1kHz, the highs were most affected and that's what I was able to use to distinguish between samples. The percussion, especially the cymbals, sounded different in particular because the clip resampled by aucat had cymbal crashes that seemed to 'shimmer' much less (the decay was more rapid). The spectrograms seemed to confirm that the highs were most affected. Whether that means "low quality resampling" or merely that the results of the two commands can be differentiated is something I'm uncertain of. Either way, I don't know enough about C or sndio internals to be useful in that domain yet. As an aside, I did find this to be a useful resource for learning about digital audio resampling, and they recommend audio/sox there. https://ccrma.stanford.edu/~jos/resample/ I hadn't said anything about this earlier because I wanted to take the time to finish + document the script, reproduce my results with a royalty free sample at a greater trial count, and then post. Given that I haven't done so yet, I can at least post the commands used to resample the audio for those that are interested. # This was originally an opus file downloaded with www/yt-dlp. # Converting to WAV so both SoX and aucat can work with it. $ opusdec input.{opus,wav} # Resample 16-bit 48kHz WAV file to 44.1kHz using both SoX and aucat(1). # # If I recall correctly, I converted to FLAC here because the WAV headers # generated by aucat and SoX differed, and so SoX would refuse to play WAV files # created by aucat. $ sox -G input.wav -t wav - rate -v 44100 | flac - -o output-sox.flac $ aucat -i input.wav -h wav -r 44100 -e s16 -o - | flac - -o output-aucat.flac # Generate spectrograms for later inspection/comparison. $ sox output-sox.flac -n spectrogram -o spectrogram-sox.png $ sox output-aucat.flac -n spectrogram -o spectrogram-aucat.png I'd certainly be interested in the ability to play audio in a way that avoids resampling altogether, similar to what a user can do on FreeBSD with the following sysctl tweaks: # sysctl hw.snd.maxautovchans=0 dev.pcm.0.bitperfect=1 https://www.freebsd.org/cgi/man.cgi?query=sound&manpath=FreeBSD+13.1-RELEASE&format=html That said, I understand that someone would have to write the code for that, and right now I lack the know-how so my expectations are nil. To end this mail, here are some relevant command outputs (note that these weren't gathered at the time of testing, they're to show what the system generally looks like): # mixerctl -av inputs.dac-2:3=94,94 inputs.dac-0:1=94,94 record.adc-0:1_mute=off [ off on ] record.adc-0:1=124,124 record.adc-2:3_mute=off [ off on ] record.adc-2:3=124,124 outputs.spkr_source=dac-2:3 [ dac-2:3 ] outputs.spkr_mute=off [ off on ] outputs.spkr_eapd=on [ off on ] outputs.spkr2_source=dac-0:1 [ dac-2:3 dac-0:1 ] outputs.spkr2_mute=off [ off on ] outputs.spkr2_boost=off [ off on ] inputs.mic=85,85 outputs.mic_dir=input-vr80 [ none input input-vr0 input-vr50 input-vr80 input-vr100 ] outputs.hp_source=dac-0:1 [ dac-2:3 dac-0:1 ] outputs.hp_mute=off [ off on ] outputs.hp_boost=off [ off on ] outputs.hp_eapd=on [ off on ] record.adc-2:3_source=mic { mic } record.adc-0:1_source=mic { mic } outputs.mic_sense=unplugged [ unplugged plugged ] outputs.hp_sense=unplugged [ unplugged plugged ] outputs.spkr_muters=hp { hp } outputs.master=95,95 outputs.master.mute=off [ off on ] outputs.master.slaves=dac-2:3,dac-0:1,spkr,spkr2,hp { dac-2:3 dac-0:1 spkr spkr2 hp } record.volume=124,124 record.volume.mute=off [ off on ] record.volume.slaves=adc-0:1,adc-2:3 { adc-0:1 adc-2:3 mic } record.enable=sysctl [ off on sysctl ] # audioctl name=azalia0 mode= pause=1 active=0 nblks=16 blksz=480 rate=48000 encoding=s16le play.channels=2 play.bytes=0 play.errors=0 record.channels=2 record.bytes=0 record.errors=0 $ sndioctl input.level=0.486 input.mute=0 output.level=0.373 output.mute=0 server.device=0 $ rcctl get sndiod sndiod_class=daemon sndiod_execdir= sndiod_flags= sndiod_logger= sndiod_rtable=0 sndiod_timeout=30 sndiod_user=root $ dmesg OpenBSD 7.2-current (GENERIC.MP) #912: Sat Dec 31 10:45:51 MST 2022 dera...@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP real mem = 16959836160 (16174MB) avail mem = 16428412928 (15667MB) random: good seed from bootblocks mpath0 at root scsibus0 at mpath0: 256 targets mainbus0 at root bios0 at mainbus0: SMBIOS rev. 3.1 @ 0xc7d49000 (64 entries) bios0: vendor LENOVO version "N2HET71W (1.54 )" date 08/03/2022 bios0: LENOVO 20QD0000US efi0 at bios0: UEFI 2.6 efi0: Lenovo rev 0x1540 acpi0 at bios0: ACPI 6.1 acpi0: sleep states S0 S3 S4 S5 acpi0: tables DSDT FACP SSDT SSDT SSDT SSDT SSDT TPM2 UEFI SSDT HPET APIC MCFG ECDT SSDT SSDT SSDT BOOT SSDT LPIT WSMT SSDT DBGP DBG2 MSDM BATB NHLT DMAR FPDT BGRT UEFI acpi0: wakeup devices GLAN(S4) XHC_(S3) XDCI(S4) HDAS(S4) RP01(S4) PXSX(S4) RP02(S4) PXSX(S4) PXSX(S4) RP04(S4) PXSX(S4) RP05(S4) PXSX(S4) RP06(S4) PXSX(S4) RP07(S4) [...] acpitimer0 at acpi0: 3579545 Hz, 24 bits acpihpet0 at acpi0: 23999999 Hz acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat cpu0 at mainbus0: apid 0 (boot processor) cpu0: Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz, 1711.23 MHz, 06-8e-0c cpu0: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,RDTSCP,LONG,LAHF,ABM,3DNOWP,PERF,ITSC,FSGSBASE,TSC_ADJUST,SGX,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,MPX,RDSEED,ADX,SMAP,CLFLUSHOPT,PT,SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,XSAVEC,XGETBV1,XSAVES cpu0: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 256KB 64b/line 4-way L2 cache, 8MB 64b/line 16-way L3 cache cpu0: smt 0, core 0, package 0 mtrr: Pentium Pro MTRR support, 10 var ranges, 88 fixed ranges cpu0: apic clock running at 24MHz cpu0: mwait min=64, max=64, C-substates=0.2.1.2.4.1.1.1, IBE cpu1 at mainbus0: apid 2 (application processor) cpu1: Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz, 1433.04 MHz, 06-8e-0c cpu1: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,RDTSCP,LONG,LAHF,ABM,3DNOWP,PERF,ITSC,FSGSBASE,TSC_ADJUST,SGX,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,MPX,RDSEED,ADX,SMAP,CLFLUSHOPT,PT,SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,XSAVEC,XGETBV1,XSAVES cpu1: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 256KB 64b/line 4-way L2 cache, 8MB 64b/line 16-way L3 cache cpu1: smt 0, core 1, package 0 cpu2 at mainbus0: apid 4 (application processor) cpu2: Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz, 1214.62 MHz, 06-8e-0c cpu2: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,RDTSCP,LONG,LAHF,ABM,3DNOWP,PERF,ITSC,FSGSBASE,TSC_ADJUST,SGX,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,MPX,RDSEED,ADX,SMAP,CLFLUSHOPT,PT,SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,XSAVEC,XGETBV1,XSAVES cpu2: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 256KB 64b/line 4-way L2 cache, 8MB 64b/line 16-way L3 cache cpu2: smt 0, core 2, package 0 cpu3 at mainbus0: apid 6 (application processor) cpu3: Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz, 1057.40 MHz, 06-8e-0c cpu3: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,RDTSCP,LONG,LAHF,ABM,3DNOWP,PERF,ITSC,FSGSBASE,TSC_ADJUST,SGX,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,MPX,RDSEED,ADX,SMAP,CLFLUSHOPT,PT,SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,XSAVEC,XGETBV1,XSAVES cpu3: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 256KB 64b/line 4-way L2 cache, 8MB 64b/line 16-way L3 cache cpu3: smt 0, core 3, package 0 ioapic0 at mainbus0: apid 2 pa 0xfec00000, version 20, 120 pins acpimcfg0 at acpi0 acpimcfg0: addr 0xf0000000, bus 0-127 acpiec0 at acpi0 acpiprt0 at acpi0: bus 0 (PCI0) acpiprt1 at acpi0: bus -1 (RP01) acpiprt2 at acpi0: bus -1 (RP02) acpiprt3 at acpi0: bus -1 (RP03) acpiprt4 at acpi0: bus -1 (RP04) acpiprt5 at acpi0: bus -1 (RP05) acpiprt6 at acpi0: bus -1 (RP06) acpiprt7 at acpi0: bus -1 (RP07) acpiprt8 at acpi0: bus -1 (RP08) acpiprt9 at acpi0: bus 3 (RP09) acpiprt10 at acpi0: bus -1 (RP10) acpiprt11 at acpi0: bus -1 (RP11) acpiprt12 at acpi0: bus -1 (RP12) acpiprt13 at acpi0: bus -1 (RP13) acpiprt14 at acpi0: bus -1 (RP14) acpiprt15 at acpi0: bus -1 (RP15) acpiprt16 at acpi0: bus -1 (RP16) acpiprt17 at acpi0: bus -1 (RP17) acpiprt18 at acpi0: bus -1 (RP18) acpiprt19 at acpi0: bus -1 (RP19) acpiprt20 at acpi0: bus -1 (RP20) acpiprt21 at acpi0: bus -1 (RP21) acpiprt22 at acpi0: bus -1 (RP22) acpiprt23 at acpi0: bus -1 (RP23) acpiprt24 at acpi0: bus -1 (RP24) acpipci0 at acpi0 PCI0: 0x00000000 0x00000011 0x00000001 acpithinkpad0 at acpi0: version 2.0 acpiac0 at acpi0: AC unit offline acpibat0 at acpi0: BAT0 model "02DL005" serial 1649 type LiP oem "SMP" "PNP0C60" at acpi0 not configured "LEN0111" at acpi0 not configured "LEN0100" at acpi0 not configured "INT3403" at acpi0 not configured "INT3403" at acpi0 not configured pchgpio0 at acpi0 GPI0 addr 0xfd6e0000/0x10000 0xfd6d0000/0x10000 0xfd6a0000/0x10000 irq 14, 320 pins "SYNA8004" at acpi0 not configured "ACPI000E" at acpi0 not configured "PNP0C14" at acpi0 not configured acpibtn0 at acpi0: SLPB "PNP0C14" at acpi0 not configured "PNP0C14" at acpi0 not configured acpibtn1 at acpi0: LID_ "PNP0C14" at acpi0 not configured "PNP0C14" at acpi0 not configured "PNP0C14" at acpi0 not configured "PNP0C14" at acpi0 not configured "INT3400" at acpi0 not configured tpm0 at acpi0 TPM_ 2.0 (TIS) addr 0xfed40000/0x5000, device 0x0000104a rev 0x4e "USBC000" at acpi0 not configured acpipwrres0 at acpi0: PUBS, resource for XHC_ acpipwrres1 at acpi0: BTPR, resource for HS10 acpipwrres2 at acpi0: USBC, resource for XDCI acpipwrres3 at acpi0: PXP_, resource for RP01, PXSX acpipwrres4 at acpi0: V0PR acpipwrres5 at acpi0: V1PR acpipwrres6 at acpi0: V2PR acpipwrres7 at acpi0: WRST acpicpu0 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151 mwait.1@0x33), C1(1000@1 mwait.1), PSS acpicpu1 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151 mwait.1@0x33), C1(1000@1 mwait.1), PSS acpicpu2 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151 mwait.1@0x33), C1(1000@1 mwait.1), PSS acpicpu3 at acpi0: C3(200@1034 mwait.1@0x60), C2(200@151 mwait.1@0x33), C1(1000@1 mwait.1), PSS acpitz0 at acpi0: critical temperature is 128 degC acpipwrres8 at acpi0: PIN_ acpipwrres9 at acpi0: PINP acpivideo0 at acpi0: GFX0 acpivout0 at acpivideo0: DD1F cpu0: Enhanced SpeedStep 1711 MHz: speeds: 2001, 2000, 1900, 1800, 1700, 1500, 1400, 1300, 1200, 1100, 1000, 800, 700, 600, 500, 400 MHz pci0 at mainbus0 bus 0 pchb0 at pci0 dev 0 function 0 "Intel Core 8G Host" rev 0x0c inteldrm0 at pci0 dev 2 function 0 "Intel UHD Graphics 620" rev 0x02 drm0 at inteldrm0 inteldrm0: msi, COFFEELAKE, gen 9 "Intel Core 6G Thermal" rev 0x0c at pci0 dev 4 function 0 not configured "Intel Core GMM" rev 0x00 at pci0 dev 8 function 0 not configured pchtemp0 at pci0 dev 18 function 0 "Intel 300 Series Thermal" rev 0x11 xhci0 at pci0 dev 20 function 0 "Intel 300 Series xHCI" rev 0x11: msi, xHCI 1.10 usb0 at xhci0: USB revision 3.0 uhub0 at usb0 configuration 1 interface 0 "Intel xHCI root hub" rev 3.00/1.00 addr 1 "Intel 300 Series Shared SRAM" rev 0x11 at pci0 dev 20 function 2 not configured iwm0 at pci0 dev 20 function 3 "Intel AC 9560" rev 0x11, msix dwiic0 at pci0 dev 21 function 0 "Intel 300 Series I2C" rev 0x11: apic 2 int 16 iic0 at dwiic0 dwiic1 at pci0 dev 21 function 1 "Intel 300 Series I2C" rev 0x11: apic 2 int 17 iic1 at dwiic1 ihidev0 at iic1 addr 0x2c gpio 100, vendor 0x6cb product 0xcd8b, SYNA8004 ihidev0: 15 report ids imt0 at ihidev0: clickpad, 5 contacts wsmouse0 at imt0 mux 0 ims0 at ihidev0 reportid 2: 2 buttons wsmouse1 at ims0 mux 0 hid at ihidev0 reportid 6 not configured hid at ihidev0 reportid 7 not configured hid at ihidev0 reportid 9 not configured hid at ihidev0 reportid 10 not configured hid at ihidev0 reportid 11 not configured hid at ihidev0 reportid 12 not configured hid at ihidev0 reportid 13 not configured hid at ihidev0 reportid 14 not configured hid at ihidev0 reportid 15 not configured "Intel 300 Series MEI" rev 0x11 at pci0 dev 22 function 0 not configured ppb0 at pci0 dev 29 function 0 "Intel 300 Series PCIE" rev 0xf1: msi pci1 at ppb0 bus 3 nvme0 at pci1 dev 0 function 0 "SanDisk WD Black NVMe" rev 0x00: msix, NVMe 1.3 nvme0: WDC PC SN720 SDAQNTW-512G-1001, firmware 10190101, serial 192280803177 scsibus1 at nvme0: 2 targets, initiator 0 sd0 at scsibus1 targ 1 lun 0: <NVMe, WDC PC SN720 SDA, 1019> sd0: 488386MB, 512 bytes/sector, 1000215216 sectors pcib0 at pci0 dev 31 function 0 "Intel 300 Series LPC" rev 0x11 azalia0 at pci0 dev 31 function 3 "Intel 300 Series HD Audio" rev 0x11: msi azalia0: codecs: Realtek ALC285, Intel/0x280b, using Realtek ALC285 audio0 at azalia0 ichiic0 at pci0 dev 31 function 4 "Intel 300 Series SMBus" rev 0x11: apic 2 int 16 iic2 at ichiic0 ichiic0: abort failed, status 0x41<BUSY,INUSE> "Intel 300 Series SPI" rev 0x11 at pci0 dev 31 function 5 not configured isa0 at pcib0 isadma0 at isa0 pckbc0 at isa0 port 0x60/5 irq 1 irq 12 pckbd0 at pckbc0 (kbd slot) wskbd0 at pckbd0: console keyboard pms0 at pckbc0 (aux slot) wsmouse2 at pms0 mux 0 pcppi0 at isa0 port 0x61 spkr0 at pcppi0 vmm0 at mainbus0: VMX/EPT efifb at mainbus0 not configured uhidev0 at uhub0 port 6 configuration 1 interface 0 "Raydium Corporation Raydium Touch System" rev 2.01/1.08 addr 2 uhidev0: iclass 3/0, 68 report ids uhid0 at uhidev0 reportid 1: input=0, output=63, feature=0 uhid1 at uhidev0 reportid 2: input=63, output=0, feature=0 uhid2 at uhidev0 reportid 3: input=0, output=63, feature=0 uhid3 at uhidev0 reportid 4: input=0, output=63, feature=0 uhid4 at uhidev0 reportid 5: input=0, output=63, feature=0 uhid5 at uhidev0 reportid 6: input=63, output=0, feature=0 uhid6 at uhidev0 reportid 7: input=0, output=63, feature=0 uhid7 at uhidev0 reportid 8: input=0, output=63, feature=0 uhid8 at uhidev0 reportid 9: input=63, output=0, feature=0 ums0 at uhidev0 reportid 10: 1 button, tip wsmouse3 at ums0 mux 0 uhid9 at uhidev0 reportid 11: input=0, output=0, feature=1 uhid10 at uhidev0 reportid 12: input=0, output=0, feature=255 uhid11 at uhidev0 reportid 13: input=0, output=0, feature=255 ums1 at uhidev0 reportid 68: 0 buttons wsmouse4 at ums1 mux 0 vscsi0 at root scsibus2 at vscsi0: 256 targets softraid0 at root scsibus3 at softraid0: 256 targets sd1 at scsibus3 targ 1 lun 0: <OPENBSD, SR CRYPTO, 006> sd1: 488385MB, 512 bytes/sector, 1000213631 sectors root on sd1a (a5611ea84fd14403.a) swap on sd1b dump on sd1b drm:pid0:intel_ddi_sanitize_encoder_pll_mapping *NOTICE* [drm] [ENCODER:102:DDI B/PHY B] is disabled/in DSI mode with an ungated DDI clock, gate it drm:pid0:intel_ddi_sanitize_encoder_pll_mapping *NOTICE* [drm] [ENCODER:116:DDI C/PHY C] is disabled/in DSI mode with an ungated DDI clock, gate it inteldrm0: 1920x1080, 32bpp wsdisplay0 at inteldrm0 mux 1: console (std, vt100 emulation), using wskbd0 wsdisplay0: screen 1-5 added (std, vt100 emulation) iwm0: hw rev 0x310, fw ver 46.50fdb42f.0, address d0:ab:d5:bb:3a:c8