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
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.