Forum: Mikrocontroller und Digitale Elektronik Audio im LAN


von Bayer (Gast)


Lesenswert?

Hallo,

ich baue demnächst und werde natürlich auch Netzwerk verlegen.
Das brachte mich auf die Idee, eine kleine Hardware und Software zu
entwickeln (AVR bspw.), um Audio Streams von meinem PC zu aktiven Boxen 
zu transportieren. Ich möchte den ENC2860 nutzen, von dem hier schon 
einiges berichtet wurde.
Habt ihr damit Erfahrung? Wie krieg ich die Musik vom PC ins Netzwerk?
Danke für eure Antworten!

von Tobias P. (hubertus)


Lesenswert?

Vom PC ins Netzwerk ist kein Problem, dafür gibts Programme. Der VLC 
Media Player kann das Beispielsweise.
Ich denke, was du bauen willst, ist eher ein kleines Gerät, das die 
Audiostreams übers Netzwerk dann wieder empfangen und an Lautsprechern 
ausgeben kann oder?

von Marko (Gast)


Lesenswert?

Das willst Du wahrscheinlich nicht hören, aber ... wäre da nicht ein 
Mini-ITX-Board die günstigere, einfacherere und schnellere Möglichkeit?

So Aktivboxen mit eingebautem PC mit WLAN hätten schon was ...

von Sven P. (Gast)


Lesenswert?

Da gibts doch son Platinchen mit ARM, Linux, Ethernet und USB drauf, 
kostet um die 180 Steine, glaub ich (-> Conrad). Das verbauen, dann ne 
USB-Soundkarte dazu, fädisch.

Hierson Dingen: http://www.dilnetpc.com/dnp0069.htm

von Latenz (Gast)


Lesenswert?

An die Latenz denken.

von Andreas W. (andreasw) Benutzerseite


Lesenswert?

Für 180 Euro kann man sich aber auch etwas fertiges kaufen. Ich schätze 
viel teurer werden die BARIX Sachen nicht sein:
http://www.sphinxcomputer.de/barix/audio-over-ip/m51-g52.html

Vielleicht gibt es auch eine LAN-Alternative zum Devolo dLAN Audio 
extender?

Zum selber Basteln gibt es hier eine Projektübersicht: 
WebRadio Clients
Dann muss man nur noch das Latenzproblem lösen...

von Martin P. (billx)


Lesenswert?

gibt auch so nen würfel vom apple

von Heckenpenner (Gast)


Lesenswert?

Bei mir macht eine NSLU2 unter Debian mit USB-Soundkarte die Musik.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Martin Pfeiffer wrote:
> gibt auch so nen würfel vom apple

Airport Express, hat auch WLAN und Digitalausgang. Aber die Latenz ist 
beträchtlich, also nur für Musik geeignet.

von Alex (Gast)


Lesenswert?

Ich hab sowas mal gemacht - auf M16C und ENC Basis. Funktioniert
zusammen mit einem virtuellen Audio Device Treiber unter Windows.
Unter Windows lassen sich mehrere Instanzen des Treibers installieren,
sodass man bspw. Winamp mehrmals starten kann und verschiedene Kanäle
parallel streamen kann. Funktioniert dank des Pattern Match Filters
im ENC total problemlos. An jedem Aktiv-Boxen Paar steht eine kleine 
Ethernet Box.
Latenz ist (für meine Bedürfnisse) kein Problem - 2,5s Buffer scheinen 
mir ok
Hardware kostet mich ca. 50€. Hauptkosten: Platinen, Stecker, M16C, 
SRAM, ENC, SP/DIF und Analog DA Wandler

@Bayer: Ich kann dich also nur ermutigen - es geht.

von Christian C. (Gast)


Lesenswert?

Hi!

Alex wrote:
> Ich hab sowas mal gemacht - auf M16C und ENC Basis. Funktioniert
> zusammen mit einem virtuellen Audio Device Treiber unter Windows.
> Unter Windows lassen sich mehrere Instanzen des Treibers installieren,
> sodass man bspw. Winamp mehrmals starten kann und verschiedene Kanäle

Meinst Du evtl. "Virtual Audio Cable"? Oder hast Du selbst einen Treiber 
geschrieben?

