Forum: Mikrocontroller und Digitale Elektronik Sounddatei zeitgenau abspielen


von Durokh (Gast)


Lesenswert?

Hi Leute,
für ein Projekt möchte ich Sounddateien, die auf einem Mikrocontroller 
oder einem Speicherbaustein gespeichert sind, auf die Millisekunde genau 
abspielen.
Die Dateien sind maximal 3 Sekunden lang und haben CD-Qualität. Im SRAM 
können sie aufgrund ihrer Größe wohl kaum gespeichert werden.

Was für Möglichkeiten gibt es da?
An sich bin ich aber noch Neuling auf dem Gebiet - mich würden aber 
Lösungsansätze auf dem Gebiet jetzt schon interessieren.

Der Controller kann vorab die Information bekommen, um welche Datei es 
sich dabei handelt, wenn das bei der Probemlösung helfen sollte.

Wichtig ist letztendlich nur: Es wird ein Signal an den Controller 
gesendet "Spiele (die meinentwegen auch vorgelandene) Sounddatei ab" und 
der legt dann auch direkt los.

Gruß,
Durokh

von TestX .. (xaos)


Lesenswert?

nimm halt nen großen controller bei dem das ganze ins ram passt (3s sind 
ja nicht die welt) ... alles andere wird kompliziert

von Svenska (Gast)


Lesenswert?

Brauchst du wirklich CD-Qualität? Wenn du dich auf 8 kHz, 8 Bit und Mono 
beschränkst, bist du mit 24 KB pro Datei (statt 600 KB) dabei. Die 
passen z.B. bei den größeren AVRs in den Flash mit rein, dann sparst du 
dir einen Extrabaustein. Abspielen kannst du die Daten dann auch direkt 
aus dem Flash z.B. mit einem PWM-Pin. Die Reaktionszeit kannst du dann 
auf wenige Takte, also unter eine Mikrosekunde drücken.

Wieviel Hardware möchtest du denn draußen anschließen und auf welche 
Weise sollen die Daten ausgegeben werden? Mit primitiver Hardware 
schaffst du die Klangqualität sowieso nicht.

von Svenska (Gast)


Lesenswert?

Nachtrag: Wie soll das Signal "Spiele Datei 4 ab" denn überhaupt in den 
Controller reinkommen? USB oder Netzwerk machen das ganze deutlich 
komplizierter als ein Tastendruck oder eine serielle Schnittstelle...

Gib mal mehr Informationen.

von Albrecht H. (alieninside)


Lesenswert?

Da kommt schon ordentlich was an Daten zusammen:

Datenrate:
Stereo:
44100 Samples pro Sekunde x 16 Bit x 2 Kanäle =  1411200 Bit = 176400 
Bytes = ca. 172,26 kBytes pro Sekunde.

Mono:
88200 Bytes/s = ca. 86.13 kBytes pro Sekunde.


Speicherbedarf für eine 3 Sekunden Sounddatei:

Stereo:
516.78 kBytes

Mono:
258,39 kBytes

Die Datenmenge speichern, z.B. 10 Sounddateien = ca. 5 MBytes geht 
problemlos auf einer SD-Karte und genügend schnell auslesen lassen sich 
die Daten von einer SD-Karte über SPI eventuell auch noch:

http://elm-chan.org/docs/mmc/mmc_e.html
(Benchmark)

von PittyJ (Gast)


Lesenswert?

Ich würde einen 8-Bitter AVR vergessen und etwas größeres nehmen.
Bei eine Raspberry Pi wäre z.B. die Hardware komplett vorhanden. 
(Tonerzeugung und Speicherkarte)
Und das Millisekunden genaue Abspielen wäre nur eine Frage der Software. 
Die benötigten Bibliotheken sind alle vorhanden, maximal 1 Tag Aufwand.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Der Pi ist da nicht geeignet, der hat keinen DAC, sondern nur ne PWM und 
das ist dann alles andere als CD Quali.
Ein Userspaceprogramm in nem Betriebsystem hat auch mehr Reaktionszeit 
als 1ms würd ich mal behaupten.

