lukasjapan / bt-speaker

A simple Bluetooth Speaker Daemon for the Raspberry Pi 3
GNU General Public License v3.0
493 stars 94 forks source link

Another system-wide bluetooth daemon #59

Open mincequi opened 5 years ago

mincequi commented 5 years ago

Apparently, there is no other way to contact each other via Github. So, using this way: I wrote another bluetooth daemon target at embedded and low-powered boards: https://github.com/mincequi/cornrow

It is fully debianized and also has a built-in equalizer (can be remote controlled via app). Since it is utilizing gstreamer, adding further codecs and other nifty filters should be easier to integrate. Please, tell me waht you think and potentially we might join up forces here.

Thanks.

Best regards, Manuel

lukasjapan commented 5 years ago

Thanks for reaching out. Hopefully I will have some time to try it out in the near future.

I like the approach, which looks much more sophisticated than bt-speaker. I actually also wanted to make it in C++ but reusing the bt-admin library in Python was the much much quicker option. (To be honest, I don’t even like python that much) Packaging is also a thing I like and wanted to do but I never found the time for it.

I think, the biggest difference to bt-spaker is obviously the gstreamer dependency. I didn’t try gstreamer, but there were issues with pulse audio, like a 2-3 seconds lag and bad sound quality (that I couldn’t fix by the config files). The kind of bad quality that you get from downsampling or bad type conversion.

As a solution, with all the different sound systems available (gstreamer, pulse, jack, …), bt-speaker takes the least opinionated approach: a raw audio data stream and volume control via alsa which can now even be disabled.

My main field is web development, and I have a lot of projects going on there too, so bt-speaker is mainly unmaintained. However, I am planning to keep it running on the Raspberry Pi with the newest vanilla Raspbian images, while taking backwards compatibility into account. Things I would love to do but probably won’t have time for are other codecs than SBC and the PIN code functionality.

So that’s basically the current development state of bt-speaker.

I will flag this issue as important, so people know and they can find a (maintained?) alternative.

mincequi commented 5 years ago

Thanks for your interest and looking forward to hear from your experience with my daemon.

I started using bt-speaker quite a while ago and i never had issues with it. Actually i wanted to have software-based DSP solution utilizing the Raspberry Pi. Bluetooth input capabilities were added additionally.

Yeah, i do not like python as well, but i also see the reason to go with it for more rapid development. I always intended to integrate GSreamer as core component, so i went for C++ (and Qt btw. which offered a cross-platform Bluetooth Low Energy API). Unfortunately, GStreamer introduces a huge dependecy tree, but i still decided to use it -- also to ease up further codec and filter integration.

I do not like pulse either. However, cornrowd can be used with pulse, but i had troubles with it, when running as system-wide daemon. So, my daemon package defines a conflict with pulse. With gstreamer you have better control over your audio stream and what kind or processing takes place.

Currently, i only support SBC. However, the gstreamer bluetooth plugin also offers AAC support, but i did not manage to run it, yet. I also would like to leave some words about SBC and quality (no one will ever hear a difference between SBC and AptX or AAC), but this is a different story.

Thanks for tagging this as important and yes, my package is recent and i plan to maintain it for quite a while (also trying to put it in the official debian package archive).

Cheers.