AURACAST TOOL¶
The "auracast" tool implements commands that implement broadcasting, receiving and controlling LE Audio broadcasts.
$ bumble-auracast
$ python3 apps/auracast.py <args>
Python Dependencies¶
Try installing the optional [auracast]
dependencies:
$ python3 -m pip install ".[auracast]"
$ python3 -m pip install "bumble[auracast]"
LC3¶
The auracast
app depends on the lc3
python module, which is available
either as PyPI module (currently only available for Linux x86_64).
When installing Bumble with the optional auracast
dependency, the lc3
module will be installed from the lc3py
PyPI package if available.
If not, you will need to install it separately. This can be done with:
$ python3 -m pip install "git+https://github.com/google/liblc3.git"
SoundDevice¶
The sounddevice
module is required for audio output to the host's sound
output device(s) and/or input from the host's input device(s).
If not installed, the auracast
app is still functional, but will be limited
to non-device inputs and output (files, external processes, ...)
On macOS and Windows, the sounddevice
module gets installed with the
native PortAudio libraries included.
For Linux, however, PortAudio must be installed separately. This is typically done with a command like:
$ sudo apt install libportaudio2
Visit the sounddevice documentation for details.
General Usage¶
Usage: bumble-auracast [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
assist Scan for broadcasts on behalf of an audio server
pair Pair with an audio server
receive Receive a broadcast source
scan Scan for public broadcasts
transmit Transmit a broadcast source
Use bumble-auracast <command> --help
to get more detailed usage information
for a specific <command>
.
assist
¶
Act as a broadcast assistant.
Use bumble-auracast assist --help
for details on the commands and options.
The assistant commands are:
monitor-state
¶
Subscribe to the state characteristic and monitor changes.
add-source
¶
Add a broadcast source. This will instruct the device to start receiving a broadcast.
modify-source
¶
Modify a broadcast source.
remove-source
¶
Remote a broadcast source.
pair
¶
Pair with a device.
receive
¶
Receive a broadcast source.
The --output
option specifies where to send the decoded audio samples.
The following outputs are supported:
Sound Device¶
The --output
argument is either device
, to send the audio to the hosts's default sound device, or device:<DEVICE_ID>
where <DEVICE_ID>
is the integer ID of one of the available sound devices.
When invoked with --output "device:?"
, a list of available devices and
their IDs is printed out.
Standard Output¶
With --output stdout
, the decoded audio samples are written to the
standard output (currently always as float32 PCM samples)
FFPlay¶
With --output ffplay
, the decoded audio samples are piped to ffplay
in a child process. This option is only available if ffplay
is a command that is available on the host.
File¶
With --output <filename>
or --output file:<filename>
, the decoded audio
samples are written to a file (currently always as float32 PCM)
transmit
¶
Broadcast an audio source as a transmitter.
The --input
and --input-format
options specify what audio input
source to transmit.
The following inputs are supported:
Sound Device¶
The --input
argument is either device
, to use the host's default sound
device (typically a builtin microphone), or device:<DEVICE_ID>
where
<DEVICE_ID>
is the integer ID of one of the available sound devices.
When invoked with --input "device:?"
, a list of available devices and their
IDs is printed out.
Standard Input¶
With --input stdout
, the audio samples are read from the standard input.
(currently always as int16 PCM).
File¶
With --input <filename>
or --input file:<filename>
, the audio samples
are read from a .wav or raw PCM file.
Use the --input-format <FORMAT>
option to specify the format of the audio
samples in raw PCM files. <FORMAT>
is expressed as:
<sample-type>,<sample-rate>,<channels>
(the only supported
scan
¶
Scan for public broadcasts.
A live display of the available broadcasts is displayed continuously.
Compatibility With Some Products¶
The auracast
app has been tested for compatibility with a few products.
The list is still very limited. Please let us know if there are products
that are not working well, or if there are specific instructions that should
be shared to allow better compatibiity with certain products.
Transmitters¶
The receive
command has been tested to successfully receive broadcasts from
the following transmitters:
- JBL GO 4
- Flairmesh FlooGoo FMA120
- Eppfun AK3040Pro Max
- HIGHGAZE BA-25T
- Nexum Audio VOCE and USB dongle
Receivers¶
Pixel Buds Pro 2¶
The Pixel Buds Pro 2 can be used as a broadcast receiver, controlled by the
auracast assist
command, instructing the buds to receive a broadcast.
Use the assist --command add-source
command to tell the buds to receive a
broadcast.
Use the assist --command monitor-state
command to monitor the current sync/receive
state of the buds.
JBL¶
The JBL GO 4 and other JBL products that support the Auracast feature can be used as transmitters or receivers.
When running in receiver mode (pressing the Auracast button while not already playing),
the JBL speaker will scan for broadcast advertisements with a specific manufacturer data.
Use the --manufacturer-data
option of the transmit
command in order to include data
that will let the speaker recognize the broadcast as a compatible source.
The manufacturer ID for JBL is 87.
Using an option like --manufacturer-data 87:00000000000000000000000000000000dffd
should work (tested on the
JBL GO 4. The dffd
value at the end of the payload may be different on other models?).
Others¶
- Nexum Audio VOCE and USB dongle