Gibt aber andere ARM bretter mit DAC onboard/chip.

AVR mit SD karte und externem Decoder kann man hier auch knicken, denn 
das Dateiöffnen dauert schon länger als paar ms.

Also nach nem ARM gucken mit onboard DAC oder vllt AVR32

von Bronco (Gast)


Lesenswert?

dsPIC33 vielleicht?

von Frank K. (fchk)


Lesenswert?

Durokh schrieb:
> Hi Leute,
> für ein Projekt möchte ich Sounddateien, die auf einem Mikrocontroller
> oder einem Speicherbaustein gespeichert sind, auf die Millisekunde genau
> abspielen.
> Die Dateien sind maximal 3 Sekunden lang und haben CD-Qualität. Im SRAM
> können sie aufgrund ihrer Größe wohl kaum gespeichert werden.
>
> Was für Möglichkeiten gibt es da?
> An sich bin ich aber noch Neuling auf dem Gebiet - mich würden aber
> Lösungsansätze auf dem Gebiet jetzt schon interessieren.

dsPIC33FJ128MC802 oder ...MC804. Der hat einen 14 Bit Stereo Audio DAC 
eingebaut, der Abtastraten von 100kHz schafft. Dahinter ein OpAmp oder 
ein Verstärker mit differentiellen Eingängen, und das wars. Als 
Speichermedium sollte es auch eine MicroSD-Karte tun.

fchk

von Mark B. (markbrandis)


Lesenswert?

Durokh schrieb:
> Die Dateien sind maximal 3 Sekunden lang und haben CD-Qualität.

CD-Qualität = Stereo, 16 Bit Quantisierung, 44100 Hz Abtastrate

Und Du bist sicher, dass Du bei solch kurzen Dateien tatsächlich Stereo 
brauchst? Mono spart schon mal die Hälfte an Daten. 50% Einsparung würde 
ich immer mitnehmen, wenn es nicht zwingend anders sein muss.

Auch könnte z.B. die halbe Abtastrate ausreichen. Kommt halt drauf an. 
Es wird sich wohl kaum um klassische Musik mit einem ganzen Orchester (= 
großer Frequenzbereich) und hoher Dynamik handeln :-)

von Jonas B. (jibi)


Lesenswert?

Pi + Usb-Soundkarte? Die gibt's doch schon fürn paar Euro.

Gruß Jonas

von Albrecht H. (alieninside)


Lesenswert?

Martin Wende schrieb:
> ...
> AVR mit SD karte und externem Decoder kann man hier auch knicken, denn
> das Dateiöffnen dauert schon länger als paar ms.
> ...

Das ließe sich umgehen, indem man entweder gar kein Dateisystem 
verwendet, oder alle Sounds in einer einzigen Datei zusammenfasst, dann 
muss nur einmal geöffnet werden.

Alternativ könnte man auch ein serielles Flash verwenden, (PC -> 
USB-RS232 -> Mikrocontroller -> serielles Flash), ebenfalls ohne 
spezielles Dateisystem natürlich.

so eines z.B.:
http://de.farnell.com/micron/n25q064a13ese40e/flash-seriell-64mb-3v-8wsoic/dp/2253680

Ich versuch mir einfach gerade vorzustellen, wie ich das mit einem 
ATmega, (man nimmt halt gerne erst mal was man schon kennt),tatsächlich 
und in absehbarer Zeit hinbekommen würde.
Ja, ich würde es tatsächlich erst mal mit der SD-Karte ohne 
FAT-Dateisystem probieren, zur Ausgabe käme eventuell das hier in Frage:
http://de.farnell.com/wolfson-microelectronics/wm8569seds-rv/codec-stereo-24bit-28ssop/dp/1776257

von Dave (Gast)


Lesenswert?

