Inhoudsopgave:

Bluetooth afspelen op Sonos met Raspberry Pi - Ajarnpa
Bluetooth afspelen op Sonos met Raspberry Pi - Ajarnpa

Video: Bluetooth afspelen op Sonos met Raspberry Pi - Ajarnpa

Video: Bluetooth afspelen op Sonos met Raspberry Pi - Ajarnpa
Video: How to Play Smartphone Music to Sonos Without App 2024, November
Anonim
Image
Image
Bluetooth afspelen op Sonos met Raspberry Pi
Bluetooth afspelen op Sonos met Raspberry Pi

Ik heb eerder een instructable geschreven waarin wordt beschreven hoe je een aux- of analoge line-in aan Sonos kunt toevoegen met behulp van een Raspberry Pi. Een lezer vroeg of het mogelijk zou zijn om bluetooth audio van zijn telefoon naar Sonos te streamen. Dit is eenvoudig te doen met een bluetooth-dongle die is aangesloten op de line-in van de duurdere Sonos Play:5 of Sonos CONNECT; je verliest echter de betrouwbaarheid door bluetooth (digitaal) om te zetten naar analoog en vervolgens terug naar digitaal en als je alleen een van de goedkopere Sonos-luidsprekers bezit, is dit geen optie. Deze instructable beschrijft hoe je een Raspberry Pi instelt om bluetooth-audio naar elke Sonos-luidspreker te streamen.

OPMERKING: houd er rekening mee dat we bluetooth-audio naar de Raspberry Pi gaan verzenden en deze in een mp3-stream omzetten voordat deze naar Sonos wordt verzonden, dus er zal een vertraging van een paar seconden optreden. Als u dit gebruikt om een video te bekijken, loopt de audio niet synchroon.

Stap 1:

Wat je nodig zult hebben:

