A2DP sink without pulseaudio

lode picture lode · Sep 9, 2012 · Viewed 28.6k times · Source

So I'm trying to make my linux server play music sent from my Android phone using bluetooth (the linux machine is the A2DP sink and the phone is the source). What I have done so far is to:

  • install bluez and enable audiosource/audiosink
  • pair phone and server
  • connect to server from phone (phone says it's streaming audio over bluetooth)

But I can't hear anything. Also, most guides on the internet assumes Pulseaudio and I would prefer to use ALSA.

I currently have the following in /etc/asound.conf:

pcm.!default{
    type bluetooth
    profile "auto"
}

I'm running Bluez v4.99 and Alsa v1.0.25. Any ideas?

Answer

MrUser picture MrUser · Mar 24, 2014

I know this is an old post, but hopefully the answer is useful to people currently working on this.

You can use /etc/bluetooth/audio.conf, which is the system-wide file, or ~/.asoundrc, which is your local file. Both are read by BlueZ/ALSA. However, I think you need to include the MAC address in your config file, z.B.:

pcm.btheadset {
    type bluetooth
    device "XX:XX:XX:XX:XX:XX" #MAC address
    profile "auto"
}

The best resources I've found for this are:

1) James B's blog post: Bluez must be one of the best kept secrets in Linux
He explains the structure and interface between BlueZ and ALSA, which I found nowhere else on the internet.

2) His second post with code: Bluez A2DP AudioSink for ALSA

3) The ALSA site, which introduces the structure of pcm plugins, but doesn't really explain them very well.

4) Some ALSA plugin tutorials: The ALSA wiki

Some useful commands:

$sudo service bluetooth restart
$sudo alsa force-reload

Run these after you change the asoundrc or audio.conf files.