Forum: Mikrocontroller und Digitale Elektronik Zeitgenaues Abspielen von Sounddateien


von Durokh (Gast)


Lesenswert?

Hi zusammen,
vor längerer Zeit habe ich mich zu folgender Problematik hier schonmal 
erkundigt, hatte dann aber bis vor kurzem keine Zeit mich damit zu 
beschäftigen. Jetzt endlich geht es aber wieder weiter...
Der alte Thread:
Beitrag "Sounddatei zeitgenau abspielen"

Nochmal zusammengefasst:
Ich möchte kurze Sounddateien, auf die Millisekunde genau abspielen. Ich 
arbeite in der Forschung und da ist es für uns sehr wichtig ein 
Tonsignal zu einem genauen Zeitpunkt abzuspielen. Das bedeutete, auf ein 
Signal hin soll sofort eine Sounddatei abgespielt werden.
5 ms oder sogar 10 ms Verzögerung sind für uns schon Welten (und lassen 
sich inzwischen sogar softwaremäßig über Windwos lösen, wenn man 
entsprechende packages für Matlab besitzt).
Die Softwarelösung weist aber eine (verhältnismäßig) breite Streuung 
auf. Somit können wir nicht einen Ton einfach 10 ms VOR dem gewünschten 
Zeitpunkt abspielen. Klar, der streut dann zumindest um den gewünschten 
Zeitpunkt, aber am Ende ist das doch alles Mist.

Daher möchte ich für uns nun eine Hardwarelösung entwickeln.

Die Soundspezifikationen:
- Abspielen eines gespeicherten Sounds auf die Millisekunde genau
- Monosound
- Soundqualität: Telefonqualität ist absolutes Minimum. Je höher desto 
besser ...
- Dauer: max. 3 Sekunden

Lösungen über Arduino oder ähnliche Boards garantieren nicht die 100% 
ige Zeitgenauigkeit, die ich benötige.

SD-Karten sind zu langsam (benötigen mehrere MS, bis sie die Daten 
liefern)

Nun war die Lösung des vergangenen Threads, dass man sehr kleine 
Sounddateien auch direkt auf einem IC mit großem RAM speichern könne und 
von dort dann direkt abspielen lassen könnte.
Bei großen Dateien ist hier natürlich Schluss...das ist natürlich dann 
ein Problem.


Wichtige Info:
Ich weiß WANN ich eine Sounddatei abspielen werde. Sprich, "preloaden" 
wäre möglich. Hauptsache, wenn ich dem IC das GO gebe, soll er sofort 
und ohne Verzögerung den Sound abspielen.

Nun brauche ich einfach ein paar Stichwörter / Ideen, wonach ich suchen 
soll bzw. was ich mir anlesen sollte zu folgender Idee:

Ich habe einen IC und eine SD Karte. Nun müsste es doch möglich sein, 
einen Puffer im IC zu haben, der sich die Daten von der SD Karte holt. 
Wenn dann dem IC das GO Signal gegeben wird, spielt er eben den Sound ab 
(also natürlich über einen DA-Wandler..) (ist ja im Puffer) und lädt 
parallel dazu die Daten von der SD Karte nach.

Das müsste doch hinhauen, oder?

Nun bin ich leider relativ neu in diesem ganzen IC-Bereich und mir fehlt 
daher die Orientierung, wie ich das nun angehen soll. Wonach genau muss 
ich suchen und wie sollte ich mein Vorhaben grob strukturieren?

Vielen Dank für die Hilfe!
Gruß,
Durokh

von Harald (Gast)


Lesenswert?

Wenn Du preloaden kannst dann spielt die Zeitverzögerung der SD keine 
Rolle. Im Grunde müsstest Du z.B. das folgende Projekt nur geringfügig 
anpassen, um den gewünschten Effekt zu erzielen:
http://elm-chan.org/works/sd20p/report.html

Anpassen deshalb, weil das Projekt jetzt bei Auswahl eines Pins erst 
anfängt, den Song zu holen. Man könnte das soweit so lassen, man 
bräuchte allerdings einen Triggerpin, der dann tatsächlich die 
Ausführung beginnen lässt.

von John-eric K. (mockup)


Lesenswert?

Wie wäre es damit
http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF204176

Die Soundfiles liegen im Nand(512-1024MBit)/Nor(128 Mbit) Flash und 
können direkt über die Adresse angesprochen werden. So weit ich weiß 
kann der Flash auch über den Bootloader verändert/upgedated werden. Noch 
mal nachlesen.

Sofern du immer die gleiche Abtastrate hast sollte sich auch der 
Transfer direkt per DMA zum DAC lösen lassen.

von Manfred F. (manfred_f)


Lesenswert?

Durokh schrieb:
> Lösungen über Arduino oder ähnliche Boards garantieren nicht die 100%
> ige Zeitgenauigkeit, die ich benötige.

Was hat bitte die Art des Boards damit zu tun? Letztendlich kommt es nur 
darauf an wie gut du programmieren kannst.

von Jürgen (jliegner)


Lesenswert?

Für das Projekt scheidet ein Hardware MP3 Decoder wie VS10xx sicher aus, 
da hierdurch ja schon unkalkulierbare Verzögerungen auftreten können. Da 
die Sounddaten fix sind ist es auch nicht nötig das im RAM zu haben. Man 
könnte aber einen Controller mit viel Flash (STM32F4 discovery z.B. mit 
1Mb Flash) nehmen und dort jeweils die ersten Blöcke der Sounddateien 
ablegen. Der Rest kommt dann von SD-Karte. Hängt aber auch von der 
Gesamtmenge benötigter Sounddateien ab. Mit diesem Verfahren kann man zu 
mindestens den Start ziemlich genau hin bekommen. Die Geschwindigkeit 
zum Nachladen von SD reicht immer.
Eventuell reicht es aber auch wenn die Startpositionen der Dateien auf 
der SD-Karte vorher ermittelt werden und der erste 4k Block schon in den 
RAM gelesen wird.
Interessant wäre für mich auch mal zu wissen wie viel Zeit ein VS10xx 
vom Start bis zu den ersten Daten am DA braucht und ob das 
Reproduzierbar ist.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Die STM32F405/407 haben 192 kB RAM und 2 Stück 12-Bit DACs. Je nach 
benötigter Samplerate könntest du evtl. die Sounds also in den RAM 
vorladen und dann per DMA (und Timer) praktisch sofort auf die DACs 
schicken.
Wenn wir mal 8 bit mono mit 22kHz Samplerate annehmen und den RAM fürs 
System bei 8 KB ansetzen, bleiben 184 kB für ein Sample, das sind 8 und 
ein bisschen Sekunden. Vorladen des nächsten Sounds ins RAM könnte man 
dann mit einem FIFO lösen, während der erste Sound noch spielt.

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.