To answer the original question, yes this can be done with PulseAudio, but you will not get perfect synchronisation between a Bluetooth speaker and a non-Bluetooth speaker, so you probably won't like the result if you wanted to use it for "normal" listening.
However, there are situations where perfect synchronisation is not necessary. In our case we were playing a dual-language video, with English on the left channel and another language on the right channel, and we wanted the right channel to be sent to a separate Bluetooth device while the left channel was sent to the default sound device (in our case HDMI audio from a Raspberry Pi 400). So long as the audio stayed within half a second or so, we didn't mind minor latency differences in this scenario.
Attempting to do the load-module module-combine
in default.pa
did not work when one of the devices was Bluetooth, because Pulseaudio had not yet finished connecting to the Bluetooth device when it read that line during initialisation. Instead, we had to connect to the Bluetooth device first and then issue the load-module command at runtime, in other words do:
pacmd list-sinks | less
and note the sink names (if your Bluetooth sink is not present, connect to it and repeat this command), then
pactl load-module module-combine-sink sink_name=duplicate slaves=alsa_output.platform-fef05700.hdmi.hdmi-stereo,bluez_sink.01_23_45_67_89_AB.a2dp_sink channels=2
changing the two sink names to the ones listed by the list-sinks
command above, then
pacmd set-default-sink duplicate
Now if you play a sound, you should find it plays on both devices, perhaps with a small delay between them (as I said the synchronisation might not be perfect). To be more selective about which channel goes to which device, run pavucontrol
(if you don't have it then sudo apt install
it), and in the "Output Devices" tab silence the channels you don't want on the underlying devices, for example silence the right-hand channel on the HDMI device and silence the left-hand channel on the Bluetooth device.