Raspberry PI 3 Model B (er is een nieuwer, sneller Model B+ beschikbaar, maar ik bleef bij het reguliere Model B omdat ik heb gelezen over enkele problemen met het vergrendelen van de B+ en ook de wifi- en bluetooth-radio's van de B+ hebben metalen afscherming om hen heen ze FCC-compatibel bij installatie in een ander apparaat, maar ik wilde een maximaal Bluetooth-bereik en was bang dat de afscherming dit zou kunnen belemmeren)

Een desktop- of laptopcomputer met een microSD-kaartlezer

Monitor of tv met HDMI-ingang (alleen voor eerste installatie)

USB- of bluetooth-toetsenbord en -muis (alleen voor eerste installatie)

Plastic Raspberry Pi-behuizing (ik gebruik een plastic behuizing voor dit project om het Bluetooth-bereik te maximaliseren)

Kingston 8 GB microSDHC Klasse 4 Flash-geheugenkaart

5V voeding

Stap 2:

Afbeelding
Afbeelding
Afbeelding
Afbeelding

Navigeer naar https://www.raspberrypi.org/downloads/raspbian/ op uw gewone computer en download "RASPBIAN STRETCH WITH DESKTOP".

Ga ook naar https://etcher.io/ en download Etcher en installeer het.

OPMERKING: in mijn vorige instructable heb ik beschreven hoe je NOOBS kunt downloaden om Raspbian te installeren; deze methode is echter een beetje sneller. Beide manieren zijn prima.

Stap 3:

Afbeelding
Afbeelding
Afbeelding
Afbeelding

Voer Etcher uit en klik op Afbeelding selecteren en blader naar het zipbestand. Klik op Station selecteren en blader naar de microSD-kaart en klik vervolgens op Flash!

Stap 4:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

OPMERKING: sommige van deze volgende stappen zijn vergelijkbaar met mijn vorige instructable, dus ga verder als je al een root-wachtwoord, een statisch IP-adres en VNC hebt ingesteld.

Plaats de microSD-kaart in de SD-kaartsleuf aan de onderkant van de Raspberry Pi. Sluit een HDMI-kabel van de Raspberry Pi aan op je monitor of tv. Sluit het USB-toetsenbord, de muis en tot slot de Micro-USB-voedingskabel aan. Nadat het is opgestart, verschijnt het Raspbian-bureaublad. Het zal je door verschillende instellingen leiden, maar ik zou aanraden NIET te controleren op updates. Klik op Overslaan. Ik kreeg steeds de foutmelding "blueman.bluez.errors. DBusFailedError: Protocol not available" wanneer ik Bluetooth probeerde te koppelen nadat alle updates waren geïnstalleerd, dus ik moest helemaal opnieuw beginnen.

TIP: Als u geen militaire tijd wilt, klikt u met de rechtermuisknop op de klok en selecteert u Digitale klokinstellingen en wijzigt u het klokformaat van %R in %r

Stap 5:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Vervolgens gaan we de ingebouwde VNC-server inschakelen. Dit maakt de zaken zoveel gemakkelijker omdat u eenvoudig opdrachten via VNC kunt kopiëren en plakken in plaats van ze te typen. Selecteer GUI-menu > Voorkeuren > Raspberry Pi-configuratie > Interfaces. Klik op Ingeschakeld naast VNC en vervolgens op OK. Na een paar seconden verschijnt er een VNC-pictogram op de taakbalk. Klik erop en vervolgens op het menupictogram rechtsboven (vak met 3 horizontale lijnen) en vervolgens op Opties. Stel in de Beveiligingsopties Versleuteling in op "Voorkeur uit" en Verificatie als "VNC-wachtwoord" en klik vervolgens op Toepassen. Er verschijnt een wachtwoordvenster. Typ "framboos" (zonder de aanhalingstekens) voor het wachtwoord in elk vak en klik op OK.

Stap 6:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Voordat we verder gaan, moeten we een statisch IP-adres toewijzen. Als het IP-adres van je Pi willekeurig wordt toegewezen door de DHCP-server van je router, kan het IP-adres later veranderen en zou je geen verbinding kunnen maken via VNC (of Sonos). Klik met de rechtermuisknop op het pictogram voor netwerkverbindingen op de taakbalk (het kleine pictogram met de pijl omhoog en omlaag) en selecteer "Instellingen draadloos en bedraad netwerk". Klik met de linkermuisknop op het vak rechtsboven en selecteer "eth0" om de ethernetverbinding te configureren of "wlan0" voor draadloos. Ik zou adviseren om een statisch IP aan slechts één of ander toe te wijzen. Ik had een probleem toen ik mijn Pi voor het eerst instelde, waarbij ik hetzelfde statische IP-adres aan beide verbindingen toewees en de draadloze verbinding van mijn Pi vastliep en ik het niet meer correct kon laten werken, dus moest ik helemaal opnieuw beginnen met het installeren van het besturingssysteem. Voer hoe dan ook het gewenste IP-adres in het veld IP-adres in en voer het IP-adres van uw router in zowel het veld Router als DNS Servers in. Klik op Toepassen en sluiten.

OPMERKING: Het kan gemakkelijker zijn om een statisch IP-adres toe te wijzen met behulp van de DHCP IP-reserveringsfunctie van uw router, als die er is. Mogelijk hebt u het MAC-adres van de Pi nodig of het verschijnt mogelijk in een lijst met aangesloten apparaten op de beheerderspagina van uw router. Als u het MAC-adres nodig heeft, typt u het commando "ifconfig eth0" in het terminalvenster voor ethernet of "ifconfig wlan0" voor WiFi. Interessant genoeg zal het WiFi MAC-adres verschijnen op de regel die begint met "ether"

Stap 7:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Vervolgens moeten we de standaard schermresolutie instellen. Dit lijkt misschien gek, aangezien we al met een monitor zijn verbonden, maar later, wanneer je verbinding maakt via VNC zonder dat er een monitor is aangesloten (zonder hoofd, zoals ze zeggen), keert het terug naar de standaard 640x480-resolutie van de Pi, wat een heel klein scherm is om werk met! Selecteer GUI-menu > Voorkeuren > Raspberry Pi-configuratie > Resolutie instellen. Stel het in op 1280x720 of hoger en klik op OK en Ja om opnieuw op te starten.

Stap 8:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Misschien wil je de naam van je Pi wijzigen, vooral als je er meer dan één op je netwerk hebt. Ik heb de mijne omgedoopt tot "BluetoothPi" om hem gemakkelijk herkenbaar te maken. Het zal je vragen om opnieuw op te starten nadat je het hebt hernoemd.

Stap 9:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Op dit punt wil je misschien VNC gaan gebruiken om de Pi te besturen. Open het VNC-configuratiescherm op de Raspbian-desktop opnieuw en zoek het IP-adres op onder "Connectivity". Installeer en voer een VNC-viewer uit op uw gewone computer en gebruik dat IP-adres om verbinding te maken en voer "raspberry" (zonder de aanhalingstekens) in als wachtwoord. Ik gebruikte TightVNC voor Windows. Nadat je verbinding hebt gemaakt, kun je de VNC-verbinding van de Pi opslaan als een snelkoppeling op je bureaublad om in de toekomst snel verbinding te maken zonder het aanmeldingsscherm. U krijgt een waarschuwing over het opslaan van het wachtwoord in de snelkoppeling. Om te kopiëren en in het terminalvenster van de Pi te plakken, selecteert of markeert u de tekst of opdrachten op uw gewone computer, drukt u op Ctrl-C (letterlijk tegelijkertijd op de Ctrl- en C-toets op uw toetsenbord) of klikt u met de rechtermuisknop en selecteert u "Kopiëren ", activeer vervolgens het VNC-viewervenster van de Pi en klik met de rechtermuisknop in het terminalvenster op de cursor en selecteer Plakken.

Stap 10:

Afbeelding
Afbeelding
Afbeelding
Afbeelding

Vervolgens gaan we twee programma's installeren, Darkice en Icecast2. Darkice is wat onze bluetooth-audiobron zal coderen in een mp3-stream en Icecast2 is wat het aan Sonos zal dienen als een Shoutcast-stream. Kopieer en plak elk van deze regels één voor één in het terminalvenster, elke keer gevolgd door de Enter-toets:

wget

mv darkice_1.0.1-999~mp3+1_armhf.deb?raw=true darkice_1.0.1-999~mp3+1_armhf.deb

sudo apt-get install libmp3lame0 libtwolame0

sudo dpkg -i darkice_1.0.1-999~mp3+1_armhf.deb

Stap 11:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Nu Icecast2 installeren. Typ "sudo apt-get install icecast2" gevolgd door enter. Nadat het is geïnstalleerd, verschijnt er een venster met de vraag of je Icecast2 wilt configureren. Druk op de linkerpijltoets en voer in om Ja te selecteren. Druk op het tweede scherm op de pijl-omlaag en enter om OK te selecteren om de standaard hostnaam "localhost" te gebruiken. Druk op de volgende drie schermen op de pijl-omlaag en voer de toets in om akkoord te gaan met het gebruik van "hackme" als standaardbron, relais en beheerderswachtwoord. Hoewel we akkoord gaan met alle standaardinstellingen, moeten deze stappen worden voltooid om de Icecast2-server te activeren.

sudo apt-get install icecast2

Stap 12:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Vervolgens moeten we de GUI-bestandsbeheerder als rootgebruiker uitvoeren. Selecteer hiervoor GUI-menu > Uitvoeren. Typ "sudo pcmanfm" en druk op enter. Dat opent de bestandsbeheerder (het equivalent van bestandsverkenner voor ons Windows-gebruikers) naar de thuismap (/home/pi) en je zult het overgebleven darkice-installatiebestand zien dat we eerder hebben gedownload. Klik met de rechtermuisknop in een lege ruimte en selecteer Nieuw maken en vervolgens Bestand leegmaken. Noem het "darkice.cfg" en klik op OK. Klik vervolgens met de rechtermuisknop op dat nieuw gemaakte bestand en kies ervoor om het te openen met Leafpad (het equivalent van Windows Kladblok). Kopieer de onderstaande regels en plak ze in Leafpad en klik vervolgens op Bestand en Opslaan. U zult merken dat de regel "kwaliteit" wordt becommentarieerd met een # ervoor. Het wordt alleen gebruikt als u "bitrateMode = vbr" (variabele bitrate) instelt. U kunt geen kwaliteitswaarde instellen bij gebruik van cbr (constante bitrate) of de stream hapert en slaat over. Omgekeerd, als u besluit vbr te gebruiken, moet u de regel "bitrate = 160" uit commentaar plaatsen en de regel "kwaliteit" verwijderen.

OPMERKING: De hoogste kwaliteit mp3-bitrate die u kunt hebben is 320 kbps; echter, zowel de wifi- als de Bluetooth-radio's op de Raspberry Pi zitten op dezelfde chip, dus als je de bandbreedte van beide maximaal benut, kan bluetooth-audio haperen of vastlopen. We gaan later een instelling wijzigen die dit zal verhelpen, maar het beperkt de wifi-bandbreedte enigszins, dus heb ik de audiobitsnelheid voor dit project verlaagd tot 160 kbps, omdat ik van plan ben het exclusief op wifi te houden. Als u ethernet gebruikt, is dit geen probleem en kunt u de bitrate veilig instellen op 320 kbps.

[algemeen]duur = 0 # duur in s, 0 voor altijd bufferSecs = 1 # buffer, in seconden opnieuw verbinden = ja # opnieuw verbinden indien verbroken

[invoer]

device = telefoon # naam van bluetooth-apparaat sampleRate = 44100 # sample rate 11025, 22050 of 44100 bitsPerSample = 16 # bits channel = 2 # 2 = stereo

[icecast2-0]

bitrateMode = cbr # constante bitsnelheid ('cbr' constant, 'abr' gemiddelde) #kwaliteit = 1.0 # 1.0 is de beste kwaliteit (alleen gebruiken met vbr) formaat = mp3 # formaat. Kies 'vorbis' voor OGG Vorbis bitrate = 160 # bitrate server = localhost # of IP-poort = 8000 # poort voor IceCast2-toegangswachtwoord = hackme # bronwachtwoord voor de IceCast2-server mountPoint = rapi.mp3 # mountpoint op de IceCast2-server.mp3 of.ogg naam = BluetoothPi

Stap 13:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Vervolgens moeten we dezelfde stappen volgen als voorheen om een leeg bestand met de naam "darkice.sh" aan te maken. Een.sh-bestand is het equivalent van een.bat- of batchbestand voor DOS of Windows. Open met Leafpad, kopieer en plak onderstaande regels en sla op. Als je mijn vorige instructable hebt gevolgd, zul je merken dat de regel waarmee Darkice begint er een beetje anders uitziet. Ik moest de code in een lus insluiten, want wanneer Darkice het Bluetooth-audiosignaal verliest, stopt het met werken en wordt het niet automatisch opnieuw opgestart, zelfs niet wanneer de audio opnieuw wordt gestart. Ik heb veel onderzoek gedaan naar dit probleem en hoewel er ingewikkelde manieren zijn om automatisch een script uit te voeren wanneer een bluetooth-apparaat is aangesloten, stopt Darkice soms wanneer het audiosignaal wegvalt, zelfs als het bluetooth-apparaat nog steeds is verbonden (bijvoorbeeld als je de YouTube-app sluit app op je telefoon), dus dit is de gemakkelijkste en meest betrouwbare manier om ervoor te zorgen dat Darkice actief is wanneer bluetooth-audio aanwezig is. Als Darkice al actief is, wordt de opdracht genegeerd.

#!/bin/bashwhile:; doe sudo /usr/bin/darkice -c /home/pi/darkice.cfg; slaap 5; gedaan

Stap 14:

Afbeelding
Afbeelding

Vervolgens moeten we een opdracht uitvoeren om het bestand darkice.sh uitvoerbaar te maken. Open het terminalvenster en typ "sudo chmod 777 /home/pi/darkice.sh" en druk op enter. Nu is het tijd om de Icecast2-serverservice te starten. Typ "sudo service icecast2 start" en druk op enter.

sudo chmod 777 /home/pi/darkice.sh

sudo-service icecast2 start

Stap 15:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Vervolgens moeten we Darkice vertellen om automatisch te starten wanneer de Pi wordt opgestart (de Icecast2-server werkt als een service en start al automatisch na het opstarten). Eerst moeten we selecteren welke teksteditor we willen gebruiken. Typ in het terminalvenster "select-editor" en druk op enter. Typ "2" om nano-editor te selecteren en druk op enter. Typ vervolgens "crontab -e" en voer in. Houd vervolgens de pijl-omlaag ingedrukt om helemaal naar de onderkant van het tekstbestand dat verschijnt te scrollen en voeg deze regel "@reboot sleep 10 && sudo /home/pi/darkice.sh" toe. Druk vervolgens op Ctrl-X om af te sluiten en er wordt gevraagd "Gewijzigde buffer opslaan?". Druk op de Y-toets voor Ja en vervolgens op Enter om te bevestigen welke bestandsnaam automatisch wordt gegenereerd.

selecteer-editor

crontab -e

@reboot sleep 10 && sudo /home/pi/darkice.sh

Stap 16:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Koppel je telefoon met de Raspberry Pi via het bluetooth-pictogram op het bureaublad. Het is belangrijk dat je de bluetooth van de Pi in de ontdekkingsmodus zet en vervolgens koppelt vanaf je telefoon. Als je je telefoon in de ontdekkingsmodus zet en hem VANAF de Pi probeert te koppelen, kan hij verbinding maken, maar krijg je een foutmelding dat er geen diensten op je telefoon zijn die de Pi kan gebruiken, wat waar is. We proberen audio NAAR de Pi te sturen, niet andersom. Nadat het is gekoppeld, voert u deze opdracht uit in het terminalvenster om het Bluetooth-MAC-adres van uw aangesloten apparaat weer te geven:

sudo bluetoothctl

Stap 17:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Om ervoor te zorgen dat Darkice het Bluetooth-apparaat kan gebruiken als een PCM-audio-ingang, moeten we een bestand maken in de map "etc" genaamd "asound.conf" (etc/asound.conf). Klik een paar keer op de pijl omhoog in de bestandsbeheerder om naar de hoofdmap te gaan en dubbelklik vervolgens op de map "etc" om deze te openen. Scroll naar beneden en klik met de rechtermuisknop in een lege ruimte en maak een leeg bestand met de naam "asound.conf" en kopieer en plak de onderstaande regels met het MAC-adres van uw apparaat in de plaats van het mijne natuurlijk en sla op.

pcm.phone { type plug slave.pcm { type bluealsa apparaat "50:F0:D3:7A:94:C4" profiel "a2dp"} }

Stap 18:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Zowel de wifi- als de Bluetooth-radio's op de Raspberry Pi zitten op dezelfde chip, dus als je de bandbreedte van beide maximaal benut, kan bluetooth-audio haperen of vastlopen. Sommigen noemen het een bug en sommigen zeggen dat het gewoon een hardwarebeperking is. We gaan een instelling wijzigen die dit zal verhelpen. Het krediet voor het plaatsen van deze fix gaat naar "pelwell" op https://github.com/raspberrypi/linux/issues/1402 Voer sudo pcmanfm opnieuw uit om de bestandsbeheerder te openen en blader naar /lib/firmware/brcm. Dubbelklik op het tekstbestand "brcmfmac43430-sdio.txt" om het te openen en deze regels onderaan toe te voegen en op te slaan.

# Experimentele Bluetooth-coëxistentieparameters van Cypressbtc_mode=1 btc_params8=0x4e20 btc_params1=0x7530

Stap 19:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Klik op het GUI-menupictogram en selecteer Afsluiten en opnieuw opstarten. Als je al deze stappen precies hebt gevolgd, start je bluetooth-audioserver automatisch ergens tussen de 30 seconden en een minuut nadat je op opnieuw opstarten hebt geklikt. VOORDAT je het aan Sonos kunt toevoegen, moet je de bluetooth van je telefoon verbinden met de Pi (gewoon erop tikken in de bluetooth-instellingen van je telefoon omdat het al is gekoppeld) en beginnen met het afspelen van een soort audio en het volume hoger zetten. Onthoud dat je geen geluid uit de luidspreker van je telefoon hoort, omdat deze denkt dat deze is verbonden met een externe bluetooth-luidspreker. Een visuele manier om te zien of Icecast bluetooth-audio van Darkice ontvangt, is door https://192.168.86.107:8000 in een webbrowser te openen met het IP-adres van je Pi in de plaats van het mijne. Icecast is altijd actief, dus je ziet altijd de statuspagina, maar als Darkice ook bluetooth-audio ontvangt, zie je ook het koppelpunt en de streamdescriptor. Koppel je bluetooth los en ververs de pagina en deze wordt weer leeg.

Stap 20:

Afbeelding
Afbeelding
Afbeelding
Afbeelding

Je moet de Sonos-desktopcontroller-app gebruiken om een aangepaste stream aan Sonos toe te voegen. Klik op Beheren > Radiostation toevoegen en voer de url in voor de stream die in mijn geval "https://192.168.86.107:8000/rapi.mp3" was. Voer ook een Stationsnaam in en klik op OK.

Stap 21:

Afbeelding
Afbeelding

Om het aangepaste radiostation af te spelen dat we zojuist hebben toegevoegd, selecteert u "Radio by Tunein" en vervolgens "Mijn radiostations". Dubbelklik met LINKS om af te spelen of klik met RECHTS om de zender te bewerken of toe te voegen aan je Sonos-favorieten.

Stap 22:

Afbeelding
Afbeelding
Afbeelding
Afbeelding

Nadat je het aangepaste radiostation hebt toegevoegd, is het onmiddellijk beschikbaar in je Sonos-app. Open de app, tik onderaan op 'Mijn Sonos', scrol omlaag naar 'Stations' en tik op 'Alles weergeven'. Scroll naar beneden tot je je nieuw aangemaakte station ziet. Tik erop en het begint te spelen in de door jou geselecteerde kamers. Bedenk ̶ Als u Koppel Bluetooth in het PI vervolgens de Icecast stream ̶d̶i̶s̶c̶o̶n̶n̶e̶c̶t̶.̶ als u overschakelt audioapps Het kan ̶d̶i̶s̶c̶o̶n̶n̶e̶c̶t̶.̶ weer wilt luisteren via Sonos U zult opnieuw moeten beginnen afspelen van audio op uw telefoon opnieuw en Push Play On ̶t̶h̶e̶ ̶S̶o̶n̶o̶s̶ ̶a̶p̶p̶ ̶a̶g̶a̶i̶n̶.̶ <---Dit is opgelost; zie update hieronder. Veel succes en bedankt voor het lezen!

Stap 23: UPDATE: VASTE STREAM VERBONDEN HOUDEN WANNEER BLUETOOTH ONTKOPPELT

Dus bluetooth-streaming werkte perfect met deze opstelling BEHALVE Sonos zou de verbinding met de Icecast-server verbreken wanneer Darkice bluetooth-audio verloor, zoals wanneer je van audio-app wisselde of gewoon bluetooth loskoppelde, wat vervelend was omdat je bluetooth-audiostreaming opnieuw zou moeten krijgen voordat je zou zelfs op de afspeelknop in de Sonos-app kunnen drukken. Dit werd een enorm probleem toen ik audio naar Sonos probeerde te streamen vanaf de WatchESPN-app van mijn telefoon, die alleen op volledig scherm is, dus ik kon niet op de afspeelknop in de Sonos-app drukken nadat ik de bluetooth-audio had gestart, maar toen ik de WatchESPN-app sloot Sonos-stream zou niet starten tenzij je eerst de bluetooth-audio had gestart! Ugh! Ik heb mijn haar uitgetrokken om hier een elegante oplossing voor te bedenken. Ik heb een andere mp3-encoder geprobeerd, liquidsoap genaamd, die de optie heeft om stille audio te verzenden wanneer de verbinding wordt verbroken, maar ik kreeg het niet werkend met bluealsa. Ik probeerde de bluealsa-stream te mixen met een secundaire dummy-geluidskaart alsa-stream met dsnoop en asym om Icecast te laten denken dat er nog steeds een audiosignaal aanwezig was, maar je kunt ook echt niet veel bluetooth-audio manipuleren. Ik begon toen te onderzoeken met behulp van een fallback-koppelpunt met behulp van een stil mp3-bestand in Icecast, maar Sonos zou de naam van het koppelpunt zien veranderen en de verbinding verbreken. Ik gebruikte een test.mp3-bestand en benoemde het per ongeluk een keer als de naam van het hoofdkoppelpunt in plaats van de reserve-naam en merkte op dat Sonos gewoon overschakelde naar het afspelen van dat bestand toen de verbinding met de bluetooth "rapi.mp3"-stream werd verbroken. Eureka! Het zou niet automatisch terugschakelen naar de bluetooth-stream wanneer het weer beschikbaar kwam, dus dat zette me aan het denken waarom niet gewoon dezelfde mountpoint-naam gebruiken? Dus wat je moet doen is een stil mp3-bestand maken en het dezelfde naam geven als de Darkice mp3-stream, "rapi.mp3", en het hard coderen als het belangrijkste koppelpunt in het Icecast2-configuratiebestand. Wat er gebeurt, is dat wanneer Sonos de verbinding met de Darkice/bluetooth rapi.mp3-stream verliest, het andere stille rapi.mp3-bestand begint te herhalen totdat de bluetooth-stream weer online komt. Op deze manier hoef je de bluetooth-audio niet aan te zetten voordat je op afspelen drukt in Sonos. Hier is hoe het te doen …

Stap 24:

Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding
Afbeelding

Eerst moeten we ffmpeg installeren om een stil mp3-bestand te maken. Je zou een stil.wav-bestand van een externe geluidskaart kunnen opnemen en met lame naar mp3 kunnen converteren, maar aangezien ik geen externe geluidskaartingang heb voor dit project, was het gebruik van ffmpeg de gemakkelijkste oplossing. Open het terminalvenster en typ "sudo apt-get install ffmpeg" en druk op Enter:

sudo apt-get install ffmpeg

Nadat het is geïnstalleerd, kopieert en plakt u deze lange regel om een stil mp3-bestand te coderen dat slechts één seconde duurt:

sudo ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -b:a 160k -t 1 /usr/share/icecast2/web/rapi.mp3

Open Bestandsbeheer als root met "sudo pcmanfm" en blader naar "/etc/icecast2". Klik met de rechtermuisknop op "icecast.xml" en open met Leafpad en plak deze regels net onder de bovenste "" regel:

/rapi.mp3

Opslaan en opnieuw opstarten en je zou nu je aangepaste Sonos bluetooth-station moeten kunnen starten voordat je je telefoon zelfs maar met bluetooth hebt verbonden!

Stap 25: Aanvulling

Aanvulling
Aanvulling
Aanvulling
Aanvulling
Aanvulling
Aanvulling
Aanvulling
Aanvulling

Ik wilde dat de Raspberry Pi en 110V AC naar 5V DC voeding in één geval op zichzelf staand zouden zijn, zodat ik hem gemakkelijk door het huis kon verplaatsen, maar was verrast toen ik ontdekte dat zo'n behuizing niet bestaat. Ik kan er later een 3D-printen, maar in de tussentijd ben ik overgestapt op het gebruik van een andere Raspberry Pi-behuizing en vond ik een dunne USB-wandoplader en een korte kabel. De oplader had een rubberen coating waar ik geen doorzichtige VHB-tape op kon plakken, maar het bleek een sticker te zijn die gemakkelijk te verwijderen was; dat zorgde echter voor een kleine uitsparing die de VHB-tape te dun maakte, dus ik gebruikte klittenband.

Aanbevolen: