ID.nl logo
Zo krijg je stembesturing op de Raspberry Pi
© Reshift Digital
Huis

Zo krijg je stembesturing op de Raspberry Pi

Met slimme assistenten zoals Google Assistant, Amazon Echo en Apple geef je opdrachten met je stem. Leuk, maar je stemopnames worden wel naar de cloud gestuurd voor verwerking. Met een Raspberry Pi en de opensource-software Rhasspy kun je stembesturing volledig lokaal realiseren, zelfs zonder internet. Je stemopdrachten koppel je dan aan Node-RED of een domoticasysteem zoals Home Assistant, en dat zonder dat Google, Amazon of Apple de hele tijd meeluistert. Zelfs in het Nederlands.

1 Raspberry Pi

Rhasspy heeft minstens een Raspberry Pi 2 nodig, maar we raden toch minstens model 3 aan. Als je complexe zaken wilt gaan doen, is een Raspberry Pi 4 zelfs aan te raden. Daarnaast heb je ook een microfoon en luidspreker nodig. Deze workshop hebben we met de ReSpeaker 2 Mics pHAT van Seeed uitgeprobeerd. Deze prik je op de gpio-header van de Raspberry Pi. De HAT heeft twee microfoons ingebouwd en een luidspreker sluit je aan via de 3,5mm-audiojack of de JST2.0-stekker. Wij gebruiken die laatste, waarop we een 3inch-luidspreker van 8 ohm en 1 watt aansluiten.

2 Audiodrivers

We gaan ervan uit dat je op je Raspberry Pi al de nieuwste Raspbian hebt geïnstalleerd, en via ssh (of een toetsenbord en scherm) opdrachten kunt intypen. Als je de ReSpeaker 2 Mics pHAT of andere audiohardware van Seeed gebruikt, dien je eerst een driver te installeren. Dat doe je met deze drie opdrachten:

git clone https://github.com/respeaker/seeed-voicecardcd seeed-voicecardsudo ./install.sh

Herstart daarna je Raspberry Pi met sudo reboot. Als je daarna weer inlogt, zou je in de uitvoer van de commando’s arecord -l (de lijst van microfoons) en aplay -l (de lijst van luidsprekers) de ReSpeaker-hardware moeten zien.

©PXimport

3 Installeer Rhasspy

Rhasspy kun je installeren in een Docker-container, in een virtuele Python-omgeving of als een Hass.io-add-on voor Home Assistant. In deze workshop voeren we de installatie uit met Docker Compose. Volg onze basiscursus Docker op Raspberry Pi elders in dit nummer om Docker en Docker Compose te installeren, en maak het volgende bestand docker-compose.yml aan:

version: '3.7'services:rhasspy:image: rhasspy/rhasspy:2.5.0-precontainer_name: rhasspyrestart: alwaysvolumes:- /home/pi/containers/rhasspy/profiles:/profilesports:- 12101:12101devices:- /dev/snd:/dev/sndcommand: --user-profiles /profiles --profile nl

Bekijk op het forum van Rhasspy wat de nieuwste versie is en pas het image indien nodig aan. Op het moment van schrijven was dat rhasspy/rhasspy:2.5.0-pre.

©PXimport

4 Webinterface

Maak de Docker-container van Rhasspy met het commando docker-compose up -d. Nadat Rhasspy is opgestart, kun je de webinterface bereiken via http://IPADRES:12101 met in plaats van IPADRES het werkelijke ip-adres van je Raspberry Pi. Dat laatste kom je te weten met de opdracht ip a op je Pi. Kijk naar het ip-adres bij eth0 als je ethernet gebruikt of wlan0 als je wifi gebruikt. In de webinterface zie je rechts bovenaan in het blauw nl staan: dat is het teken dat Rhasspy het Nederlandse profiel gebruikt. Je ziet bovenaan ook een link naar de Getting Started Guide: de documentatie wordt gewoon door dezelfde webserver getoond.

©PXimport

5 Audio-instellingen