Martin Wende schrieb:
> Der Pi ist da nicht geeignet, der hat keinen DAC, sondern nur ne PWM und
> das ist dann alles andere als CD Quali.

du weißt aber schon dass das audiosignal auf einer cd mit einem 1-bit 
d/a wandler (was irgendwie auch eine pwm ist) decodiert wird ;-)

von Bronco (Gast)


Lesenswert?


von Durokh (Gast)


Lesenswert?

Also erstmal vielen Dank für die verschiedenen Lösungsvorschläge!


@ markbrandis: Mono-Sound wäre auch noch in Ordnung. Vielleicht war das 
zu optimistisch gegriffen.
Die Tonqualität sollte allerdings schon relativ verlustfrei sein. 
Sprache (ein ganz kurzes Wort) sollte ohne Rauschen zu hören sein.


@  Svenska:
Der Controller wartet eigentlich nur auf ein Signal auf einem bestimmten 
Pin und legt daraufhin los den Sound auszugeben.
Die Ausgabe soll über Aktivlautsprecher erfolgen.


SD Karten benötigen meines Wissens eine zu lange Zugriffszeit.

Dem Controller könnte allerdings problemls zuvor (zeitunkritisch) die 
Sounddatei bspw. von einer SD-Karte überspielt werden. Wichtig ist nur 
für
Auf ein Signal hin an einem Pin soll der Controller dann sofort die 
Datei abspielen. Letzteres ist für mich letztendlich relevant.

@alieninside: Wie genau kann ich mir das Timing beim WM8569SEDS/RV 
vorstellen? Kenne mich bisher noch/nur grob mit der Programmierung der 
Atmega-Serie aus.

@ Bronco : Aus "Trainingsgründen" würde mir eine Eigenbauvariante besser 
gefallen. Außerdem bin ich mir auch hier in Sachen Timing sehr unsicher 
und hätte da kaum einen Einfluss drauf, oder?

von Falk B. (falk)


Lesenswert?

@  Durokh (Gast)

>Die Tonqualität sollte allerdings schon relativ verlustfrei sein.

Verlustfrei ist gar nichts. Bestenfalls mehr oder weniger 
verlust(rausch)arm.

>Sprache (ein ganz kurzes Wort) sollte ohne Rauschen zu hören sein.

Dafür reichen 8kHz in 8 Bit, ggf, nichtlinear in 12 Bit, aka 
Telefonqualität. Ggf etwas mehr Abtastrate, 11 oder 22kHzs sind 
Standard.

von Albrecht H. (alieninside)


Lesenswert?

Durokh schrieb:
> ...
> @alieninside: Wie genau kann ich mir das Timing beim WM8569SEDS/RV
> vorstellen? Kenne mich bisher noch/nur grob mit der Programmierung der
> Atmega-Serie aus.
> ...

Ich weiß jetzt nicht genau was du mit Timing meinst, ich habe mit dem 
WM8569SEDS/RV selbst noch nichts gemacht, sondern einfach nur nur nach 
dem erstbesten 16Bit-Stereo-DAC gegoogelt, steht vermutlich wie immer 
alles im Datenblatt.

Es muss ja auch nicht unbedingt der WM8569SEDS/RV sein, von WOLFSON 
MICROELECTRONICS gibt es auch noch einfachere DACs z.B. den WM8762GED/RV
http://de.farnell.com/wolfson-microelectronics/wm8569seds-rv/codec-stereo-24bit-28ssop/dp/1776257

Bei dem hab ich mal kurz ins Datenblatt geschaut, auf Seite 10 "DIGITAL 
AUDIO INTERFACE" gibt es ein Timing-Diagramm zur Audiodatenübermittlung, 
das sieht doch noch recht übersichtlich aus:

Drei Leitungen / Signale:

1. LRCIN ("Sample rate clock input", startet Datenübernahme für linken / 
rechten Kanal, high für linken Kanal, low für rechten Kanal)

