Hallo, ich möchte mittels eine uC Audiosignale wiedergeben. Die Signale sollen in einem ROM in komprimierter Form gespeichert werden, der uC dekodiert sie und gibt sie über einen DA-Wandler aus. Es handelt sich im wesentlichen um Sprache und evtl einige musikalische "Jingles". Das ganze soll etwa "Kofferradioqualität" erreichen, also kein HiFi. MP3 wäre natürlich die naheliegnste Möglichkeit, kommt aber aufgrund des hohen Speicherbedarfs (ca. 40 kB) nicht in Frage. Ausserdem reicht mir Mono. Gibt es einen einfachen Kompressionsalgorithmus, der dafür geeignet ist, idealerweise frei oder Public Domain? Ich habe ADPCM mit 32kbit/s im Visier, kann aber keine freie Implementierung finden. Prozessor ist ein ARM7, es stehen maximal etwa 16kB zur Verfügung. Wer weiss etwas oder hat so was schon gemacht? Mike
>Ich habe ADPCM mit 32kbit/s im >Visier, kann aber keine freie Implementierung finden. Bei Microchip gibt es unter den Appnotes Code für ADPCM. Ist zwar für PIC, aber in C geschrieben. Dürfte also kein Problem sein das umzusetzen. http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en011118
> MP3 wäre natürlich die naheliegnste Möglichkeit, kommt aber > aufgrund des hohen Speicherbedarfs (ca. 40 kB) nicht in Frage. Bei welcher Datenrate? Bei 32 kBit/sec dürfte mp3 deutlich besser komprimieren als ADPCM, Du benötigst natürlich Hardware zur Wiedergabe. Oder solltest Du einen Software-mp3-Decoder mit 40 kByte Codegröße meinen? > Ausserdem reicht mir Mono. mp3 kann auch monaural codiert werden. Als Beispiel habe ich mal den Windows-XP-Startsound angehängt, mp3-codiert mit 8 kBit/sec und 8 kHz Samplerate in Mono, allerdings im .WAV-Containerformat. Das ist recht genau 1 kByte/sec.
Vielleicht hilf dir das hier auf die Sprünge: http://www.romanblack.com/picsound.htm Ist zwar PIC aber sollte sich mit etwas Anstrengung verallgemeinern lassen. bye Frank
@Rufus: Aus Platz- und Kostengründen sollte die Dekompression im Mikrocontroller stattfinden. Der Sound sollte im ROM des uC gespeichert werden. Hauptproblem von MP3 ist der hohe Ressourcenverbrauch, u.a. 33 von 40 kB RAM und bei 60 MHz Takt bis zu 70% Prozessorleistung. Der uC soll aber noch was anderes tun. Die Leistungsdaten habe ich aus folgender AppNote: http://www.nxp.com/acrobat_download/applicationnotes/AN10583_1.pdf Allerdings scheint mir die Implementierung deutlich überdimensioniert zu sein, man müsste die libmad wohl etwas umstricken und auf niedrige Datenraten optimieren. 1kByte/s wäre natürlich toll, bei ca. 300kB Platz im ROM könnte ich 5 Minuten Sound speichern, mehr als genug. Gruss Mike
Ah, gut, es ging Dir in der Tat um die Codegröße. Das ändert die Anglegenheit natürlich. Ein anderer Codec, der mit 1 kByte/sec auskommt, ist der Codec, der im GSM-Netz verwendet wird; wenn Du einen Windows-Rechner Dein eigen nennst, kannst Du mit Sndrec32 mit den verschiedenen Formaten herumexperimentieren, denn ein entsprechender Codec ("GSM 6.10") gehört zum Lieferumfang dazu. Anbei die bekannte Datei im .WAV-Container, codiert mit just diesem Codec. Ob es brauchbare Implementierungen für das Decodieren hiervon gibt, entzieht sich jedoch gänzlich meiner Kenntnis. Viel Erfolg!
Hier gibt es einen GSM Player für GBA. Sollte einfach zu portieren sein, da auch ARM: http://www.pineight.com/gba/gsm/
Eventuell ist ja auch das alte VOC-Format von Creative (bzw. ein Nachbau :-) interessant. Das ist IMHO ein einfaches Delta-Packing, wobei je nach max. hohe des Delta 2-4 Samples in einem Byte gepackt werden. Du fängst mit einem Start-Sample (Frequenz) an und ermittelst den Unterschied des nächsten Samples. (1000 -> 1005, delta=5). Das codierst Du in 4 Bit (mit Vorzeichen). Das nächste ebenso. Ergbit eine rel. gute Packung. Ist das delta größer als dAS maximal abzuspeichernde muss natürlich das gesamte Sample gespreichert werden, incl. Flag, dass es ein "neues" Sample ist. Eine Schnell-Suche ergabe bei Google: http://www.inversereality.org/tutorials/sound%20programming/examples/soundblaster16example3.html und http://www.programmersheaven.com/download/2166/download.aspx
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.