Klik links op het icoontje van de gereedschapskist. Je krijgt nu alle services van Rhasspy te zien en die zijn standaard allemaal uitgeschakeld. Rhasspy is eigenlijk een toolkit om een stemassistent mee te maken en voor elk van deze services heb je meerdere keuzes. Selecteer PyAudio bij Audio Recording, en aplay bij Audio Playing. Klik onderaan op Save Settings, waarna Rhasspy herstart. Klik op Audio Recording / Test en kies de microfoon, bijvoorbeeld seeed-2mic-voicecard. Klik op Audio Playing en Refresh en kies je luidspreker, bijvoorbeeld Direct hardware device without any conversions. Sla je wijzigingen nog eens op.

©PXimport

6 Kies een activatiewoord

In de volgende stap kies je een ‘wake word’: het woord dat je tegen Rhasspy dient te zeggen om je stemassistent te activeren. Selecteer Porcupine bij Wake Word en sla je wijzigingen op. Klik dan op Wake Word en Refresh. In de lijst voor de knop Refresh kun je nu uit een tiental activatiewoorden kiezen, zoals porcupine (de standaard) en hey pico. Als je je eigen activatiewoord wilt aanmaken, dan kan dat met de Picovoice Console. Maak een directory genaamd porcupine in je profielmap van Rhasspy en plaats het bestand daar. Daarna kun je het in de instellingen selecteren. Vergeet niet op Save Settings te klikken.

©PXimport

7 Spraak naar tekst en andersom

Stel Speech to Text in op Kaldi (als je een Raspberry Pi 4 hebt, want dit vraagt meer rekenkracht) of Pocketsphinx (voor eerdere modellen). Zet Text to Speech op Espeak en sla je wijzigingen op. Als je de pagina daarna ververst, krijg je de melding dat Rhasspy bestanden moet downloaden. De speech-to-text-engine heeft immers een akoestisch model en basiswoordenboek nodig. Klik bovenaan op Download. Als alles gedownload is, krijg je de melding Training Profile. Je krijgt ook de melding dat Rhasspy niet zeker is van enkele woorden hoe het die moet uitspreken.

©PXimport

8 Woordenboek

Klik op View bij de melding over onbekende woorden of klik in de zijbalk links op het icoontje met de twee aanhalingstekens. Rhasspy heeft al een gok gedaan over de uitspraak van de onbekende woorden, door er hun fonetische transcriptie bij te zetten. Klik op check to be sure om de beschikbare fonemen te bekijken. Klopt er iets niet, pas dit dan aan. Klik tot slot op Confirm Guesses. De woorden worden dan samen met hun uitspraak toegevoegd aan je lijst met Custom Words. Merk je later dat je een verkeerde uitspraak hebt toegevoegd, dan kun je deze altijd op deze pagina nog aanpassen.

©PXimport

9 Je bedoeling herkennen

Dan rest er nog één component die we moeten instellen: Intent Recognition. Stel die in op Fsticuffs en sla je wijzigingen op. Na de herstart zou Rhasspy je opdrachten moeten herkennen. Welke zinnen Rhasspy exact herkent, vind je op de pagina Sentences. De inhoud daarvan heeft de syntaxis van een ini-bestand, en elke sectie is een ‘intent’ of bedoeling. Bekijk bijvoorbeeld de regel [GetTime] met daarna de regel hoe laat is het. Dat betekent: als je de zin “hoe laat is het” uitspreekt, verstaat Rhasspy dit als de bedoeling GetTime. Je kunt hier ook complexere regels invullen, op de pagina staat een link naar de volledige syntaxis.

©PXimport

10 Test!

Ga nu naar de pagina Test en typ een van de zinnen uit de pagina Sentences in het tekstveld naast Recognize. Klik op de knop ernaast. Als je bijvoorbeeld “zet de woonkamerlamp aan” invoert, verschijnt er na een druk op de knop ChangeLightState onder, de waarde woonkamerlamp bij het slot name en de waarde aan bij het slot state. Als je op Show JSON klikt, krijg je gedetailleerdere informatie over wat Rhasspy herkent. Als dit werkt, is de ultieme test het daadwerkelijk uitspreken: spreek het activatiewoord uit (bijvoorbeeld “hey pico”) en daarna je zin. Als alles goed gaat, toont de testpagina nu je woorden in tekst, inclusief de herkende intent en slots.

©PXimport

Rhasspy verstaat me niet!

Het succes van Rhasspy hangt van allerlei factoren af. Allereerst van de kwaliteit van je microfoon. De hier voorgestelde ReSpeaker 2 Mics pHAT is oké, maar geen hoogvlieger en hij heeft een beperkt bereik. Vermijd ook stoorzenders zoals achtergrondgeluid. Als Rhasspy moeilijk je activatiewoord (wake word) verstaat, probeer dan een ander uit (een zelfgetraind activatiewoord werkt het best). Als Rhasspy je opdrachten na het activatiewoord moeilijk verstaat, probeer dan eens een andere speech-to-text engine. Als het daarna echt nog niet goed werkt, overweeg dan om naar het Engels over te schakelen: de spraaktechnologie voor het Engels werkt doorgaans beter dan die voor het Nederlands.

©PXimport

11 Actie!

Rhasspy herkent nu wat je zegt en achterhaalt de bedoeling daarachter, maar doet er nog niets mee. Gelukkig ondersteunt Rhasspy diverse manieren om op je ‘intents’ te reageren. Standaard stuurt Rhasspy bij het herkennen van een intent een event met JSON-code uit via een WebSocket. Je kunt dan in een ander programma naar deze WebSocket-events luisteren en daarop reageren. Een handig programma daarvoor is Node-RED, dat je ook eenvoudig op je Raspberry Pi met Docker installeert.

©PXimport

12 WebSockets

Kies in Node-RED uit het palet links onder het kopje network een node websocket in en versleep die naar de werkruimte in het midden. Dubbelklik erop, laat het type op Listen on staan en klik bij Path op het icoontje van het potlood naast Add new websocket-listener. Vul bij Path de url ws://rhasspy:12101/api/events/intent in, of vervang rhasspy in de url door de hostname of het ip-adres van je Raspberry Pi als je Node-RED op een andere computer hebt draaien. Laat Send/Receive op payload staan en klik op Add. Geef dan je node websocket in een naam en klik op Done.

13 Debug

Sleep nu een node debug (in het onderdeel common helemaal bovenaan) naar de werkruimte. Verbind het rechtse grijze vakje van je websocket-node met het linkse grijze vakje van de debug-node. Klik dan op Deploy om je flow in Node-RED uit te rollen. Klik nu op het menu helemaal rechts bovenaan en dan op View / Debug messages. Rechts krijg je nu alle boodschappen van de debug-node te zien. Als je nu tegen Rhasspy praat en die de intent herkent, krijg je in het debug-venster de JSON-code van de intent te zien.

©PXimport

14 Van string naar object

Maar eerst dienen we de JSON-string (een reeks tekens) naar een JSON-object om te zetten. Sleep een node json uit het onderdeel parser en plaats die tussen de websocket- en debug-nodes. Daarvoor dien je de bestaande verbindingen te verwijderen (selecteer en druk op Delete) en nieuwe verbindingen te maken. Als je nu weer op Deploy klikt en tegen Rhasspy praat, zie je in het debug-venster de intent in de vorm van een object in plaats van een string. Onderdelen kun je nu uitklappen, bijvoorbeeld het deelobject intent met daaronder name die de naam van de herkende intent bevat, zoals “GetTime”.

©PXimport

15 Wat zei je?

Hang nu een node switch (uit function) achter de json-node en dubbelklik erop. Vul bij Property de eigenschap msg.payload.intent.name in en vul bij de regel onderaan achter == niets in, omdat een niet herkende zin een intent zonder naam krijgt. Klik op Done. Voeg achter de switch-node een node change (uit function) toe, dubbelklik erop en zet de payload op Wat zei je?. Geef de node eventueel een naam en klik op Done. Hang achter deze node een node http request (uit network), verander de methode naar POST en vul bij de url http://rhasspy:12101/api/text-to-speech in. Klik op Done en dan Deploy.

©PXimport

16 Intents herkennen

Als je nu iets zegt dat Rhasspy niet verstaat, antwoordt hij “Wat zei je?”. Door nu aan de switch andere regels toe te voegen, kun je voor elke herkende intent een andere actie laten uitvoeren. Klik in de eigenschappen van de switch-node op het knopje +add onderaan om een regel toe te voegen en vul in het veld na het isgelijkteken GetTime in. Er verschijnt nu een extra uitgang aan de switch-node. Hang daar een node function (in het onderdeel function) achter en verbind die ook met je http request. Dubbelklik op de intent en geef die de naam GetTime.

©PXimport

17 Hoe laat is het?