> parallel streamen kann. Funktioniert dank des Pattern Match Filters
> im ENC total problemlos. An jedem Aktiv-Boxen Paar steht eine kleine
> Ethernet Box.
> Latenz ist (für meine Bedürfnisse) kein Problem - 2,5s Buffer scheinen
> mir ok
> Hardware kostet mich ca. 50€. Hauptkosten: Platinen, Stecker, M16C,
> SRAM, ENC, SP/DIF und Analog DA Wandler
>
> @Bayer: Ich kann dich also nur ermutigen - es geht.

Würdest Du Dein Projekt auch öffentlich vorstellen?

Ich selbst habe mir mal eine einfache MP3 Streaming-Lösung über UDP 
gebaut.
Auf der PC Seite habe ich ein WinAMP-Plugin geschrieben, das die rohen 
Audio-Daten an einen kleinen ebenfalls selbst geschriebenen Dienst 
weiterreicht (per TCP) und dort dann in Echtzeit in MP3 (per LAME.DLL) 
kodiert und dann per UDP ins Netz schickt.

Empfangen wurde der UDP-MP3 Stream dann von diesem Player hier: 
http://www.kreapc.de/mp3_about.php.html
Den hatte ich noch rumfliegen.

Inspiriert wurde ich durch die MP3-Streaming Hardware aus der c't 
mittels des XPorts.

Sollen es denn rohe Audio-Daten sein oder soll es komprimiert sein?

Ich finde, schwierig und richtig interessant wird erst eine 
Multi-Room-Lösung. Da wird es dann aber schon recht kompliziert, um 
synchrones Abspielen in allen Räumen zu gewährleisten.

Gruss,
Christian

von Alex (Gast)


Lesenswert?

>Oder hast Du selbst einen Treiber geschrieben?
ich kenne zwar Virtual Audio Cable, das ist aber nicht das gleiche.
Ich hab selbst einen Treiber geschrieben.

>richtig interessant wird erst eine Multi-Room-Lösung
Wie gesagt, mehrere Streams parallel - in jedem Raum beliebig wählbar,
das ist aus meiner Sicht "Multi Room"

>Sollen es denn rohe Audio-Daten sein oder soll es komprimiert sein?
PCM - kein Problem über normalse Netzwerk. Ein Vorteil der Windows 
Audio-Treiber Architektur. Wenn ich ein PCM Device im Sound System 
anmelde, bekomme ich im Treiber PCM angeliefert, egal, ob oben MP3 oder 
sonstwas reingesteckt wird. Das Signal muss dann nur noch "gestreamt" 
werden.

>synchrones Abspielen in allen Räumen
ich hab ne DA-Wandlung mit PLL Lösung gemacht und einen Algorithmus 
ausgeknobelt, der beim Zuschalten eines Lautsprechers die gesamte Gruppe 
synchronisiert. Beim Zuschalten ist also in der Gruppe ca. 2s Ruhe - und 
dann geht es synchron weiter. In 8 Stunden kontinierlichem Abspielen 
habe ich kein hörbares Echo feststellen können.

>Würdest Du Dein Projekt auch öffentlich vorstellen?
Hmm.. generell ja - allerdings würde ich mich in den Allerwertesten 
beißen, wenn jemand Geld damit macht. Ich weiß bisher nicht, wie ich das 
unterbinden könnte, deshalb hab ichs bisher nicht gemacht. Meine Lösung 
ist (soweit ich weiß) die einzige, die tatsächlich sample-synchron im 
Rahmen der PLL Genauigkeit streamen kann. Man könnte also auch 
Verzögerungen im Raster von n*5,1ms implementieren.

von Florian___ (Gast)


Lesenswert?

Es gibt einige OpenSource Lizenzen die eine kommerzielle Nutzung 
ausschließen

von Christian C. (Gast)


Lesenswert?

Alex wrote:
>
>>synchrones Abspielen in allen Räumen
> ich hab ne DA-Wandlung mit PLL Lösung gemacht und einen Algorithmus
> ausgeknobelt, der beim Zuschalten eines Lautsprechers die gesamte Gruppe
> synchronisiert. Beim Zuschalten ist also in der Gruppe ca. 2s Ruhe - und
> dann geht es synchron weiter. In 8 Stunden kontinierlichem Abspielen
> habe ich kein hörbares Echo feststellen können.

Sehr cool! Könntest Du denn ganz grob erklären, was Du mit "DA-Wandlung 
mit PLL-Lösung" meinst? Eine Art Software-PLL oder wie muss ich mir das 
vorstellen?

