Forum: Mikrocontroller und Digitale Elektronik WAV als Funktion


von Axel L. (ligonap)


Lesenswert?

Hallo,

ich habe folgende Fragestellung: Für die Audioausgabe (PWM -> LM386) 
eines ATMega644 möchte ich gerne vier WAV-Dateien (Mono 20-40kB, jeweils 
max. 1 sec) in mathematische Funktionen umwandeln (evtl. mittels FFT 
o.ä.), so dass ich nur eine Summe von Sinusfunktionen an den LM386 
ausgeben brauch.

Mit welchen Programm ist solch eine Umwandlung möglich?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Axel L. schrieb:
> so dass ich nur eine Summe von Sinusfunktionen an den LM386
> ausgeben brauch.
Was versprichst du dir davon?

Als Tipp: Datenreduzierung geht anders...

von Axel L. (ligonap)


Lesenswert?

Lothar Miller schrieb:
> Was versprichst du dir davon?
>
> Als Tipp: Datenreduzierung geht anders...

Ganz einfach: der ATMega644 hat nur 2Kb EEPROM und die vier WAV-Dateien 
haben zusammen 116 Kb. Platz für eine externe MiniSD inklusive Slot sind 
nicht vorhanden. Da es nur relativ einfache Töne sind, könnte es auch 
mit Funktionen gehen.

von Harald Wilhelms (Gast)


Lesenswert?

Axel L. schrieb:
> Hallo,
>
> ich habe folgende Fragestellung: Für die Audioausgabe (PWM -> LM386)
> eines ATMega644 möchte ich gerne vier WAV-Dateien (Mono 20-40kB, jeweils
> max. 1 sec) in mathematische Funktionen umwandeln (evtl. mittels FFT
> o.ä.), so dass ich nur eine Summe von Sinusfunktionen an den LM386
> ausgeben brauch.
>
> Mit welchen Programm ist solch eine Umwandlung möglich?

Normalerweise nimmt man einen DA-Wandler dafür...
Gruss
Harald

von xXx (Gast)


Lesenswert?

> Normalerweise nimmt man einen DA-Wandler dafür...

Lesen, verstehen, posten!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Axel L. schrieb:
> Da es nur relativ einfache Töne sind, könnte es auch
> mit Funktionen gehen.
Es ist nunmal einfach so, dass du hier einen Kompressionsfaktor von 
knapp 60 willst. Dafür braucht es schon deutlich schlauere Algorithmen, 
als nur eine Spektralzerlegung und eine anschliessende Synthese, denn 
dir geht dabei ja der eigentlich der Zeitbezug verloren...

Porbier doch mal, deine Wav-Dateien auf dem PC maximal in ein MP3 zu 
komprimieren, und wenn du dann kleiner als 2 kB wirst, kannst du das ja 
mit einem Software-Deocder wieder abspielen...

von heinzhorst (Gast)


Lesenswert?

Die FFT soll aber nicht zur Laufzeit gemacht werden oder? Behaupte 
einfach mal, ein ATMega ist dafür zu schwachbrüstig.

von xXx (Gast)


Lesenswert?

> Die FFT soll aber nicht zur Laufzeit gemacht werden oder? Behaupte
> einfach mal, ein ATMega ist dafür zu schwachbrüstig.

Fuer dich gilt das Gleiche wie fuer den anderen Troll. Ist es wirklich 
zu viel verlangt, mehr als die Ueberschrift zu lesen und zu verstehen?

von heinzhorst (Gast)


Lesenswert?

Mal wieder traumhaft, die Diskussionskultur in diesem Forum. Aber wenn 
DU etwas Sinnvolles zu diesem Thread beitragen kann, dann mach es bitte! 
Ansonsten: Einfach mal...
...ich denke, Du weißt wie es weitergeht.

von Andreas B. (Gast)


Lesenswert?

Wenn es nur um einfache Töne geht, gibt es dafür doch schon MIDI und ein 
dazugehöriges Dateiformat. Die Ausgabe sollte sich dann relativ leicht 
auf dem Controller synthetisieren lassen. Eben die Klingeltonmelodien 
fürs Handy von früher.