In de function-node schrijf je een javascript-functie, die de tijd uitvoer als een tekst, die door de http request aan Rhasspy wordt doorgegeven om uit te spreken. In die functie maak je eerst een variabele timeString, waaraan je de uitvoer van de methode toLocaleTimeString op een nieuw Date-object toekent. Op het einde van de functie geef je de payload terug, waaraan je de string “Het is” en de tijd toekent. In die tijd vervang je de dubbele punt (:) door de string “ uur “. Als je deze node nu opslaat en de flow uitvoert via Deploy, antwoordt Rhasspy je op je vraag hoe laat het is.

©PXimport

18 Slots

GetTime is een eenvoudige intent, maar complexere intents zoals ChangeLightState bevatten ook slots. Die kun je eenvoudig uit de JSON-code halen in Node-RED. Voeg een nieuwe regel in de switch-node toe en test op ChangeLightState. Hang hieraan een node template (in het onderdeel function) en verbind die ook weer met de http request. Vul in het tekstveld template de code Ik zet de {{ payload.slots.name }} {{ payload.slots.state }} in. Hiermee antwoordt Rhasspy je “Ik zet de woonkamerlamp aan”, als je “Zet de woonkamerlamp aan” vraagt, en hetzelfde voor andere apparaten en toestanden die voor de intent zijn gedefinieerd.

©PXimport

19 Apparaten aansturen

Uiteraard kun je Rhasspy op deze manier ook acties laten uitvoeren, zoals je lampen daadwerkelijk in- en uitschakelen. Hoe dat precies gebeurt, hangt af van wat voor lampen je hebt en welke API deze aanbieden. Voor een REST API gebruik je een http request, voor apparaten die MQTT spreken gebruik je mqtt out en definieer je een mqtt-broker. Uiteraard kun je ook allerlei nodes toevoegen voor extra functionaliteit en dan kun je zo bijvoorbeeld je Philips Hue-lampen via spraak aansturen.

©PXimport

20 En verder

Rhasspy is een heel flexibel systeem voor spraakbesturing. Bijna elk onderdeel kun je wel vervangen of aanpassen. Bekijk zeker de interne documentatie van je installatie. We hebben ons in deze workshop gefocust op de integratie met Node-RED, maar ook met het domoticasysteem Home Assistant is er een uitstekende integratie. Via de http en de WebSocket API en MQTT-boodschappen die het Hermes-protocol volgen, kun je bovendien in principe elk systeem met Rhasspy koppelen. Bezoek zeker ook het Rhasspy-forum waar een behulpzame community actief is.

©PXimport

Meerdere apparaten met Rhasspy

Je kunt Rhasspy ook op meerdere Raspberry Pi’s verspreid in je huis installeren. Eén Raspberry Pi is dan de base of master, en die neemt de spraakherkenning, spraaksynthese en herkenning van de intents op zich. Op de andere Raspberry Pi’s (dat kunnen zelfs Raspberry Pi Zero’s zijn) activeer je alleen de audioverwerking van de microfoon en luidspreker en de herkenning van het wake word. Je spreekt dan tegen een van de satellieten, die herkent het activatiewoord en stuurt je audioboodschap naar de base, die er een intent in herkent. Als je Node-RED-flow dan een antwoord naar de spraaksynthese stuurt, wordt die audio op zijn beurt naar de luidspreker van de juiste satelliet gestuurd.

©PXimport

▼ Volgende artikel
Nieuwe inductiekookplaten van Pelgrim houden je kookstand vast, ook als je de pan verplaatst
© Pelgrim
Huis

Nieuwe inductiekookplaten van Pelgrim houden je kookstand vast, ook als je de pan verplaatst

Pelgrim brengt drie nieuwe inductiekookplaten uit die automatisch herkennen waar een pan staat en instellingen meenemen wanneer je die verplaatst. Bovendien gebruikt de IK4-serie een eigen inductietechniek die stiller en gelijkmatiger werkt dan eerdere modellen.

De kookplaten in de IK4-serie hebben een aparte slidebediening per zone, waarmee je de temperatuur in één beweging instelt. Door pandetectie wordt een pan direct herkend en schakelt de juiste zone in. Verplaats je de pan, dan neemt de kookplaat de ingestelde stand automatisch over op de nieuwe positie. Speciale programma's zoals de Smelt-, Warmhoud- of Aankook-functie (een opwarmfunctie waarmee je iets snel aan de kook kunt brengen)  helpen bij veelvoorkomende bereidingen. De in eigen huis ontwikkelde techniek levert een constant vermogen, waardoor de temperatuur stabiel blijft en het typische aan-uitpendelen uitblijft. Daardoor kun je veel preciezer koken.