2. BCKIN ("Bit clock input", Datenübertragungstakt / Clock, 
Datenbitübernahme von DIN bei fallender Flanke)

3. DIN ("Serial audio data input", Audiodatenbits linker / rechter 
Kanal)

zusätzlich wird noch die MASTERCLOCK "MCLK" benötigt, deren Frequenz ist 
ein Vielfaches der Samplerate also z.B. 128 x 44.1 kHz = 5.6448 MHz.

Vermute mal, dass der DAC sofort loslegt, wenn die vier Signale anliegen 
...

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Dave schrieb:
> Martin Wende schrieb:
>> Der Pi ist da nicht geeignet, der hat keinen DAC, sondern nur ne PWM und
>> das ist dann alles andere als CD Quali.
>
> du weißt aber schon dass das audiosignal auf einer cd mit einem 1-bit
> d/a wandler (was irgendwie auch eine pwm ist) decodiert wird ;-)

War das nich SACD?
Dafür ist die Samplerate aber auch pervers hoch (2,8MHz).

CD hat PCM also 44,1khz bei 16bit Stereo.

Beim Pi hab ich mal was von ner 12bit PWM bei paar KHz gelesen.

Also ja ich weis was Sache ist =P

von axelr. (Gast)


Lesenswert?

Bau das Elm-Chan Dingesns mit dem Attiny861 und den Tasten zum anwählen 
der Datei. Das passt doch, oder sind die Reaktionszeiten denn soo eng? 
Ich habe hier sowas mal aufgebaut. ich denke nicht, das man eine 
nennenswerte Verz. hört. Und die Qualität ist 1A mit dem HighSpeed Timer 
PWM dings.

von holger (Gast)


Lesenswert?

>Auf ein Signal hin an einem Pin soll der Controller dann sofort die
>Datei abspielen. Letzteres ist für mich letztendlich relevant.

Warum muss das sofort sein? Ob die Audiodatei nach 1ms oder nach
10ms abgespielt wird merkt kein Mensch.

von Andreas B. (andreasb)


Lesenswert?

holger schrieb:
>>Auf ein Signal hin an einem Pin soll der Controller dann sofort die
>>Datei abspielen. Letzteres ist für mich letztendlich relevant.
>
> Warum muss das sofort sein? Ob die Audiodatei nach 1ms oder nach
> 10ms abgespielt wird merkt kein Mensch.

Kommt darauf an, 10ms hörst du wenn du einen Vergleich hast, also wenn 
ein Ton 10ms später ertönt als der erste ist es hörbar.

PittyJ schrieb:
> Ich würde einen 8-Bitter AVR vergessen und etwas größeres nehmen.
> Bei eine Raspberry Pi wäre z.B. die Hardware komplett vorhanden.
> (Tonerzeugung und Speicherkarte)
> Und das Millisekunden genaue Abspielen wäre nur eine Frage der Software.

Vergiss es, die Verzögerung eine Soundkarte ist definitiv grösser als 
1ms

> Die benötigten Bibliotheken sind alle vorhanden, maximal 1 Tag Aufwand.
Das Stimmt...

Jonas Biensack schrieb:
> Pi + Usb-Soundkarte? Die gibt's doch schon fürn paar Euro.
>
> Gruß Jonas

USB Soundkarte hat noch mehr Verzögerung...


Ich habe das ganze mal gemessen (Standardsoundkarte an Notebook und PC), 
von Line OUT an line IN, sind bei einem normalen PC über 20ms 
Verzögerung.

Professionelles Equipment dürfte die 1ms locker schaffen, habe da aber 
nicht soviel Erfahrung...


mfg Andreas

von holger (Gast)


Lesenswert?

>Kommt darauf an, 10ms hörst du wenn du einen Vergleich hast, also wenn
>ein Ton 10ms später ertönt als der erste ist es hörbar.

