pipewire issueshttps://gitlab.freedesktop.org/pipewire/pipewire/-/issues2023-08-29T08:08:56Zhttps://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3465pipewire-0.3.77-9-g31f91ce9f breaks JACK clients2023-08-29T08:08:56Zgitterdudepipewire-0.3.77-9-g31f91ce9f breaks JACK clientsUsing 0.3.77-8-gfc68fd2d4 and older I can start JACK programs like VCV-Rack and mpv by using something like
`pw-jack -p 512 <program>` .
Using newer versions, up to the latest 0.3.78-17-gb54f7fe90, I get complaints about JACK not being ...Using 0.3.77-8-gfc68fd2d4 and older I can start JACK programs like VCV-Rack and mpv by using something like
`pw-jack -p 512 <program>` .
Using newer versions, up to the latest 0.3.78-17-gb54f7fe90, I get complaints about JACK not being available.
The programs run but can't be connected to any output and they don't show up in qpwgraph
Here's someone else having the same problem
https://github.com/supercollider/supercollider/issues/6076
Tested in Ubuntu 22.04 and openSUSE-15.5https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3464pipewire-0.3.78-1.fc38 forces headphones into handsfree mode when using exter...2023-08-31T13:48:51ZGiperboreypipewire-0.3.78-1.fc38 forces headphones into handsfree mode when using external mic- Headphones: `Sony WH-1000XM5`
- Mic: `Logitech C920`
- PipeWire version: `pipewire-0.3.78-1`
- Distribution and distribution version: `Fedora Linux 38 (Workstation Edition)`
- Desktop Environment: `Gnome + Xorg`
- Kernel version: `6.4....- Headphones: `Sony WH-1000XM5`
- Mic: `Logitech C920`
- PipeWire version: `pipewire-0.3.78-1`
- Distribution and distribution version: `Fedora Linux 38 (Workstation Edition)`
- Desktop Environment: `Gnome + Xorg`
- Kernel version: `6.4.11-200`
## Description of Problem:
Headphones are forced into handsfree mode (HSP/HFP) when using an external microphone. Unable to use headphones in headset mode (A2DP+LDAC) alongside the external mic.
## How Reproducible:
Always
### Steps to Reproduce:
1. Connect external mic.
2. Set external mic as default input
3. Connect headphones and make sure they're in headset mode (A2DP+LDAC)
4. Join a "Google Meet", "MS Teams" or start using mic on https://mictests.com/.
### Actual Results:
The headphones instantly switch to handsfree mode (HSP/HFP). Any attempt to revert to headset mode (A2DP+LDAC) results in non-working external mic.
### Expected Results:
Headphones must be able to stay in headset mode (A2DP+LDAC) when using an external mic.
### Workaround:
Downgrading to `pipewire-0.3.77-3.fc38` solves the issue.https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3463fix noise issue for neon function2023-09-06T13:42:12ZShengjiu Wangfix noise issue for neon functionThere is typo in the code, which cause noise when neon is used.
```diff
diff --git a/spa/plugins/audioconvert/fmt-ops-neon.c b/spa/plugins/audioconvert/fmt-ops-neon.c
index 0006456fc..55be55fa5 100644
--- a/spa/plugins/audioconvert/fmt-...There is typo in the code, which cause noise when neon is used.
```diff
diff --git a/spa/plugins/audioconvert/fmt-ops-neon.c b/spa/plugins/audioconvert/fmt-ops-neon.c
index 0006456fc..55be55fa5 100644
--- a/spa/plugins/audioconvert/fmt-ops-neon.c
+++ b/spa/plugins/audioconvert/fmt-ops-neon.c
@@ -294,7 +294,7 @@ conv_f32d_to_s16_2s_neon(void *data, void * SPA_RESTRICT dst, const void * SPA_R
" beq 4f\n"
"3:"
" ld1 { v0.s }[0], [%[s0]], #4\n"
- " ld1 { v2.s }[0], [%[s1]], #4\n"
+ " ld1 { v1.s }[0], [%[s1]], #4\n"
" subs %[remainder], %[remainder], #1\n"
" sqadd v0.4s, v0.4s, v2.4s\n"
" sqadd v1.4s, v1.4s, v2.4s\n"
```https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3461Changing default sink or moving a sink-input to another sink results in Unkno...2023-08-29T10:56:59ZKeyofBlueSChanging default sink or moving a sink-input to another sink results in Unknow outputChanging default sink or moving a sink-input to another sink results in Unknown output
- Wireplumber version: Compiled with libwireplumber 0.4.14 - Linked with libwireplumber 0.4.14
- PipeWire version: Compiled with libpipewire 0.3.78 ...Changing default sink or moving a sink-input to another sink results in Unknown output
- Wireplumber version: Compiled with libwireplumber 0.4.14 - Linked with libwireplumber 0.4.14
- PipeWire version: Compiled with libpipewire 0.3.78 - Linked with libpipewire 0.3.78
- Distribution and distribution version: Debian GNU/Linux trixie/sid
- Desktop Environment: Xfce 4.18
- Kernel version: 6.4.11
## Description of Problem:
Dear developers,
when changing default sink or moving a sink-input to an another sink using 'pactl' or 'pavucontrol', results in 'Unknown output'.
Please let me know what else You need in order to trackdown this issue.
## How Reproducible:
Always
### Steps to Reproduce:
1. Start a playback
2. Change default sink or move a sink-input to an another sink with 'pactl' or 'pavucontrol'.
### Actual Results:
no sound from the sink-input (Unknown output).
### Expected Results:
sink-input should be routed to the selected sink.
# Additional Info (as attachments):
[pw-dump.log](/uploads/4f00818d737f82d71108a2354e4f0aba/pw-dump.log)
[pipewire.log](/uploads/5d46406968ed11c9fc76100bb59130ba/pipewire.log)
[pipewire-pulse.log](/uploads/eba210731e443648407a246cbf92e404/pipewire-pulse.log)
[wireplumber.log](/uploads/133972fe7b7b763e8bdd59f72521521e/wireplumber.log)
Thanks and best regards.https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3460Regex in rules does not seem to support negative lookahead - can't match "any...2023-09-06T13:42:13ZpallasweptRegex in rules does not seem to support negative lookahead - can't match "anything except for foobar"<!-- If you are filing this issue with a regular release please try master as it might already be fixed. -->
- PipeWire version (`pipewire --version`):
pipewire
Compiled with libpipewire 0.3.77
Linked with libpipewire 0.3.77
- Distribut...<!-- If you are filing this issue with a regular release please try master as it might already be fixed. -->
- PipeWire version (`pipewire --version`):
pipewire
Compiled with libpipewire 0.3.77
Linked with libpipewire 0.3.77
- Distribution and distribution version (`PRETTY_NAME` from `/etc/os-release`):
PRETTY_NAME="openSUSE Tumbleweed"
- Desktop Environment:
KDE Plasma
- Kernel version (`uname -r`):
6.4.11-1-default
## Description of Problem:
My intention is to route certain applications to certain virtual sinks (so that I can separate them in OBS recordings by using those virtual devices as OBS sources)
I wanted to create a rule that matched "everything but obs", and eventually "match everything except for any of these apps", which I'd generally do by using a negative lookahead, but no matter how I tried, I couldn't get it to work. For example, something like:
`application.process.binary = "~^(?!obs$|neverroutethis$).*"`
Should match everything except 'obs' or 'neverroutethis'. In effect, it will still match obs.
Simpler regex has a similar effect, to give one example:
`application.process.binary = "~(?!obs$)"`
Naturally, I hit the search engines for methods to regex match 'everything except foo', and I tried them all, in case it's just that my regex sucked, but nothing worked. The same regex which worked well in other apps such as grep or sed did not work in pipewire rules.
I'm working around this with a rule that matches obs and takes no action, and then another rule afterwards which matches everything and takes the actions intended:
```
context.rules = [
{
matches = [
{
# all keys must match the value. ~ starts regex.
application.process.binary = "obs"
}
]
actions = {
}
}
{
matches = [
{
# all keys must match the value. ~ starts regex.
application.name = "~.*"
}
]
actions = {
update-props = {
target.object = "Default Media Bus In"
}
}
}
]
```
This works, but could get a little messy as my list of "don't match this app" grows, and it would be nice to have a single rule doing the job of these two.
## How Reproducible:
100%
### Steps to Reproduce:
1. Attempt to create a rule that matches everything except for certain strings by using regex negative lookahead or any other means of regex negation
2. Note that the rule does not function as intended, the negated portion is not excluded from the match.
### Actual Results:
Matches string which are excluded by means of negative looahead/lookbehind/other negation methods
### Expected Results:
Negation of match string functions as expected and action is not taken
# Additional Info (as attachments):
I'm very much satisfied with a "you're doing it wrong" response which might suggest another means to achieve a match such as
application.name = "anything except foo, or bar, or baz"https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3458Bug with changing profiles of audio sinks2023-08-23T09:49:27ZoffendoBug with changing profiles of audio sinks<!-- If you are filing this issue with a regular release please try master as it might already be fixed. -->
- PipeWire version (`pipewire --version`): 0.3.77
- Distribution and distribution version (`PRETTY_NAME` from `/etc/os-release`...<!-- If you are filing this issue with a regular release please try master as it might already be fixed. -->
- PipeWire version (`pipewire --version`): 0.3.77
- Distribution and distribution version (`PRETTY_NAME` from `/etc/os-release`): Manjaro Linux
- Desktop Environment: KDE
- Kernel version (`uname -r`): 5.15.125-1-MANJARO
## Description of Problem:
When I swap profiles for my current sink (analog -> digital or backwards --- this is how I swap between headphones and speakers), it adds an additional sink instead of swapping the existing one, and also prevents any volume changes.
This only broke on 0.3.77; downgrading pipewire to 0.3.75-2 fixes the issue (note: I also downgraded wireplumber/pipewire-pulse to the previous versions 0.4.13-1 and 0.3.75-2. To be honest I don't know which package does what, so I just downgraded them all.).
## How Reproducible:
I was able to do this consistently.
### Steps to Reproduce:
1. In the volume applet in the KDE plasma bar, select a sink with both analog and digital profiles available.
2. Swap between the two following the video.
3. Notice that there are multiple copies of the same sink which are essentially useless.
### Actual Results:
See videos:
![bug](/uploads/ef4dfc7f819fcc332f8085fc5c3e5208/bug.mp4)
### Expected Results:
![correct](/uploads/862b585bd4d51078866466cfc5077151/correct.mp4)
# Additional Info (as attachments):
- `pw-dump > pw-dump.log`:https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3456pacmd load-module module-alsa-source device = equivalent?2023-08-23T09:50:23Zprivacyguy123pacmd load-module module-alsa-source device = equivalent?```pacmd load-module module-alsa-source device=hw:2,0```
What is the equivalent to this in Pipewire? I have read the Wiki and Googled around and can't find a definitive answer.```pacmd load-module module-alsa-source device=hw:2,0```
What is the equivalent to this in Pipewire? I have read the Wiki and Googled around and can't find a definitive answer.https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3455"Null" device used to be there and now it isn't2023-08-21T19:00:24Zprivacyguy123"Null" device used to be there and now it isn'tHere is my conf
```
# Daemon config file for PipeWire version "0.3.65" #
#
# Copy and edit this file in /etc/pipewire for system-wide changes
# or in ~/.config/pipewire for local changes.
#
# It is also possible to place a file with an ...Here is my conf
```
# Daemon config file for PipeWire version "0.3.65" #
#
# Copy and edit this file in /etc/pipewire for system-wide changes
# or in ~/.config/pipewire for local changes.
#
# It is also possible to place a file with an updated section in
# /etc/pipewire/pipewire.conf.d/ for system-wide changes or in
# ~/.config/pipewire/pipewire.conf.d/ for local changes.
#
context.properties = {
## Configure properties in the system.
#library.name.system = support/libspa-support
#context.data-loop.library.name.system = support/libspa-support
#support.dbus = true
#link.max-buffers = 64
link.max-buffers = 16 # version < 3 clients can't handle more
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
#clock.power-of-two-quantum = true
#log.level = 2
#cpu.zero.denormals = false
core.daemon = true # listening for socket connections
core.name = pipewire-0 # core name and socket name
## Properties for the DSP configuration.
#default.clock.rate = 44100
default.clock.allowed-rates = [ 44100 48000 88200 96000 176400 192000 ]
#default.clock.quantum = 1024
default.clock.min-quantum = 16
#default.clock.max-quantum = 2048
#default.clock.quantum-limit = 8192
#default.video.width = 640
#default.video.height = 480
#default.video.rate.num = 25
#default.video.rate.denom = 1
#
settings.check-quantum = true
settings.check-rate = true
#
# These overrides are only applied when running in a vm.
vm.overrides = {
default.clock.min-quantum = 1024
}
}
context.spa-libs = {
#<factory-name regex> = <library-name>
#
# Used to find spa factory names. It maps an spa factory name
# regular expression to a library name that should contain
# that factory.
#
audio.convert.* = audioconvert/libspa-audioconvert
avb.* = avb/libspa-avb
api.alsa.* = alsa/libspa-alsa
api.v4l2.* = v4l2/libspa-v4l2
api.libcamera.* = libcamera/libspa-libcamera
api.bluez5.* = bluez5/libspa-bluez5
api.vulkan.* = vulkan/libspa-vulkan
api.jack.* = jack/libspa-jack
support.* = support/libspa-support
#videotestsrc = videotestsrc/libspa-videotestsrc
#audiotestsrc = audiotestsrc/libspa-audiotestsrc
}
context.modules = [
#{ name = <module-name>
# [ args = { <key> = <value> ... } ]
# [ flags = [ [ ifexists ] [ nofail ] ]
#}
#
# Loads a module with the given parameters.
# If ifexists is given, the module is ignored when it is not found.
# If nofail is given, module initialization failures are ignored.
#
# Uses realtime scheduling to boost the audio thread priorities. This uses
# RTKit if the user doesn't have permission to use regular realtime
# scheduling.
{ name = libpipewire-module-rt
args = {
nice.level = -11
#rt.prio = 88
#rt.time.soft = -1
#rt.time.hard = -1
}
flags = [ ifexists nofail ]
}
# The native communication protocol.
{ name = libpipewire-module-protocol-native }
# The profile module. Allows application to access profiler
# and performance data. It provides an interface that is used
# by pw-top and pw-profiler.
{ name = libpipewire-module-profiler }
# Allows applications to create metadata objects. It creates
# a factory for Metadata objects.
{ name = libpipewire-module-metadata }
# Creates a factory for making devices that run in the
# context of the PipeWire server.
{ name = libpipewire-module-spa-device-factory }
# Creates a factory for making nodes that run in the
# context of the PipeWire server.
{ name = libpipewire-module-spa-node-factory }
# Allows creating nodes that run in the context of the
# client. Is used by all clients that want to provide
# data to PipeWire.
{ name = libpipewire-module-client-node }
# Allows creating devices that run in the context of the
# client. Is used by the session manager.
{ name = libpipewire-module-client-device }
# The portal module monitors the PID of the portal process
# and tags connections with the same PID as portal
# connections.
{ name = libpipewire-module-portal
flags = [ ifexists nofail ]
}
# The access module can perform access checks and block
# new clients.
{ name = libpipewire-module-access
args = {
# access.allowed to list an array of paths of allowed
# apps.
#access.allowed = [
# /usr/bin/pipewire-media-session
#]
# An array of rejected paths.
#access.rejected = [ ]
# An array of paths with restricted access.
#access.restricted = [ ]
# Anything not in the above lists gets assigned the
# access.force permission.
#access.force = flatpak
}
}
# Makes a factory for wrapping nodes in an adapter with a
# converter and resampler.
{ name = libpipewire-module-adapter }
# Makes a factory for creating links between ports.
{ name = libpipewire-module-link-factory }
# Provides factories to make session manager objects.
{ name = libpipewire-module-session-manager }
# Use libcanberra to play X11 Bell
{ name = libpipewire-module-x11-bell
args = {
#sink.name = ""
#sample.name = "bell-window-system"
#x11.display = null
#x11.xauthority = null
}
flags = [ ifexists nofail ]
}
}
]
context.objects = [
#{ factory = <factory-name>
# [ args = { <key> = <value> ... } ]
# [ flags = [ [ nofail ] ]
#}
#
# Creates an object from a PipeWire factory with the given parameters.
# If nofail is given, errors are ignored (and no object is created).
#
#{ factory = spa-node-factory args = { factory.name = videotestsrc node.name = videotestsrc Spa:Pod:Object:Param:Props:patternType = 1 } }
#{ factory = spa-device-factory args = { factory.name = api.jack.device foo=bar } flags = [ nofail ] }
#{ factory = spa-device-factory args = { factory.name = api.alsa.enum.udev } }
#{ factory = spa-node-factory args = { factory.name = api.alsa.seq.bridge node.name = Internal-MIDI-Bridge } }
#{ factory = adapter args = { factory.name = audiotestsrc node.name = my-test } }
#{ factory = spa-node-factory args = { factory.name = api.vulkan.compute.source node.name = my-compute-source } }
# A default dummy driver. This handles nodes marked with the "node.always-driver"
# property when no other driver is currently active. JACK clients need this.
{ factory = spa-node-factory
args = {
factory.name = support.node.driver
node.name = Dummy-Driver
node.group = pipewire.dummy
priority.driver = 20000
}
}
{ factory = spa-node-factory
args = {
factory.name = support.node.driver
node.name = Freewheel-Driver
priority.driver = 19000
node.group = pipewire.freewheel
node.freewheel = true
}
}
# This creates a new Source node. It will have input ports
# that you can link, to provide audio for this source.
#{ factory = adapter
# args = {
# factory.name = support.null-audio-sink
# node.name = "my-mic"
# node.description = "Microphone"
# media.class = "Audio/Source/Virtual"
# audio.position = "FL,FR"
# }
#}
# This creates a single PCM source device for the given
# alsa device path hw:0. You can change source to sink
# to make a sink in the same way.
#{ factory = adapter
# args = {
# factory.name = api.alsa.pcm.source
# node.name = "alsa-source"
# node.description = "PCM Source"
# media.class = "Audio/Source"
# api.alsa.path = "hw:0,0"
# api.alsa.period-size = 1024
# api.alsa.headroom = 0
# api.alsa.disable-mmap = false
# api.alsa.disable-batch = false
# audio.format = "S16LE"
# audio.rate = 48000
# audio.channels = 2
# audio.position = "FL,FR"
#}
#}
{ factory = adapter
args = {
factory.name = support.null-audio-sink
node.name = "Null"
media.class = Audio/Sink
object.linger = true
audio.position = [ FL FR ]
}
}
]
context.exec = [
#{ path = <program-name> [ args = "<arguments>" ] }
#
# Execute the given program with arguments.
#
# You can optionally start the session manager here,
# but it is better to start it as a systemd service.
# Run the session manager with -h for options.
#
#{ path = "/usr/bin/pipewire-media-session" args = "" }
#
# You can optionally start the pulseaudio-server here as well
# but it is better to start it as a systemd service.
# It can be interesting to start another daemon here that listens
# on another address with the -a option (eg. -a tcp:4713).
#
#{ path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" }
]
```https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3454pw_time queued/buffered information is incorrect with respect to the document...2023-09-06T13:42:12ZGeorge Kiagiadakispw_time queued/buffered information is incorrect with respect to the documentationI was recently trying to write an audio playback stream implementation, using `pw_stream`, that required precise timing information for network sync and I found some odd thing about what information is reported in `pw_time` (and `pw_buff...I was recently trying to write an audio playback stream implementation, using `pw_stream`, that required precise timing information for network sync and I found some odd thing about what information is reported in `pw_time` (and `pw_buffer->requested`).
To reproduce the issue I was seeing, I modified the `audio-src` example [here](https://gitlab.freedesktop.org/gkiagia/pipewire/-/commit/8fbd4e887f0b433e5a1e86a75bc09e57c373400f). The following output was all generated using this modified example. Here is how streaming begins:
```
[I][96531.420719] pw.node | [ impl-node.c: 407 node_update_state()] (node-63) suspended -> running
[I][96531.472547] pw.node | [ impl-node.c: 1911 node_xrun()] (node-63) XRun! rate:0/0 count:1 time:0 delay:0 max:0 (0 missed)
[I][96531.472602] default | [ audio-src.c: 87 on_process()] XRun! resync, data->outputSample += 940
[I][96531.472627] default | [ audio-src.c: 92 on_process()] process, b.req 973, s.ticks 1024, sample(our) 940, sample(dr) 940,
s.buf 32, s.queued 0, queued (real) 0, s.delay 5120
[I][96531.579713] default | [ audio-src.c: 92 on_process()] process, b.req 150, s.ticks 2048, sample(our) 2704, sample(dr) 1881,
s.buf 32, s.queued 0, queued (real) 823, s.delay 5120
[I][96531.622102] default | [ audio-src.c: 92 on_process()] process, b.req 268, s.ticks 4096, sample(our) 4468, sample(dr) 3763,
s.buf 32, s.queued 0, queued (real) 705, s.delay 5120
[I][96531.679839] default | [ audio-src.c: 92 on_process()] process, b.req 385, s.ticks 6144, sample(our) 6232, sample(dr) 5644,
s.buf 32, s.queued 0, queued (real) 588, s.delay 5120
[I][96531.722153] default | [ audio-src.c: 92 on_process()] process, b.req 503, s.ticks 8192, sample(our) 7996, sample(dr) 7526,
s.buf 32, s.queued 0, queued (real) 470, s.delay 5120
[I][96531.763450] default | [ audio-src.c: 92 on_process()] process, b.req 621, s.ticks 10240, sample(our) 9760, sample(dr) 9408,
s.buf 32, s.queued 0, queued (real) 352, s.delay 5120
```
Here we see an async stream running at 44100 rate, with a buffer size of 1764 samples (40ms). Every time `process` is called, it ignores the `pw_buffer->requested` size and just queues another 1764 samples. The driver is running at 48000 rate with a buffer size of 1024 (21.3ms).
In order to make a timeline of samples, the application uses `pw_time->ticks` and converts it to the stream's sample rate. So, when the driver reports `pw_time->ticks (s.ticks) = 1024`, the next sample we are writing is `sample(dr) = 940` (because 940/44100 = 1024/48000). Then at `s.ticks = 2048`, `sample(dr) = 1881` and so on. This is consistent with the time that the driver wakes up this stream to queue more data, which is 1 cycle before the stream underruns (since it's not a RT stream).
This is, however, not consistent with how many samples have been queued. This is reasonable and expected. At sample 940 we queue 1764 more samples, so the next sample to start from would be `940+1764 = 2704`. There is therefore a difference between the next sample number that we are supposed to write (`sample(our) = 2704`) and the sample that the driver is currently at (`sample(dr) = 1881`). This difference is conceivably how many samples are still queued in the audioconverter but have not been pulled by the driver yet.
I would therefore expect, as per the documentation, to be able to find this number by adding up `pw_time->queued` and `pw_time->buffered`, but this does not work. At `s.ticks = 2048`, we can see that `pw_time->queued (s.queued)` is 0 and `pw_time->buffered (s.buf)` is 32. In fact, this is ALWAYS the case. I understand that `pw_time->queued` is expected to be 0 at this point, because the pw_stream buffer that was originally pushed (containing 1764 samples) has been consumed internally by the audioconverter, so there is nothing queued. But why is `pw_time->buffered` always 32 ? This is documented to report exactly the latency of the audioconverter, so I would expect to be able to find this difference here.
I ended up calculating this number manually (see "queued (real)") by counting how many samples I push and taking the difference from the driver's current sample.
Then another interesting thing is `pw_buffer->requested`... This is documented as "the suggested amount of data to write" and "the amount of samples required by the resampler". The numbers that I see in the log (see `b.req`) don't make any sense to me, but notice how `b.req + queued(real) = 973` all the time. It must be that the stream has some kind of internal quantum at 973 samples (not sure where this number comes from), and it accurately knows how many samples are missing to fill that, but it doesn't report the fill level in `pw_time->buffered`.
PS: Another, totally unrelated issue that you can see in this log is that the stream begins with an XRun. This seems to be always the case for async streams.https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3453aptX-LL Duplex profile missing for Ankbit E7002023-08-24T11:51:44ZTom VincentaptX-LL Duplex profile missing for Ankbit E700Along the same lines as #1883, I do not see duplex profile for aptX-LL for the Ankbit E700 headphones.
aptX LL, aptX HD, LDAC etc. all are correctly listed and functional output profiles.
`avinfo` shows "Bidirectional link: No" - is th...Along the same lines as #1883, I do not see duplex profile for aptX-LL for the Ankbit E700 headphones.
aptX LL, aptX HD, LDAC etc. all are correctly listed and functional output profiles.
`avinfo` shows "Bidirectional link: No" - is this definitive?
```
Connecting ...
Stream End-Point #10: Audio Sink
Media Codec: Vendor Specific A2DP Codec
Vendor ID 0x0000012d
Vendor Specific Codec ID 0x00aa
Vendor Specific Data: 0x3c 0x07
Vendor Specific Value (LDAC)
Frequencies: 44.1kHz 48kHz 88.2kHz 96kHz
Channel modes: Mono Dual Stereo
Content Protection: SCMS-T
Stream End-Point #8: Audio Sink
Media Codec: Vendor Specific A2DP Codec
Vendor ID 0x000000d7
Vendor Specific Codec ID 0x0002
Vendor Specific Data: 0x32 0x02 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
Content Protection: SCMS-T
Stream End-Point #6: Audio Sink
Media Codec: Vendor Specific A2DP Codec
Vendor ID 0x0000000a
Vendor Specific Codec ID 0x0002
Vendor Specific Data: 0x32 0x02 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
Vendor Specific Value (aptX Low Latency)
Frequencies: 44.1kHz 48kHz
Channel modes: Stereo
Bidirectional link: No
Target codec buffer level: 0
Initial codec buffer level: 0
SRA max rate: 0
SRA averaging time: 0s
Good working codec buffer level: 0
Content Protection: SCMS-T
Stream End-Point #7: Audio Sink
Media Codec: Vendor Specific A2DP Codec
Vendor ID 0x000000d7
Vendor Specific Codec ID 0x0024
Vendor Specific Data: 0x32 0x00 0x00 0x00 0x00
Vendor Specific Value (aptX HD)
Frequencies: 44.1kHz 48kHz
Channel modes: Stereo
Content Protection: SCMS-T
Stream End-Point #5: Audio Sink
Media Codec: Vendor Specific A2DP Codec
Vendor ID 0x0000004f
Vendor Specific Codec ID 0x0001
Vendor Specific Data: 0x32
Vendor Specific Value (aptX)
Frequencies: 44.1kHz 48kHz
Channel modes: Stereo
Content Protection: SCMS-T
Stream End-Point #3: Audio Sink
Media Codec: MPEG24
Object Types: MPEG-2 AAC LC MPEG-4 AAC LC
Frequencies: 8kHz 11.025kHz 12kHz 16kHz 22.05kHz 24kHz 32kHz 44.1kHz 48kHz
Channels: 1 2
Bitrate: 320000
VBR: Yes
Content Protection: SCMS-T
Stream End-Point #1: Audio Sink
Media Codec: SBC
Channel Modes: Mono DualChannel Stereo JointStereo
Frequencies: 16Khz 32Khz 44.1Khz 48Khz
Subbands: 4 8
Blocks: 4 8 12 16
Bitpool Range: 2-53
Content Protection: SCMS-T
```
[pipewire-bluez.log](/uploads/237c9455ff401e317bf9f55e914db65c/pipewire-bluez.log)
pipewire 1:0.3.77-2
Linux 6.4.10 (Arch Linux)https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3448LFE channel fails to mix in various ways2023-08-24T19:00:30ZpallasweptLFE channel fails to mix in various ways<!-- If you are filing this issue with a regular release please try master as it might already be fixed. -->
## Description of Problem:
Please refer to https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3435
In order to work aa...<!-- If you are filing this issue with a regular release please try master as it might already be fixed. -->
## Description of Problem:
Please refer to https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3435
In order to work aaround the failure of the mix-lfe param, I was attempting to create a filter that would emulate the behaviour.
I tried a mix, where the LFE channel is mixed into every other channel:
```
{ name = libpipewire-module-filter-chain
args = {
node.name = Sony-Pro-Wrap
node.description = "Sony TV Pro Wrapper"
filter.graph = {
nodes = [
{
name = mixfl
type = builtin
label = mixer
control = {
"Gain 1" = 1.0
"Gain 2" = 0.0
"Gain 3" = 0.0
"Gain 4" = 1.0
"Gain 5" = 0.0
"Gain 6" = 0.0
}
}
{
name = mixfr
type = builtin
label = mixer
control = {
"Gain 1" = 0.0
"Gain 2" = 1.0
"Gain 3" = 0.0
"Gain 4" = 1.0
"Gain 5" = 0.0
"Gain 6" = 0.0
}
}
{
type = builtin
name = mixfc
label = mixer
control = {
"Gain 1" = 0.0
"Gain 2" = 0.0
"Gain 3" = 1.0
"Gain 4" = 1.0
"Gain 5" = 0.0
"Gain 6" = 0.0
}
}
{
type = builtin
name = mixlf
label = mixer
control = {
"Gain 1" = 0.0
"Gain 2" = 0.0
"Gain 3" = 0.0
"Gain 4" = 1.0
"Gain 5" = 0.0
"Gain 6" = 0.0
}
}
{
type = builtin
name = mixrl
label = mixer
control = {
"Gain 1" = 0.0
"Gain 2" = 0.0
"Gain 3" = 0.0
"Gain 4" = 1.0
"Gain 5" = 1.0
"Gain 6" = 0.0
}
}
{
type = builtin
name = mixrr
label = mixer
control = {
"Gain 1" = 0.0
"Gain 2" = 0.0
"Gain 3" = 0.0
"Gain 4" = 1.0
"Gain 5" = 0.0
"Gain 6" = 1.0
}
}
]
inputs = [ "mixfl:In 1" "mixfr:In 2" "mixfc:In 3" "mixlf:In 4" "mixrl:In 5" "mixrr:In 6" ]
outputs = [ "mixrl:Out" "mixrr:Out" "mixfl:Out" "mixfr:Out" "mixfc:Out" "mixlf:Out" ]
}
capture.props = {
node.name = Sony-Pro-Wrap
node.description = "Sony TV Pro Wrapper"
audio.position = [ FL FR FC LFE RL RR ]
media.class = "Audio/Sink"
}
playback.props = {
node.name = Sony-Pro-Wrap
audio.position = [ RL RR FL FR FC LFE ]
stream.dont-remix = true
node.passive = true
target.object = "alsa_output.pci-0000_07_00.1.pro-output-7"
}
}
}
```
This fails. It does work if you only have FR and FL channels. Once you have over 2 channels, the LFE channel is never mixed. Manually patching the output it is audible.
Using the combine stream filter works like a charm:
``` { name = libpipewire-module-combine-stream
args = {
combine.mode = sink
node.name = "Sony-Pro-Wrap"
node.description = "Sony TV Pro Wrapper"
combine.latency-compensate = false
combine.props = {
audio.position = [ FL FR FC LFE RL RR ]
}
node.passive = true
stream.props = {
audio.position = [ AUX0 AUX1 AUX2 AUX3 AUX4 AUX5 ]
channelmix.upmix = false
channelmix.upmix-method = none
stream.dont-remix = true
channelmix.normalize = false
## only "psd", "none" or "simple" values are accepted
channelmix.upmix-method = "none"
channelmix.lfe-cutoff = 1000
channelmix.fc-cutoff = 20000
channelmix.mix-lfe = false
channelmix.rear-delay = 0.0
channelmix.stereo-widen = 0.0
channelmix.hilbert-taps = 0
}
stream.rules = [
{
matches = [ { node.name = "alsa_output.pci-0000_07_00.1.pro-output-7" } ]
actions = {
create-stream = {
combine.audio.position = [ FL FR FC RL RR ]
audio.position = [ AUX2 AUX3 AUX4 AUX0 AUX1 ]
}
}
}
# {
# matches = [ { node.name = "alsa_output.pci-0000_07_00.1.pro-output-7" } ]
# actions = {
# create-stream = {
# combine.audio.position = [ RL RR ]
# audio.position = [ AUX0 AUX1 ]
# }
# }
# }
# {
# matches = [ { node.name = "alsa_output.pci-0000_07_00.1.pro-output-7" } ]
# actions = {
# create-stream = {
# combine.audio.position = [ FC ]
# audio.position = [ AUX4 ]
# }
# }
# }
{
matches = [ { node.name = "alsa_output.pci-0000_07_00.1.pro-output-7" } ]
actions = {
create-stream = {
combine.audio.position = [ LFE ]
audio.position = [ AUX0 ]
}
}
}
{
matches = [ { node.name = "alsa_output.pci-0000_07_00.1.pro-output-7" } ]
actions = {
create-stream = {
combine.audio.position = [ LFE ]
audio.position = [ AUX1 ]
}
}
}
{
matches = [ { node.name = "alsa_output.pci-0000_07_00.1.pro-output-7" } ]
actions = {
create-stream = {
combine.audio.position = [ LFE ]
audio.position = [ AUX2 ]
}
}
}
{
matches = [ { node.name = "alsa_output.pci-0000_07_00.1.pro-output-7" } ]
actions = {
create-stream = {
combine.audio.position = [ LFE ]
audio.position = [ AUX3 ]
}
}
}
{
matches = [ { node.name = "alsa_output.pci-0000_07_00.1.pro-output-7" } ]
actions = {
create-stream = {
combine.audio.position = [ LFE ]
audio.position = [ AUX4 ]
}
}
}
]
}
}
```
## How Reproducible:
100% LFE mixing is broken
### Steps to Reproduce:
1. Want to hear LFE without a dedicated LFE transducer by using full-range speakers (mine are connected via HDMI to a TV and then out to the amp, in case you're wondering about the weird channel mapping)
2. Use mix-lfe, be sad because it doesn't work
3. Try to use mixer filter chains and still be sad because they also don't work
4. Be sad because they don't work. Spend days trying different combinations of settings.
5. Use combine filter and it is the only way it works
### Actual Results:
Using the combine filter as a workaround
### Expected Results:
channelmix.mix-lfe works as described in the documentation.
Mixer filter works if trying to mix LFE channel into >2 channels
Not needing this combine abomination with 6 inputs, 6 monitor outs, 5 playback outputs, plus 5 separate single playback outputs, all manually mapped to the appropriate channels, crowding up my graph and my config files XDhttps://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3446Cannot connect to Sennheiser Sport True Wireless2024-01-13T11:47:31ZAndreï KostyrkaCannot connect to Sennheiser Sport True Wireless- PipeWire version 0.3.77
- Arch Linux
- Desktop Environment: KDE Plasma 5.27.7
- Kernel version 6.1.45-1-lts
- BlueZ version 5.68
- `lsusb`:
```
Bus 002 Device 003: ID 0bda:0328 Realtek Semiconductor Corp. USB3.0-CRW
Bus 002 Device 002...- PipeWire version 0.3.77
- Arch Linux
- Desktop Environment: KDE Plasma 5.27.7
- Kernel version 6.1.45-1-lts
- BlueZ version 5.68
- `lsusb`:
```
Bus 002 Device 003: ID 0bda:0328 Realtek Semiconductor Corp. USB3.0-CRW
Bus 002 Device 002: ID 0bda:0411 Realtek Semiconductor Corp. Hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 007: ID 10d7:b012 Actions general adapter
Bus 001 Device 005: ID 0bda:5411 Realtek Semiconductor Corp. RTS5411 Hub
Bus 001 Device 004: ID 413c:301d Dell Computer Corp. Dell Universal Receiver
Bus 001 Device 003: ID 046d:085b Logitech, Inc. Logitech Webcam C925e
Bus 001 Device 002: ID 413c:2113 Dell Computer Corp. KB216 Wired Keyboard
Bus 001 Device 006: ID 413c:301a Dell Computer Corp. Dell MS116 Optical Mouse
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
```
- Bluetooth devices:
```
Device 80:C3:BA:34:4A:D6 Sport True Wireless
```
Bluetooth device info:
```
Address: 80:C3:BA:34:4A:D6
AddressType: public
Name: Sport True Wireless
Alias: Sport True Wireless
Class: 0x2c0404
Appearance: 0x0000
Icon: audio-headset
Paired: yes
Trusted: yes
Blocked: no
LegacyPairing: no
Connected: yes
UUIDs:
00001101-0000-1000-8000-00805f9b34fb Serial Port
0000110a-0000-1000-8000-00805f9b34fb Audio Source
0000110b-0000-1000-8000-00805f9b34fb Audio Sink
0000110c-0000-1000-8000-00805f9b34fb Remote Control Target
0000110e-0000-1000-8000-00805f9b34fb Remote Control
0000111e-0000-1000-8000-00805f9b34fb Handsfree
0000eb03-d102-11e1-9b23-00025b00a5a5 Proprietary
0000eb04-d102-11e1-9b23-00025b00a5a5 Proprietary
0000eb05-d102-11e1-9b23-00025b00a5a5 Proprietary
a2129ff3-081b-4c45-8afe-469d9c4842eb Proprietary
Adapter:
/org/bluez/hci0
```
Adapter info obtained through `btmgmt extinfo`:
```
Extended index list with 1 item
Primary controller (hci0,USB)
hci0: Primary controller
addr F4:4E:FC:88:7B:78 version 12 manufacturer 992
supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr le advertising secure-conn debug-keys privacy static-addr phy-configuration
current settings: powered bondable ssp br/edr le secure-conn
```
## Description of Problem:
I want to connect to connect to my Sennheiser Sport True Wireless (CX200TW1). They work perfectly with my Samsung Galaxy S10.
Upon connection attempt, `blueman-manager` is reporting: `Connection Failed: br-connection-canceled`. However, after a second, it says, ‘Connected’, and the tray icon colour changes to blue. The earbuds are not playing any connection sound.
I am using EasyEffects to equalise the sound of the loudspeaker connected via audio cable to the Line Out. My computer has internal speakers, too; when nothing is inserted into the line out port, it plays music through these low-quality internal speakers.
`pavucontrol` shows that the output device is ‘Easy Effects Sink’. In EasyEffects settings, there is only one output device: ‘Built-in Audio Analog Stereo’.
The ‘Audio Volume’ system setting in KDE shows only one output device: line out. When I physically disconnect the cable, the sound stars playing through the built-in speakers, and the only playback device becomes ‘Speakers’, with 3 profiles: Analog Stereo Duplex, Analog Stereo Output, Pro Audio. Switching between them has no effect.
`rfkill` says that the device is unblocked:
```
ID TYPE DEVICE SOFT HARD
0 bluetooth hci0 unblocked unblocked
```
`sudo dmesg | grep -i bluetooth` has something, too:
```
[ 19.604560] Bluetooth: Core ver 2.22
[ 19.604580] NET: Registered PF_BLUETOOTH protocol family
[ 19.604581] Bluetooth: HCI device and connection manager initialized
[ 19.604584] Bluetooth: HCI socket layer initialized
[ 19.604586] Bluetooth: L2CAP socket layer initialized
[ 19.604589] Bluetooth: SCO socket layer initialized
[ 19.662011] Bluetooth: hci0: HCI Read Default Erroneous Data Reporting command is advertised, but not supported.
[ 19.662017] Bluetooth: hci0: HCI Read Transmit Power Level command is advertised, but not supported.
[ 19.662020] Bluetooth: hci0: HCI LE Set Random Private Address Timeout command is advertised, but not supported.
[ 19.746164] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 19.746170] Bluetooth: BNEP filters: protocol multicast
[ 19.746180] Bluetooth: BNEP socket layer initialized
[ 19.748452] Bluetooth: MGMT ver 1.22
[ 32.341735] Bluetooth: RFCOMM TTY layer initialized
[ 32.341746] Bluetooth: RFCOMM socket layer initialized
[ 32.341750] Bluetooth: RFCOMM ver 1.11
```
Finally, the `bluetooth` service is running, but some connections were refused:
```
● bluetooth.service - Bluetooth service
Loaded: loaded (/usr/lib/systemd/system/bluetooth.service; enabled; preset: disabled)
Active: active (running) since Thu 2023-08-17 22:36:07 CEST; 25min ago
Docs: man:bluetoothd(8)
Main PID: 1059 (bluetoothd)
Status: "Running"
Tasks: 1 (limit: 152883)
Memory: 3.3M
CPU: 336ms
CGroup: /system.slice/bluetooth.service
└─1059 /usr/lib/bluetooth/bluetoothd
Aug 17 22:36:20 UL0012159 bluetoothd[1059]: Endpoint registered: sender=:1.52 path=/MediaEndpoint/A2DPSource/opus_05_duplex
Aug 17 22:36:28 UL0012159 bluetoothd[1059]: src/profile.c:ext_connect() Hands-Free Voice gateway failed connect to 80:C3:BA:34:4A:D6: Conne>
Aug 17 22:43:36 UL0012159 bluetoothd[1059]: src/profile.c:ext_connect() Hands-Free Voice gateway failed connect to 80:C3:BA:34:4A:D6: Conne>
Aug 17 22:44:17 UL0012159 bluetoothd[1059]: profiles/audio/avdtp.c:avdtp_connect_cb() connect to 80:C3:BA:34:4A:D6: Connection refused (111)
Aug 17 22:44:17 UL0012159 bluetoothd[1059]: src/service.c:btd_service_connect() a2dp-source profile connect failed for 80:C3:BA:34:4A:D6: D>
Aug 17 22:45:00 UL0012159 bluetoothd[1059]: profiles/audio/avdtp.c:avdtp_connect_cb() connect to 80:C3:BA:34:4A:D6: Connection refused (111)
Aug 17 22:54:35 UL0012159 bluetoothd[1059]: src/profile.c:ext_connect() Hands-Free Voice gateway failed connect to 80:C3:BA:34:4A:D6: Conne>
Aug 17 22:55:16 UL0012159 bluetoothd[1059]: profiles/audio/avdtp.c:avdtp_connect_cb() connect to 80:C3:BA:34:4A:D6: Connection refused (111)
Aug 17 22:55:16 UL0012159 bluetoothd[1059]: src/service.c:btd_service_connect() a2dp-source profile connect failed for 80:C3:BA:34:4A:D6: D>
Aug 17 22:55:59 UL0012159 bluetoothd[1059]: profiles/audio/avdtp.c:avdtp_connect_cb() connect to 80:C3:BA:34:4A:D6: Connection refused (111)
```
## How Reproducible:
### Steps to Reproduce:
1. Tried every step from the ‘Bluetooth Headset’ Arch wiki page (restarting the service,) – won’t work.
2. Tried `remove` and `connect` from `bluetoothctl` – does not work.
3. Tried restarting the bluetooth service (`sudo systemctl restart bluetooth.service`) – nothing.
4. Tried
```
pactl load-module module-switch-on-connect
pactl list sinks
```
but the only available sink is
```
Name: alsa_output.pci-0000_00_1f.3.analog-stereo.4
Description: Built-in Audio Analog Stereo
Driver: PipeWire
```
6. Tried restarting `systemctl --user restart pipewire pipewire-pulse.service`, but it still plays through the line out or built-in speakers.
7. There are no `pulseaudio` services because I do not have PA installed (it conflicts with PW). However, this pair of earbuds works with a Lenovo Legion laptop with Linux Mint 21.2 and connects to Bluetooth without a hindrance (PulseAudio). This means that these buds work well with Linux via Bluetooth through PulseAudio.
### Actual Results:
### Expected Results:
# Additional Info (as attachments):
- `pw-dump > pw-dump.log`:
[pw-dump.log](/uploads/4c11b4f6c7957b65aa6665ad03bae14f/pw-dump.log)
- Bluetooth debug log (tried pairing with the earbugs – never succeeded after 2 attempts):
[pipewire-bluez.log](/uploads/d0515dcb559043edb99c89752bf3c8ff/pipewire-bluez.log)
- Here is the output of `qpwgraph` when `blueman-manager` says that the ‘Sport True Wireless’ headset is connected:
![2023-08-17_23-21-fs8](/uploads/6d0489ecb0fb64435567000b76895a4c/2023-08-17_23-21-fs8.png)https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3444unable to configure large period on batch device2023-09-06T13:42:12ZGeorge Kiagiadakisunable to configure large period on batch deviceI am trying to setup a batch device at 192000 Hz with a period bigger than 1024 (~5ms at this rate), but it turns out that I can't do that. This is because of:
https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/spa/plugins/al...I am trying to setup a batch device at 192000 Hz with a period bigger than 1024 (~5ms at this rate), but it turns out that I can't do that. This is because of:
https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/spa/plugins/alsa/alsa-pcm.c#L1664
```
if (!state->disable_tsched)
period_size = SPA_MIN(period_size, DEFAULT_PERIOD) / 2;
```
where DEFAULT_PERIOD is 1024. I think this limit here assumes that 1024 is a "big" period (thinking at 48000 rate?) and tries to set it as a ceiling. But it's marginally low at 192 kHz.Wim TaymansWim Taymanshttps://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3442Gstreamer pipewiresrc: Allow using wildcards with `target-object` property2023-09-01T09:40:59ZAntti SavolainenGstreamer pipewiresrc: Allow using wildcards with `target-object` propertyI would like to able to get a specific webcam every time, no matter which port it's plugged in. libcamera sources almost allow for this like for example `libcamera_input.__SB_.PCI0.GPP3.PTXH.RHUB-4_1.0-145f_02aa`. Substituting `4_1.0` wi...I would like to able to get a specific webcam every time, no matter which port it's plugged in. libcamera sources almost allow for this like for example `libcamera_input.__SB_.PCI0.GPP3.PTXH.RHUB-4_1.0-145f_02aa`. Substituting `4_1.0` with `*` like `pw-cli info libcamera_input.__SB_.PCI0.GPP3.PTXH.RHUB-*-145f_02aa` allows me to fetch info about that device no matter the USB port.
If I was able to use the same technique in `gst-launch-1.0 pipewiresrc target-object=libcamera_input.__SB_.PCI0.GPP3.PTXH.RHUB-*-145f_02aa`, it would help a lot.https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3441Gstremer pipewiresrc: Allow using wildcards in target-object property2023-08-17T06:42:23ZAntti SavolainenGstremer pipewiresrc: Allow using wildcards in target-object propertyI would like to able to get a specific webcam every time, no matter which port it's plugged in. libcamera sources almost allow for this like for example `libcamera_input.__SB_.PCI0.GPP3.PTXH.RHUB-4_1.0-145f_02aa`. Substituting `4_1.0` wi...I would like to able to get a specific webcam every time, no matter which port it's plugged in. libcamera sources almost allow for this like for example `libcamera_input.__SB_.PCI0.GPP3.PTXH.RHUB-4_1.0-145f_02aa`. Substituting `4_1.0` with `*` like `pw-cli info libcamera_input.__SB_.PCI0.GPP3.PTXH.RHUB-*-145f_02aa` allows me to fetch info about that device no matter the USB port.
If I was able to use the same technique in `gst-launch-1.0 pipewiresrc target-object=libcamera_input.__SB_.PCI0.GPP3.PTXH.RHUB-*-145f_02aa`, it would help a lot.https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3438clock.allowed-rates not working on scarlet 2i2 (always resampling to 48000)2023-08-15T01:19:54Zmercurieteclock.allowed-rates not working on scarlet 2i2 (always resampling to 48000)similar to #2199
- PipeWire version: 0.3.77
- Distribution and distribution version: Gentoo Linux
- Desktop Environment: KDE plasma
- Kernel version: 6.1.41-gentoo
## Description of Problem:
The whole graph is at 192000 but at the end ...similar to #2199
- PipeWire version: 0.3.77
- Distribution and distribution version: Gentoo Linux
- Desktop Environment: KDE plasma
- Kernel version: 6.1.41-gentoo
## Description of Problem:
The whole graph is at 192000 but at the end pipewire chooses a hardware format `S32P 1 48000` on a focusrite scarlett 2i2 gen 3
## How Reproducible:
100% reproducible
### Steps to Reproduce:
1. configure allow rates to: default.clock.allowed-rates = [ 48000 96000 192000]
2. configure jack to: node.rate = 1/192000
3. open audacity 3.2.5 with jack backend
4. try to record
### Actual Results:
partial result of pw-top
```
R 52 1024 192000 17,0us 0,1us 0,00 0,00 0 S32P 1 48000 alsa_input.usb-Focusrite_Scarlett_2i2_USB_Y8QZR6F0954D18-00.HiFi__scarlett2i_mono_in_USB_0_0__source
```
### Expected Results:
pw-top should report 192000 on column format to imply no resampling was needed.
# Additional Info (as attachments):
```
cat /proc/asound/card2/stream0
Focusrite Scarlett 2i2 USB at usb-0000:1f:00.3-2, high speed : USB Audio
Playback:
Status: Stop
Interface 1
Altset 1
Format: S32_LE
Channels: 2
Endpoint: 0x01 (1 OUT) (SYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000
Data packet interval: 125 us
Bits: 24
Channel map: FL FR
Capture:
Status: Running
Interface = 2
Altset = 1
Packet Size = 72
Momentary freq = 48000 Hz (0x6.0000)
Interface 2
Altset 1
Format: S32_LE
Channels: 2
Endpoint: 0x81 (1 IN) (SYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000
Data packet interval: 125 us
Bits: 24
Channel map: FL FR
```https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3436System automatically connects to bluetooth upon resume from standby2023-08-15T09:41:39ZMurray ColpmanSystem automatically connects to bluetooth upon resume from standbyApologies if this is not, in fact, a bug, but I'm really struggling to diagnose this and would appreciate support. I recently upgraded from pulseaudio to pipewire. With pulseaudio, everything worked exactly as I wanted it to. With pipewi...Apologies if this is not, in fact, a bug, but I'm really struggling to diagnose this and would appreciate support. I recently upgraded from pulseaudio to pipewire. With pulseaudio, everything worked exactly as I wanted it to. With pipewire, almost everything does, but for one issue. Whenever I switch my laptop out of standby, it attempts to connect to a bluetooth audio device, and switches to that as my bluetooth output device. Until I switched to pipewire it never did this, and so I can only assume pipewire is somehow to blame here. I am a KDE user otherwise. Any ideas how to stop it from doing this, as my bluetooth audio device is really not suitable for general-purpose output and I'd really like it to only connect when I explicitly ask it to?https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3433Disable Bidirectional CIS with Pipewire+Bluez setting2023-08-22T23:20:27ZCarl ChenDisable Bidirectional CIS with Pipewire+Bluez settingI was working on Pipewire+Bluez5.66 for 2 CIS le-audio setup. I was noticing that by default it is trying to create a bidirectional CIS when setting up the CIG. Is there a way to switch to unidirection CISes? I don't expect anything back...I was working on Pipewire+Bluez5.66 for 2 CIS le-audio setup. I was noticing that by default it is trying to create a bidirectional CIS when setting up the CIG. Is there a way to switch to unidirection CISes? I don't expect anything back from the sink but I am seeing the sink devices sending multiple SDUs back. There is some bandwidth concerns with this.https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3431Profile change not reflected in internal state2023-09-01T09:46:59ZJan PalusProfile change not reflected in internal state<!-- If you are filing this issue with a regular release please try master as it might already be fixed. -->
- PipeWire version: `0.3.77`
- Distribution and distribution version: `PLD 3.0`
- Desktop Environment: `sway`
- Kernel version:...<!-- If you are filing this issue with a regular release please try master as it might already be fixed. -->
- PipeWire version: `0.3.77`
- Distribution and distribution version: `PLD 3.0`
- Desktop Environment: `sway`
- Kernel version: `6.4.8`
## Description of Problem:
For some time both my built-in card, as well as USB DAC have only two profiles: On and Off. Switching between them works however `pipewire` always indicates profile `Off` despite what's actually set:
```
$ pactl list cards|rg '(^Card|Active Profile)'
Card #57
Active Profile: off
Card #58
Active Profile: off
$ pactl set-card-profile 58 on
$ pactl list cards|rg '(^Card|Active Profile)'
Card #57
Active Profile: off
Card #58
Active Profile: off
$ pactl set-card-profile 58 off
$ pactl list cards|rg '(^Card|Active Profile)'
Card #57
Active Profile: off
Card #58
Active Profile: off
$ pactl set-card-profile 58 on
$ pactl list cards|rg '(^Card|Active Profile)'
Card #57
Active Profile: off
Card #58
Active Profile: off
```
Sound stops after setting profile to `off` and is brought back after setting it to `on` afterwards. Note that while above is for PA tools, `pw-dump` shows exactly the same state.
## How Reproducible:
Always.
### Steps to Reproduce:
1. Toggle between on/off profiles
### Actual Results:
Active profile is not reflected in current state.
### Expected Results:
Active profile should be reflected in current state.
# Additional Info (as attachments):
[pw-dump.log](/uploads/32d49be46bc5993157e95d69bf369a5b/pw-dump.log)https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3430bluetooth: distorted sound when allowed-rates is customized2023-10-04T09:03:03ZJan Palusbluetooth: distorted sound when allowed-rates is customized<!-- If you are filing this issue with a regular release please try master as it might already be fixed. -->
<!-- If you can, test also with Pulseaudio and list `pulseaudio --version`. -->
- PipeWire version: `0.3.77`
- Distribution an...<!-- If you are filing this issue with a regular release please try master as it might already be fixed. -->
<!-- If you can, test also with Pulseaudio and list `pulseaudio --version`. -->
- PipeWire version: `0.3.77`
- Distribution and distribution version: `PLD 3.0`
- Desktop Environment: `sway`
- Kernel version: `6.4.8`
- BlueZ version: `5.68`
- Bluetooth devices:
```
Galaxy Buds2 (42B7)
D50s
```
- wireplumber version: `0.4.14`
- arch: `aarch64`
## Description of Problem:
Tried my Galaxy Buds2 with a laptop after a long break from experimenting with bluetooth audio and noticed that sound (`44100` sample rate of source) is very distorted. The laptop is normally hooked into USB DAC (D50s) so `default.clock.allowed-rates` was customized. Played a little and noticed that:
- leaving only `48000` on `default.clock.allowed-rates` list "fixes" the issue
- with both `44100` and `48000` on `default.clock.allowed-rates`, playing `48000` source file followed by `44100` file then both are fine
So it seems like resampling to `48000` is not enforced while it should be?
Tested with both Galaxy Buds2 and D50s (bluetooth input) and outcome is the same.
## How Reproducible:
Always.
### Steps to Reproduce:
1. Set `default.clock.allowed-rates = [ 44100 48000 ]`
2. Connect bluetooth output
3. Play file with sample rate of `44100`
### Actual Results:
Distorted sound.
### Expected Results:
Normal sound.[pw-dump.log](/uploads/a76ee7091bdef13587b3c6b4b4de2b82/pw-dump.log)