>>Würdest Du Dein Projekt auch öffentlich vorstellen?
> Hmm.. generell ja - allerdings würde ich mich in den Allerwertesten
> beißen, wenn jemand Geld damit macht. Ich weiß bisher nicht, wie ich das
> unterbinden könnte, deshalb hab ichs bisher nicht gemacht. Meine Lösung
> ist (soweit ich weiß) die einzige, die tatsächlich sample-synchron im
> Rahmen der PLL Genauigkeit streamen kann. Man könnte also auch
> Verzögerungen im Raster von n*5,1ms implementieren.

Okay, ich kann das verstehen. Es wäre aber trotzdem sehr schade, wenn es 
auf Dauer in Deiner Schreibtischschublade verschwindet. Generell 
entnehme ich aber Deiner Haltung eher, dass Du lieber Geld damit machen 
möchtest, als einfach nur die Freude daran zu haben, dass Du es 
konstruiert hast, oder? :-)

von Alex (Gast)


Lesenswert?

>Generell entnehme ich aber Deiner Haltung eher, dass Du lieber Geld damit >machen 
möchtest
nein! privat, Hobby, Spass. Wie gesagt, wenn ich wüßte, wie ich machen 
kann, dass auch andere nix verdienen, würde ich veröffentlichen! 
_Vorschläge???_

>DA-Wandlung mit PLL-Lösung"
Habe mir einen hochpräzisen PLL Baustein (PLL1706 oder so) besorgt, der
den Grundtakt für den DA Wandler macht. Somit gibt es eine genaue 
Zeitbasis. Die ist in jedem Streaming Client verbaut. Dadurch arbeitet 
"jeder für sich" genau und über ein SW-Protokoll werden alle zueinander 
synchronisiert.

von Alex (Gast)


Lesenswert?

>Es gibt einige OpenSource Lizenzen
Wie geht das konkret? Schreibe ich einen Header in jede C Datei
Wie kann ich das bei der Hardware machen?

von Bayer (Gast)


Lesenswert?

Das was Alex gemacht hat, scheint so ziemlich genau das
zu sein, was ich brauche.

@Alex:
Gibts dazu auch eine Fernbedienung oder ähnlich?
Kann man das nachbauen?

von Christian C. (Gast)


Lesenswert?

Alex wrote:
>>Es gibt einige OpenSource Lizenzen
> Wie geht das konkret? Schreibe ich einen Header in jede C Datei
> Wie kann ich das bei der Hardware machen?

Bei den Quelltexten auf jeden Fall. Das Urheberrecht bleibt ja bei Dir 
je nach Lizenz. Du könntest z.B. eine Creative Commons Lizenz nehmen, 
die kommerzielle Nutzung ausschliesst.

Zur Hardware: Ein Copyright-Vermerk und der Hinweis, dass eine 
kommerzielle Nutzung nicht ohne Deine Zustimmung stattfinden darf, 
müsste doch genügen, oder? Evtl. hier auch eine Creative Commons Lizenz?

Aber ich bin da sicherlich kein Experte.
Was meinen denn die anderen dazu?

Schau Dir doch mal private Projekte im Netz an, die eine private Nutzung 
erlauben, aber eine kommerzielle Nutzung verbieten. Was für Lizenzen 
benutzen die denn?

Du kannst ja auch sowas wie Dual-Licensing machen. Einmal für die 
Community eine OpenSource-Lizenz und für die kommerzielle Nutzung Deine 
eigene Lizenz.

Gruss,
Christian

von Christian C. (Gast)


Lesenswert?

Alex wrote:

>>DA-Wandlung mit PLL-Lösung"
> Habe mir einen hochpräzisen PLL Baustein (PLL1706 oder so) besorgt, der
> den Grundtakt für den DA Wandler macht. Somit gibt es eine genaue
> Zeitbasis. Die ist in jedem Streaming Client verbaut. Dadurch arbeitet
> "jeder für sich" genau und über ein SW-Protokoll werden alle zueinander
> synchronisiert.

Übermittelst Du mit den Audio-Samples noch eine Art Clock-Information, 
auf die Du die Clients dann immer wieder synchronisierst?

Hintergrund der Frage: Muss es denn unbedingt eine PLL sein, oder nutzt 
Du nur die Tatsache, dass diese PLL hier sehr genau läuft und kaum 
driftet. Könnte es nicht sonst auch ein sehr genauer Oszillator sein?

von Alex (Gast)