Ja, ok. Echoeffekt.
Den Vergleich hat er ja aber nicht. Mono reicht ihm.
Es soll ein Wort ausgegeben werden. Ich frag mich wo das
Problem ist. Ob das nach 1ms, 10ms oder 100ms geschieht
ist doch Banane. Hauptsache nicht erst nach 1s. Das wäre
so eine Verzögerung wo ich sagen würde zu schlapp.

von Andreas B. (andreasb)


Lesenswert?

holger schrieb:
>>Kommt darauf an, 10ms hörst du wenn du einen Vergleich hast, also wenn
>>ein Ton 10ms später ertönt als der erste ist es hörbar.
>
> Ja, ok. Echoeffekt.

Genau...

> Den Vergleich hat er ja aber nicht. Mono reicht ihm.
> Es soll ein Wort ausgegeben werden.

Habe ich überlesen, da es mal wider nicht im Anfangspost stand...

> Ich frag mich wo das
> Problem ist. Ob das nach 1ms, 10ms oder 100ms geschieht
> ist doch Banane. Hauptsache nicht erst nach 1s. Das wäre
> so eine Verzögerung wo ich sagen würde zu schlapp.

Stimme ich dir zu, aber jeder der Googelt kriegt eine Antwort auf die 
erste Frage;-)

Zudem: Das Problem mit der Verzögerung bezieht sich nur auf die 
Soundkarte.

Nimmt er einen AVR oder ähnliches und eine SD Karte sehe ich kein 
Problem mit der Verzögerung, die wird irrelevant klein sein...



mfg Andreas

von fritz (Gast)


Lesenswert?

Stm32f4discovery hat alles on board. gibts fuer 15 euro

von Albrecht H. (alieninside)


Lesenswert?

Da hab ich hier:
Beitrag "Re: Sounddatei zeitgenau abspielen" 
versehentlich einen falschen Link eingefügt, mit "einfacherem" DAC war 
der hier gemeint:
WOLFSON MICROELECTRONICS - WM8762GED/RV - DAC, STEREO, 24BIT,8SOIC
http://de.farnell.com/wolfson-microelectronics/wm8762ged-rv/dac-stereo-24bit-8soic/dp/1776275RL

von Jobst M. (jobstens-de)


Lesenswert?

Dave schrieb:
> du weißt aber schon dass das audiosignal auf einer cd mit einem 1-bit
> d/a wandler (was irgendwie auch eine pwm ist) decodiert wird ;-)

Du weißt aber schon, daß das Signal dazu erst von den auf der CD 
enthaltenen 16 Bit in 1 Bit umgewandelt werden muß!? :-)

Das Verfahren ist Noise-Shaping / Delta-Sigma (MASH bei Technics, 
Bitstream bei Philips, Super Bit Mapping oder Pulse bei Sony, ...)

Der Vorteil dieser Wandler ist, daß man nicht viele hochgenaue 
Widerstände benötigt und das die Nulldurchgangsverzerrungen minimal 
sind. Nachteil ist die benötigte hohe und stabile Taktfrequenz.

Aber auf einer normalen Audio-CD sind für beide Kanäle volle 16 Bit 
breite Datenworte gespeichert.



Gruß

Jobst

von Durokh (Gast)


Lesenswert?

Zu der maximalen Verzögerung von 1ms:
Ich forsche zur Wahrnehmung von auditiven Reizen und dazu muss die 
Präsentation eines Reizes haargenau dann geschehen, wann ich es möchte. 
5 ms Verzögerung sind da bereits Welten.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Dann bleibt da echt nur der direkte Weg ala Flashspecher ohne 
Dateisystem.
Also die Samples RAW im Flash abgelegt und der Prozessor schaufelt das 
nurnoch zum DAC durch.

Den Flash kann man dann ja per UART beschreiben.

Bisher war ja nur die Rede von 1 Sound pro Gerät oder?

von Durokh (Gast)


Lesenswert?

Genau, ein einziger Ton reicht mir vollkommen aus.

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.