Using a bluetooth headset for giving presentations
While looking for ways of flipping slides while not near the computer, I
stumbled on this idea
this
idea, bought a cheap headset for like 10euros and started playing.
Getting the headset to work with alsa
It's supposed to
just work,
but bluez-utils in Debian has
audio support
disabled.
I've rebuild the package with the patch found in the bug report, copied the
extra configuration files as I mentioned in a followup to the bug report, and
brought my Debian up to speed.
Once the patched bluez-utils is in place, this is how to get the headset to
work:
- put the headset into pairing mode
hcitool scan (to get the address of the headset)
- put this in
~/.asoundrc (using the address you got with hcitool scan):
pcm.bluetooth_hw
type bluetooth
device 00:11:22:33:44:55
ctl.bluetooth
type bluetooth
device 00:11:22:33:44:55
# No idea why this is needed, but it makes aplay complain a bit
# less, and also it makes aoss work
pcm.bluetooth
type plug
slave.pcm "bluetooth_hw"
Now, forget
hcitool cc: in order to pair with the headset, the command is:
mplayer -ao alsa:device=bluetooth moo.wav
This will trigger a funky chain of events that will eventually cause the
bluetooth applet to ask you for the pin (0000 for the headsets), get things
paired and activate super cow powers.
Now you have an alsa sound card called 'bluetooth' that works only with some,
but not all, alsa applications. mplayer works. aoss works, but not always.
aplay seems to work. twinkle won't work;
apparently, it's because it tries to open the device multiple times.
Feeding synthesised speech to the headset
Synthesised speech is done by festival. Festival works with oss. The headset
works with alsa. aoss works, but not always.
This is the script I'd like to run:
#!/bin/sh
warn()
echo -n "Attenzione: "
if [ $1 == 1 ]
then
echo -n "manca un minuto"
else
echo -n "mancano $1 minuti"
fi
echo " alla fine."
(
for x in 5 4 3 2 1
do
warn $x
sleep 1
done
) festival --tts --language italian
By tweaking the sleep times and numbers a bit, it's a useful prototype that
sends updates on how much time is left for the presentation.
This, under
aoss, does not work reliably. An alternative is to replace the
festival invocation with this:
echo string text2wave tmpfile.wav
mplayer -ao alsa:device=bluetooth tmpfile.wav
However, I found no way to tell text2wave to use Italian instead of English.
I did manage, however, to get some link between festival and the headphones.
At a further stage, I can write a program for the countdown that keeps
the audio device open and every once in a while gets a waveform out of
text2wave and feeds it to the audio device.
Keeping the audio device open seems a good idea, to avoid losing the beginning
of the message while the connection is established (happens with my cheap
headset) and to avoid the headset to go idle and switch off.
Reacting to the buttons on the headset
It's supposed to be possible, but I didn't manage to find out how to do this using the normal alsa driver, now that
btsco is apparently deprecated.
Once I find out how to be notified of button presses, I'll try to see how to
send a Page Down keystroke to OpenOffice Impress or xpdf.
Voice commands
sphinx2-bin seems promising, but
since everyone around me is now asleep, playing with voice commands has to be
postponed.
Further ideas
- IRC link: send me a message on a public IRC channel, and I could head it on
the headphone: nice for giving talks that people is watching remotely via
streaming.
- Giving the percentage of time passed, instead (or additionally to) the time
remaining.
- Linking with the presentation software and also say the number of slides
remaining.
- Get the status update being spoken not just at regular intervals, but also
when changing slide.
- Get the headset to read slide notes, or only the slide notes marked with a
special leading keyword.