Making the Speaker Part 3: Connectivity

A project log for Bluetooth Speaker System with Powerful Bass

A portable, high power subwoofer and speaker with custom passive radiators that can connect to and sync with 5 external Bluetooth speakers.

Sam PullmanSam Pullman 07/24/2017 at 10:463 Comments

As far as connectivity is concerned, the most common speakers on the market fall under three categories:

  1. Wired - Usually ¼ or ⅛ inch stereo jacks, or RCA
  2. WiFi - Allow syncing between speakers connected to the same WAP, usually a non-portable system
  3. Bluetooth - Common in portable speakers, these allow direct streaming from a phone/PC/etc

We are interested in both portability and syncing multiple speakers. WiFi systems (such as Sonos) connect to your home router and have some sort of phone/computer interface for setup and streaming. That won’t work for us, because we don’t want to bring a router to the pool/beach/park. Technically it may be possible to create a speaker that serves as the access point that others connect to, but the resulting complexity and trade offs, along with the fact that there is a large selection of Bluetooth speakers available that many people own already, dictated we go with Bluetooth as our connection method.

Current Bluetooth speakers generally allow streaming from one source at a time, and not much else. Fortunately, some unique capabilities of the Bluetooth IC we’re using (CSR8670) presents us with a few options. Without too much work, it supports “sharing” a synchronized audio stream with a second CSR chip. This is perfect for a 2 speaker setup, and it is what we have implemented in our prototype.

    Shown: Prototype with amp, battery, driver (only woofer here, no full range or tweeters). Two Bluetooth modules are connected and synced, audio source is the phone. The blue thing on the left is a cheap battery powered speaker.

The two obvious drawbacks to this approach are that the system is limited to 2 speakers, and that the second speaker must have a CSR chip. Many Bluetooth speakers do either use a CSR645, CSR8670, or earlier variant, but in any case we are still stuck with a maximum of 2. After considering several options to overcome this hurdle, we have decided to pursue an unorthodox solution. To meet the goal of connecting 6 speakers (including ours) we will add 2 more CSR8670 chips. The first chip will perform the same function as our current prototype, but also will output two PCM streams to the other CSR8670s using I2S. They will each be able to stream to two external speakers, which the CSR8670 is capable of doing when using a non-Bluetooth audio source. To help visualize the setup, see the below diagram.

A somewhat non-obvious issue with this configuration is dealing with Bluetooth audio latency. The speaker should be capable of connecting to any other Bluetooth speaker, but there is no standardized way in the Bluetooth A2DP spec of synchronizing this sort of arrangement. Since Bluetooth audio latency can range from 30ms to 200ms+, naively streaming to 5 other speakers is unlikely to sound good. A mismatch of 20-30ms or so is probably the upper limit of acceptable, so one speaker playing with 50ms latency and another with 180ms is problematic.  The strategy we have come up with is to:

The manual controls will be implemented in an Android/iPhone app, using CSR’s (Qualcomm) GAIA protocol. Due to NDA restrictions we can’t go into too much detail about how this is done, but you can view a high level explanation of GAIA here. The

We will work on this strategy over the next few weeks, and periodically log our progress.


Paul wrote 11/06/2018 at 17:04 point

> Due to NDA restrictions we can’t go into too much detail about how this is done

Oh come on. I came here exactly to learn about how this is done. What does Qualcomm gain from keeping this a secret other than maybe fun alienating developers?

  Are you sure? yes | no

Paul wrote 11/06/2018 at 17:07 point

Also, let's talk about reproducibility. Should everyone interested in this get an NDA and write their own software? Will you distribute binaries for the chips or the app that can talk to any of the chips (the latter solution would be the more interesting one for tinkering)? Or will you just not do any of those?

How'd you even get the info under NDA?

  Are you sure? yes | no

Paul wrote 11/06/2018 at 17:10 point

Oh right. Only 3000$. For some reason I'm not too much of a Qualcomm fan. Go figure. But I assume this explicitly allows you to distribute your work, which is nice. 

I have headphones with GAIA support and would just go explore the interface a little. By the little information I've read so far, it seems pretty powerful. 

  Are you sure? yes | no