Lesenswert?

>Übermittelst Du mit den Audio-Samples noch eine Art Clock-Information
Nein, wenn ein Gerät beginnt, den Stream zu empfangen, dann liest es
zunächst nur den aktuellen Framecount aus und sendet einen Sync Frame, 
in dem steht, dass "100 Frames später" alle neu anfangen sollen. Die die 
den Sync Frame empfangen haben dann genug Zeit, die aktuelle Übertragung 
zu unterbrechen, die Puffer Queue zu leeren usw.

>oder nutzt Du nur die Tatsache, dass diese PLL hier sehr genau läuft und kaum
>driftet
wegen der geringen Drift, ja.

Das Streaming selbst läuft dann in Echtzeit (I2S Datenstrom ist direkt 
an DMA gekoppelt. Die DMA kann direkt auf der Puffer-Queue arbeiten und 
hat somit immer Futter. Die PLL zusammen mit dem DMA Mechanismus scheint 
eine gute Kombination zu sein, was das synchrone abspielen angeht.

Sollte mal ein Frame verloren gehen (kommt nahezu nicht vor in meinem 
LAN), wird ein Dummy eingefügt, um die Synchronizität nicht zu 
zerstören.

von Peter... (Gast)


Lesenswert?

Das hört sich sehr interessant an.
Veröffentlichen???

von Klaus H. (klaushuber)


Lesenswert?

abo

von Martin (Gast)


Lesenswert?


von Der F. (der9gast)


Lesenswert?

abo abo abo :-) sehr geil

Wobei ich es noch net ganz gerafft habe..

Es soll ein Audio stream im Netzwerk zu Boxen in mehreren Räumen 
gestreamt werden. Mit PC als "Sender" und der Empfänger soll eine 
selbstgebaute Blackbox werden, aus der die Audiodaten auf die Boxen 
kommen?

mfg

von Martin (Gast)


Lesenswert?

jo.

Und das was Alex gemacht hat ist, mehrere Streams ins Netzwerk und in 
der "Blackbox" kannst du den gewünschten Stream auswählen. So habe ich 
es verstanden.

von Der F. (der9gast)


Lesenswert?

Aha, also der Output is die 'Netzwerkkarte mit "normalen" Protokoll UDP?

verstehe langsam die Schwierigkeiten..werde hier mal mit lesen.

danke

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

anbei mal zwei Fotos von dem Ding. Hinter der Frontblende sitzt leider
nur eine LED - blinken, Dauerlicht...
Ich will demnächst noch ein kleines Display einbinden - falls jemand ein 
preiswertes Display weiß... (2-3 Zeilen, vorzugsweise SPI)

An der Rückseite ist Line-Out, SP/DIF, Power und Ethernet zu sehen.

An jedem Boxenpaar steht so ein Ding, habe derzeit 4 Stück in Betrieb.
Gehäuse ist von Conrad.

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

hier das zweite. Als Frontplatte kann man quasi einbauen, was man will, 
muss nur durchsichtig sein wegen LED und Fernbedienung (RC5). Hab
mal aus Spass was zurechtgeschnitzt...

von Alex (Gast)


Lesenswert?

Hi,

sorry für den dreifach Post - will mich wirklich nicht wichtig machen 
oder so, wollte aber doch noch auf die letzten Fragen antworten...

>Aha, also der Output is die 'Netzwerkkarte mit "normalen" Protokoll UDP?
Ja, in UDP ist natürlich noch ein (eigenes) Streaming Protokoll 
eingebaut.
Flow Control, Sync Frames falls sich einer zuschaltet, Feedback des 
Fernbedienungssignals an den PC (Fast forward, rewind, next, Pause, 
Play, etc...).


>Und das was Alex gemacht hat ist, mehrere Streams ins Netzwerk und in
>der "Blackbox" kannst du den gewünschten Stream auswählen. So habe ich
>es verstanden.
ja, ja, richtig

von Joee (Gast)


Lesenswert?

Tolles Projekt, jetzt meine Frage:

1. Warum werden die Streams nicht übers Stromnetz übertragen 
(Powerline-LAN), dann spar ich mir die Netztwerleitung und kann es 
überall im Haus oder Garten nutzen.

von Christian C. (Gast)


Lesenswert?

Hallo Alex,

veröffentlichst Du zu Deinem Projekt noch etwas oder planst Du einen 
kommerziellen Weg?

Gruß
Christian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.