Hello again,

I've got a solution. The period that this driver uses is an EXTREMELY non-standard 1008 samples.

I discovered this by making a dummy jackd server and adding the card manually via alsa_in:

[19:36:16]daniel@daniel-ThinkPad-X1-Carbon-7th:~>
$alsa_in -d hw:CARD=
sofhdadsp,DEV=0 -r 48000
WARNING: buffer size does not match: (requested 2048, got 2040)
WARNING: period size does not match: (requested 1024, got 1008)
selected sample format: 32bit
delay = 4208
delay = 1022

Anyway, the solution here is to use a period of 1008. This can be assigned in qjackctl by typing it in instead of using the dropdown, or via cli with the `--period 1008` option.

Some audio applications will need additional config. For example, supercollider requires a 2^n block size that is a factor of the sample rate. This can be achieved by executing `s.options.blockSize = 16;` before booting the server.

Other than the bizarre period, most of the defaults work quite well. Obviously this can be tuned, but at a bare minimum, jackd can be successfully started on my machine via:

[02:37:47]daniel@daniel-ThinkPad-X1-Carbon-7th:/usr/lib/firmware/intel/sof-tplg>
$jackd -d alsa --period 1008


On Sat, Sep 12, 2020 at 7:45 PM Dan Zink <sludgefree@gmail.com> wrote:
Hi all,

I made some headway on this, I was able to start Jack, but... this is the weirdest thing I've ever seen with hardware audio:

I had to make the period size 1008 samples - not 1024, etc.

I discovered this number by running Jack starting with the dummy server, like: `jackd -d dummy` and then adding the alsa_in device, like: `alsa_in -d hw:CARD=sofhdadsp,DEV=0 -r 48000`

alsa_in -d hw:CARD=sofhdadsp,DEV=0 -r 48000
WARNING: buffer size does not match: (requested 2048, got 2040)
WARNING: period size does not match: (requested 1024, got 1008)
selected sample format: 32bit
delay = 4208

So starting up jackd like: `jackd -d alsa --period=1008` boots, but the sound is horrible from SuperCollider.

Is there any way to update my sound card to use a more standard period size? Or am I out of luck here? That buffer size is also very... unusual.


On Mon, Sep 7, 2020 at 5:10 PM Dan Zink <sludgefree@gmail.com> wrote:
Hello all,

Sometimes I want to use jackd with the laptop speakers or headphones, instead of my audio interface. I can't get it to start on my new laptop (using the audio interface works perfectly, thanks community :) ).

I've successfully and mostly painlessly gotten jackd working on a few different machines, but this one has me stumped. I'm going to try to document as much as I can here so please forgive me if I miss something.


I'm using this version of jackd

$jackd -V
jackdmp version 1.9.12 tmpdir /dev/shm protocol 8




and this version of Ubuntu:

$uname -a
Linux daniel-ThinkPad-X1-Carbon-7th 5.4.0-45-generic #49-Ubuntu SMP Wed Aug 26 13:38:52 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux




Starting up selecting the first device under `aplay` throws this error (using -R instead of -r doesn't seem to affect very much):

$jackd --verbose -r -P 80 -d alsa -d hw:sofhdadsp,0
jackdmp 1.9.12
Copyright 2001-2005 Paul Davis and others.
Copyright 2004-2016 Grame.
Copyright 2016-2017 Filipe Coelho.
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 non-realtime mode
self-connect-mode is "Don't restrict self connect requests"
Jack: JackPosixThread::StartImp : create non RT thread
Jack: JackPosixThread::ThreadHandler : start
Jack: playback device hw:sofhdadsp,0
Jack: capture device hw:sofhdadsp,0
Jack: JackDriver::Open capture_driver_name = hw:sofhdadsp,0
Jack: JackDriver::Open playback_driver_name = hw:sofhdadsp,0
Jack: Check protocol client = 8 server = 8
Jack: JackEngine::ClientInternalOpen: name = system
Jack: JackEngine::AllocateRefNum ref = 0
Jack: JackLinuxFutex::Allocate name = jack_sem.1000_default_system val = 0
Jack: JackEngine::NotifyAddClient: name = system
Jack: JackGraphManager::SetBufferSize size = 1024
Jack: JackConnectionManager::DirectConnect first: ref1 = 0 ref2 = 0
Jack: JackGraphManager::ConnectRefNum cur_index = 0 ref1 = 0 ref2 = 0
Jack: JackDriver::SetupDriverSync driver sem in flush mode
audio_reservation_init
Acquire audio card Audio0
creating alsa driver ... hw:sofhdadsp,0|hw:sofhdadsp,0|1024|2|48000|0|0|nomon|swmeter|-|32bit
configuring for 48000Hz, period = 1024 frames (21.3 ms), buffer = 2 periods
ALSA: final selected sample format for capture: 32bit integer little-endian
ALSA: cannot set period size to 1024 frames for capture
ALSA: cannot configure capture channel
Jack: JackDriver::Close
Jack: JackConnectionManager::DirectDisconnect last: ref1 = 0 ref2 = 0
Jack: JackGraphManager::DisconnectRefNum cur_index = 0 ref1 = 0 ref2 = 0
Jack: JackEngine::ClientInternalClose ref = 0
Jack: JackEngine::ClientCloseAux ref = 0
Jack: JackGraphManager::RemoveAllPorts ref = 0
Released audio card Audio0
audio_reservation_finish
Jack: ~JackDriver
Cannot initialize driver
Jack: no message buffer overruns
Jack: JackPosixThread::Stop
Jack: JackPosixThread::ThreadHandler : exit
JackServer::Open failed with -1
Jack: Succeeded in unlocking 82280346 byte memory area
Jack: JackShmMem::delete size = 0 index = 0
Jack: ~JackDriver
Jack: Succeeded in unlocking 1187 byte memory area
Jack: JackShmMem::delete size = 0 index = 1
Jack: Cleaning up shared memory
Jack: Cleaning up files
Jack: Unregistering server `default'
Failed to open server



Using a dummy server succeeds:

$jackd -r -P 80 -d dummy
jackdmp 1.9.12
Copyright 2001-2005 Paul Davis and others.
Copyright 2004-2016 Grame.
Copyright 2016-2017 Filipe Coelho.
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 non-realtime mode
self-connect-mode is "Don't restrict self connect requests"




When I list my devices (with the interface unplugged), with aplay -l I get: 

$aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sofhdadsp [sof-hda-dsp], device 0: HDA Analog (*) []
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: sofhdadsp [sof-hda-dsp], device 1: HDA Digital (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: sofhdadsp [sof-hda-dsp], device 3: HDMI1 (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: sofhdadsp [sof-hda-dsp], device 4: HDMI2 (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: sofhdadsp [sof-hda-dsp], device 5: HDMI3 (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0



here's the relevant lsmod:

$lsmod | grep snd
snd_seq_dummy          16384  0
snd_usb_audio         266240  0
snd_usbmidi_lib        36864  1 snd_usb_audio
snd_seq_midi           20480  0
snd_seq_midi_event     16384  1 snd_seq_midi
snd_seq                69632  3 snd_seq_midi,snd_seq_midi_event,snd_seq_dummy
snd_rawmidi            36864  2 snd_seq_midi,snd_usbmidi_lib
snd_seq_device         16384  3 snd_seq,snd_seq_midi,snd_rawmidi
snd_hda_intel          53248  0
mc                     53248  5 videodev,snd_usb_audio,videobuf2_v4l2,uvcvideo,videobuf2_common
snd_soc_skl_hda_dsp    24576  6
snd_hda_codec_hdmi     61440  1
snd_soc_hdac_hdmi      36864  1 snd_soc_skl_hda_dsp
snd_hda_codec_realtek   126976  1
snd_hda_codec_generic    81920  1 snd_hda_codec_realtek
snd_soc_dmic           16384  1
snd_sof_pci            20480  2
snd_sof_intel_hda_common    69632  1 snd_sof_pci
snd_soc_hdac_hda       24576  1 snd_sof_intel_hda_common
snd_sof_intel_hda      20480  1 snd_sof_intel_hda_common
snd_sof_intel_byt      20480  1 snd_sof_pci
snd_sof_intel_ipc      20480  1 snd_sof_intel_byt
snd_sof               106496  4 snd_sof_pci,snd_sof_intel_hda_common,snd_sof_intel_byt,snd_sof_intel_ipc
snd_sof_xtensa_dsp     16384  1 snd_sof_pci
snd_hda_ext_core       28672  4 snd_sof_intel_hda_common,snd_soc_hdac_hdmi,snd_soc_hdac_hda,snd_sof_intel_hda
snd_soc_acpi_intel_match    32768  2 snd_sof_pci,snd_sof_intel_hda_common
snd_soc_acpi           16384  2 snd_sof_pci,snd_soc_acpi_intel_match
snd_soc_core          245760  6 snd_sof,snd_sof_intel_hda_common,snd_soc_hdac_hdmi,snd_soc_hdac_hda,snd_soc_dmic,snd_soc_skl_hda_dsp
snd_compress           24576  1 snd_soc_core
ac97_bus               16384  1 snd_soc_core
snd_pcm_dmaengine      16384  1 snd_soc_core
snd_intel_dspcfg       24576  3 snd_hda_intel,snd_sof_pci,snd_sof_intel_hda_common
snd_hda_codec         131072  6 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec_realtek,snd_soc_hdac_hda,snd_soc_skl_hda_dsp
snd_hda_core           90112  11 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_ext_core,snd_hda_codec,snd_hda_codec_realtek,snd_sof_intel_hda_common,snd_soc_hdac_hdmi,snd_soc_hdac_hda,snd_sof_intel_hda,snd_soc_skl_hda_dsp
snd_hwdep              20480  2 snd_usb_audio,snd_hda_codec
snd_pcm               106496  11 snd_hda_codec_hdmi,snd_hda_intel,snd_usb_audio,snd_hda_codec,snd_sof,snd_sof_intel_hda_common,snd_soc_hdac_hdmi,snd_soc_core,snd_hda_core,snd_pcm_dmaengine
ledtrig_audio          16384  4 snd_hda_codec_generic,snd_hda_codec_realtek,snd_sof,thinkpad_acpi
snd_timer              36864  2 snd_seq,snd_pcm
snd                    90112  28 snd_hda_codec_generic,snd_seq,snd_seq_device,snd_hda_codec_hdmi,snd_hwdep,snd_hda_intel,snd_usb_audio,snd_usbmidi_lib,snd_hda_codec,snd_hda_codec_realtek,snd_timer,snd_compress,thinkpad_acpi,snd_soc_core,snd_pcm,snd_soc_skl_hda_dsp,snd_rawmidi
soundcore              16384  1 snd



And finally, the lspci

$sudo lspci
00:00.0 Host bridge: Intel Corporation Coffee Lake HOST and DRAM Controller (rev 0c)
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (Whiskey Lake) (rev 02)
00:04.0 Signal processing controller: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem (rev 0c)
00:08.0 System peripheral: Intel Corporation Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th/8th Gen Core Processor Gaussian Mixture Model
00:12.0 Signal processing controller: Intel Corporation Cannon Point-LP Thermal Controller (rev 11)
00:14.0 USB controller: Intel Corporation Cannon Point-LP USB 3.1 xHCI Controller (rev 11)
00:14.2 RAM memory: Intel Corporation Cannon Point-LP Shared SRAM (rev 11)
00:14.3 Network controller: Intel Corporation Cannon Point-LP CNVi [Wireless-AC] (rev 11)
00:15.0 Serial bus controller [0c80]: Intel Corporation Cannon Point-LP Serial IO I2C Controller #0 (rev 11)
00:15.1 Serial bus controller [0c80]: Intel Corporation Cannon Point-LP Serial IO I2C Controller #1 (rev 11)
00:16.0 Communication controller: Intel Corporation Cannon Point-LP MEI Controller #1 (rev 11)
00:1d.0 PCI bridge: Intel Corporation Cannon Point-LP PCI Express Root Port #9 (rev f1)
00:1d.4 PCI bridge: Intel Corporation Cannon Point-LP PCI Express Root Port #13 (rev f1)
00:1f.0 ISA bridge: Intel Corporation Cannon Point-LP LPC Controller (rev 11)
00:1f.3 Audio device: Intel Corporation Cannon Point-LP High Definition Audio Controller (rev 11)
00:1f.4 SMBus: Intel Corporation Cannon Point-LP SMBus Controller (rev 11)
00:1f.5 Serial bus controller [0c80]: Intel Corporation Cannon Point-LP SPI Controller (rev 11)
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (6) I219-V (rev 11)
03:00.0 Non-Volatile memory controller: Sandisk Corp WD Black 2018/PC SN720 NVMe SSD


Has anyone else succeeded in getting jackd running with this particular hardware? Thanks!