Ob es ein Programm gibt, das automatisch beliebiges Audio in eine 
angenäherte Sequenz von Tonhöhen/-dauer umwandeln kann, ist eine andere 
Frage. Gibt es bestimmt — ist aber nicht mein Gebiet, deshalb kenne ich 
keins.

von ... (Gast)


Lesenswert?

Wenn du nur einfache Töne brauchst, ist es vielleicht möglich erstmal 
die Frequenz zu begrenzen. Du musst ja nicht bis 20 kHz alles 
übertragen. Dann brauchst du auch nicht mit 40 kS/s arbeiten. Meiner 
Meinung nach würde das die Größe erstmel drastisch senken. Oder machst 
du das schon?
Ein fertiges Programm kenn ich leider auch nicht.
Warum willst du das alles in das EEProm schreiben? Da kannst auch 
Sequenzen im Flash speichern. Das wäre dann deutlich größer als die 2kB. 
Oder ist das auch schon voll?

von Lehrmann M. (ubimbo)


Lesenswert?

Axel L. schrieb:
> Da es nur relativ einfache Töne sind, könnte es auch
> mit Funktionen gehen.

Definiere mal bitte 'einfacher Ton'.

Ich habe so eine Ahnung, dass du sowohl von der nötigen Mathematik, 
Algorithmik und Audiotechnik nicht sonderlich viel verstehst...

von Skua (Gast)


Lesenswert?

Ein Ton sagt mehr als Tausend Worte.

von Axel L. (ligonap)


Angehängte Dateien:

Lesenswert?

Skua schrieb:
> Ein Ton sagt mehr als Tausend Worte.

Ich habe mal die vier WAV-Datei angehängt. Alle sind in 22050Hz, 16-bit, 
Mono.

von Max G. (l0wside) Benutzerseite


Lesenswert?

Axel L. schrieb:
> Hallo,
>
> ich habe folgende Fragestellung: Für die Audioausgabe (PWM -> LM386)
> eines ATMega644 möchte ich gerne vier WAV-Dateien (Mono 20-40kB, jeweils
> max. 1 sec) in mathematische Funktionen umwandeln (evtl. mittels FFT
> o.ä.), so dass ich nur eine Summe von Sinusfunktionen an den LM386
> ausgeben brauch.

Das (böse) Bashing hier im Forum hat immerhin dazu beigetragen, dass ich 
Deine Frage verstanden habe. Die Frage an sich ist ja durchaus sinnvoll.

Schau mal nach "wav2midi", das sollte Deinen Wünschen einigermaßen 
nahekommen. Wenn die WAV-Dateien periodisch sind (z.B. ein Gong oder 
Ähnliches), kannst Du vielleicht auch jeweils nur ein Stück davon 
speichern und das dann x-fach abspielen.

Ob Du mit einer FFT glücklich wirst, wage ich zu bezweifeln - eine FFT 
macht alleine noch keine Datenkompression.

von Sascha W. (sascha-w)


Lesenswert?

also deine WAV's wirst du kaum durch MIDI ersetzen können, da MIDI ja 
mit sog. wavetables arbeitet, also kurzen Samples von Instrumenten die 
dann in einer bestimmten Tonhöhe für eine bestimmte Dauer ausgegeben 
werden. 'Geräusche' lassen sich damit erst mal nicht abbilden.

Sascha

von Finsbury (Gast)


Lesenswert?

... schrieb:
> Wenn du nur einfache Töne brauchst, ist es vielleicht möglich erstmal
> die Frequenz zu begrenzen. Du musst ja nicht bis 20 kHz alles
> übertragen. Dann brauchst du auch nicht mit 40 kS/s arbeiten. Meiner
> Meinung nach würde das die Größe erstmel drastisch senken.

dem würde ich mich anschließen. Wenn es nur grob Töne sein sollen. Alles 
oberhalb von sagen wir 2 bis 3kHz ist eh nur was für Audiospinner ;)
Mach 'ne vernünftige Bandbegrenzung.