Pandetectie uitgelegd

Pandetectie herkent automatisch wanneer je een pan op de kookplaat zet en activeert direct de juiste zone. Bij de IK4-serie wordt een ingestelde kookstand meegenomen wanneer je de pan naar een andere plek verplaatst. Je hoeft daardoor geen instellingen opnieuw te kiezen en kunt tijdens het koken sneller een pan ergens anders neerzetten.

©Pelgrim

De serie is uitgevoerd in kras- en stootvast keramisch glas met een facetrand. De kookzones zijn subtiel gemarkeerd en flexzones bieden ruimte voor pannen van verschillende formaten. Via de ConnectLife-app kun je instellingen aanpassen, timers instellen en recepten raadplegen. Ook onderhoudstips en updates zijn beschikbaar in de app.

Het 60-cm-model IK4064F biedt vier zones, waaronder een grote zone van 23 centimeter, plus boostfuncties, timers en een pauzestand. De 70 centimeter brede IK4072F heeft vier flexibele zones die je kunt combineren tot een groter kookoppervlak. De IK4083F (80 cm) heeft twee ruime flexzones en twee ronde zones voor wie veel plaats nodig heeft. Alle drie hebben per zone een sliderbediening, pandetectie en dezelfde automatische programma’s. De modellen passen in een standaard nismaat.

Beschikbaarheid

