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
nimm halt nen großen controller bei dem das ganze ins ram passt (3s sind ja nicht die welt) ... alles andere wird kompliziert
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.
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.
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)
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.
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
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
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 :-)
Pi + Usb-Soundkarte? Die gibt's doch schon fürn paar Euro. Gruß Jonas
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
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 ;-)
Das hier http://www.reichelt.de/Programmer-Entwicklungstools/DM-330011/3/index.html?;ACTION=3;LA=446;ARTICLE=96466;GROUPID=2969;artnr=DM+330011;SID=11UCIxo38AAAIAAAjnIbw0a246c6ddf2373bc3edd72351e79bdef könnte genau Dein Ding sein...
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?
@ 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.
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 ...
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
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.
>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.
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
>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.
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
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
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
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.
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?
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.