von Pic (Gast)


Lesenswert?

Naja, die Töne sollten besser durch Funktionen approximiert werden, ist
nicht so schwierig. Ansonsten gibt es Wav codecs, welche problemlos 
solche
Files auf 35k/Minute reduzieren. wäre also noch drin. SDK für das 
Codierung
und sample code für das decodieren ist frei ferfügbar. Einfach mal ne 
Seite
ansehen, wo das Wav Format beschrieben ist, dort sind generell auch die 
Codecs beschrieben.

von Mirko (Gast)


Lesenswert?

Rein vom Gefühl her würde ich sagen, die Klänge sind leider ganz und gar 
nicht "einfach". Einfach wäre z.B. eine gleichförmige Wellenform mit 
einer Hüllkurve - das könnte man mit einem AVR synthetisieren.

Typische ROM-Sample-Player imitierten seinerzeit Musikinstrumente durch 
mehrere übereinandergelegte Wellenformen (z.B. ein Geräusch für die 
Attackphase, ein Ton für den Rest). Aber damit kannst Du die Samples 
oben kaum platzsparend reproduzieren. Wie weit dürfen die Klänge denn 
abweichen?

Sascha Weber schrieb:
> also deine WAV's wirst du kaum durch MIDI ersetzen können, da MIDI ja
> mit sog. wavetables arbeitet, also kurzen Samples von Instrumenten die
> dann in einer bestimmten Tonhöhe für eine bestimmte Dauer ausgegeben
> werden. 'Geräusche' lassen sich damit erst mal nicht abbilden.

Ein paar Geräusche bringt der General-MIDI-Standard ja mit 
(Pistolenschuss ist z.B. da). Aber war das überhaupt eine Option? Wo 
sollen die MIDI-Daten abgespielt werden, wenn nicht mal Platz für eine 
Speicherkarte da ist?

Oder vielleicht doch eine MicroSD? Die kannst Du doch locker auf den 
ATMega644 draufkleben :).

Mirko

von holger (Gast)


Angehängte Dateien:

Lesenswert?

>dem würde ich mich anschließen. Wenn es nur grob Töne sein sollen. Alles
>oberhalb von sagen wir 2 bis 3kHz ist eh nur was für Audiospinner ;)

Na dann hör dir mal den Unterschied zwischen 22kHz und 11kHz
Samplerate an (siehe Anhang ton_bb_8_11.wav). Gleich noch auf
8 Bit reduziert. Das gibt schon einen deutlichen Unterschied im Klang.
Dafür ist es nur noch ein Viertel so groß.

ADPCM (ton_bb_ima.wav) bringt es auch auf ein Viertel bei deutlich 
besserem
Klang.

von Finsbury (Gast)


Lesenswert?

holger schrieb:
> Das gibt schon einen deutlichen Unterschied im Klang.
> Dafür ist es nur noch ein Viertel so groß.

Ja geht es nun um Klänge oder um Töne? Gut, wenn die Schwebung mit dem 
gewissen etwas auf den zweigestrichenen C noch gebraucht wird, dann ist 
der Atmega einfach falsch gegriffen. Frage mich sowieso, warum andauernd 
µCs für Aufgaben herhalten müssen, für die sie nicht gedacht sind. Die 
Aussage, der wäre für eine FFT zu schwachbrüstig fand ich auch nicht 
schlecht.

von Achim M. (minifloat)


Lesenswert?

Also eine Imitation bzw. Synthese der Sounds sollte sich in Funktionen 
implementieren lassen.

Meine grobe Analyse nach Gehör:
 Ton_BB.wav = Drei Töne, die mit Rauschen in Hüllkurve unterlegt sind
 Ton_BE.wav = Click-Sound + 2 andere Töne
 Ton_BR.wav = Rauschen
 Ton_BS.wav = Rauschen in Hüllkurve + Ton mit Tonhöhen- und Hüllkurve
mfg mf

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.