De Pelgrim IK4064F (EAN 8715393398178; adviesprijs 829 euro), IK4072F ((EAN 8715393398185; adviesprijs 899 euro) en IK4083F (EAN 8715393398192; adviesprijs 999 euro) zijn per direct verkrijgbaar bij de keukenspeciaalzaak.

©Pelgrim

▼ Volgende artikel
Review TCL Q65H – Betaalbare soundbar met krachtig tv-geluid
© Maikel Dijkhuizen
Huis

Review TCL Q65H – Betaalbare soundbar met krachtig tv-geluid

TCL staat vooral bekend om zijn betaalbare televisies, maar het Chinese merk brengt ook prijsvriendelijke soundbars op de markt. Zo heeft de recent verschenen Q65H interessante specificaties. Naast een forse soundbar met ondersteuning voor Dolby Atmos is er ook een draadloze subwoofer bijgesloten. Hoe bevalt dit nieuwe audiosysteem in de praktijk?

Fantastisch
Conclusie

In een kleine tot middelgrote woonkamer komt de TCL Q65H goed uit de verf. Dankzij meerdere zorgvuldig gepositioneerde audiodrivers, een krachtige subwoofer en een riant piekvermogen creëer je met dit audiosysteem en volwaardige thuisbioscoop dat luid kan spelen. Heb je geen ruimte of budget om een home-cinemaset met losse luidsprekers op te tuigen, dan is deze vriendelijk geprijsde soundbar/subwoofer-combinatie een uitstekend alternatief.

Plus- en minpunten
  • Betaalbaar
  • Stijlvol vormgegeven
  • Ophangsysteem inbegrepen
  • Veel aansluitopties
  • Audiokalibratie via app
  • Ruimtelijk geluid
  • Luide bas
  • Ondersteuning Dolby Atmos en DTS:X
  • Stemmen versterken
  • Geen écht surroundgeluid
  • Matig stereobeeld bij muziek

Anders dan zijn relatief bescheiden prijskaartje van amper 300 euro wellicht doet vermoeden, is de TCL Q65H stijlvol vormgegeven. De soundbar van 1,05 meter heeft een nette afwerking van matzwart kunststof en geborsteld aluminium. De voorkant en beide zijkanten zijn voorzien van speakerstof. Het geheel oogt erg chic.

Dankzij een geringe hoogte van 6,8 centimeter plaats je deze langwerpige speaker moeiteloos voor de meeste televisies. De behuizing zal het beeld niet zo gauw blokkeren. Liever ophangen? Gebruik in dat geval de twee bijgesloten muurbeugels. Het formaat van de subwoofer is met 22 × 36,9 × 27,5 centimeter behoorlijk fors. Reserveer hiervoor een plekje op de vloer.

©Maikel Dijkhuizen

TCL levert onder meer een afstandsbediening, HDMI-kabel en wandmontageset mee.

Soundbar aansluiten

Je verbindt de Q65H zowel via HDMI-eARC als via de optische ingang met een televisie. Daarnaast telt de achterzijde nog een tweede HDMI-poort, zodat je bijvoorbeeld een tv-decoder, blu-ray-speler of gameconsole kunt aansluiten. Verder koppel je via usb eventueel een externe schijf of usb-stick met audiobestanden. Voor soundbarbegrippen heeft dit model veel aansluitopties.

Nadat de soundbar en subwoofer zijn aangesloten, koppel je ze draadloos aan elkaar. Dat gaat met behulp van de pairknop erg vlot. Op een klein display achter het speakerdoek verschijnt de term 'Sub connected'. Eenmaal aangesloten kies je op de sobere afstandsbediening de gewenste bron.

Verder loont het de moeite om direct na het aansluiten de TCL Home-app te installeren. Via de microfoon van de smartphone stemt de soundbar zijn geluid af op diverse akoestische eigenschappen van de luisterruimte. Het resultaat is een betere audioweergave. De kalibratie van deze zogeheten AI Sonic-functie duurt enkele minuten. Je gebruikt de app ook om nieuwe software-updates te installeren en equalizerinstellingen te wijzigen.

©Maikel Dijkhuizen

De achterzijde heeft diverse aansluitingen om een televisie en overige bronnen aan te sluiten.

©Maikel Dijkhuizen

Installeer voor extra opties de TCL Home-app op een smartphone.

Films, series en muziek

TCL vermeldt een totaal piekvermogen van maar liefst 580 watt, waarvan er 150 watt is gereserveerd voor de subwoofer. Deze belofte is niet uit de lucht gegrepen, want de soundbar en basspeaker produceren samen een nogal vol geluid. Bij recente Netflix-streams vliegen de geluidseffecten je om de oren. De fabrikant heeft de actieve audiodrivers in de behuizing naar voren én zijwaarts gericht. Zeker in de beschikbare film- en gamemodus wekt deze opstelling enigszins de illusie van surroundgeluid, al klinkt het gebruik van échte surroundspeakers nog altijd een stuk beter. Desalniettemin is het ruimtelijke geluid een knappe prestatie. Mooi meegenomen is dat de Q65H een Dolby Atmos- en DTS:X-audiospoor kan verwerken.

Tijdens bombastische actiescènes laat de subwoofer zich duidelijk horen. Je kiest met de afstandsbediening tussen drie basniveaus, maar bij de luidste stand kunnen de buren waarschijnlijk meegenieten. Sowieso kan dit audiosysteem erg luid spelen. In combinatie met een ruimtelijk en helder geluid beleef je films en series voortaan intenser. Kun je bepaalde personages moeilijk verstaan, dan druk je gewoon op de Voice-knop van de afstandsbediening. De soundbar versterkt vervolgens menselijke stemmen.

Je kunt de soundbar ook gebruiken om muziek te luisteren. Via de ingebakken bluetooth5.3-module koppel je rechtstreeks een smartphone of tablet. Stream vervolgens een afspeellijst van Spotify, Apple Music of een andere muziekdienst. Hoewel de liedjes best redelijk klinken, haalt de geluidskwaliteit het niet bij een versterker of receiver met losse speakers. Logisch, want de audiodrivers zitten in de langwerpige luidspreker te dicht op elkaar om een duidelijk stereobeeld te realiseren. Voor een achtergrondmuziekje voldoet het prima.

©Maikel Dijkhuizen

Voor liefhebbers van films, series en tv-programma's biedt deze soundbar/subwoofer-combinatie veel meerwaarde.

TCL Q65H kopen?

In een kleine tot middelgrote woonkamer komt de TCL Q65H goed uit de verf. Dankzij meerdere zorgvuldig gepositioneerde audiodrivers, een krachtige subwoofer en een riant piekvermogen creëer je met dit audiosysteem en volwaardige thuisbioscoop dat luid kan spelen. Heb je geen ruimte of budget om een home-cinemaset met losse luidsprekers op te tuigen, dan is deze vriendelijk geprijsde soundbar/subwoofer-combinatie een uitstekend alternatief.