Forum: Mikrocontroller und Digitale Elektronik Compressed Audio für embedded


von Werner Mülller (Gast)


Lesenswert?

Guten Tag

ich bin auf der Suche nach einem freien(!) Audiodekoder, den ich in eine 
bestehende Anwendung integrieren kann.

Die Anforderungen an den Sound sind nicht sonderlich hoch und die 
abzuspielenden Dateien sind vorab bekannt, daher ist auch das 
Kompressionsformat frei wählbar

Vom Klang her ausreichend ist PCM mit 16 bit bei 16 kHz Abtastrate 
(mono!)
Versuche mit ADPCM sind gescheitert, weil der Sound einfach zu grottig 
ist
Grauenvolle Artefakte, selbst auf mini Lautsprechern leider extrem gut 
hörbar.

Das nackte PCM (16 bit/18kHz) sind 256 kBit /s,
verfügbar sind 64 - 80 kbit/s

Vorbis (selbst im TREMOR low memory branch) hat noch eine menge Aufrufe 
von alloca, was ich embedded nicht echt gebrauchen kann

und bei dem MP3 Decodern findet sich noch immer überall Copyrights (zB 
von Real Networks / Helix etc)

Bei MP3 selber sollten ja seit 2017 alle Patente ausgelaufen sind -> von 
daher kein Problem mehr sein. Aber gibt es einen ordentlichen FREIEN 
Dekoder?

Zielhardware: LPC1778 bei 120 MHz, ca 40-50 kB RAM und 1/3 der CPU sind 
verfügbar.

Sehr schick ist übrigens der geplante DAC mit Verstärker, das ist ein 
nettes Bauteil für unter 1 EUR wie hier verbaut

https://www.adafruit.com/product/3006

von Werner Mülller (Gast)


Lesenswert?

ach und ich wäre nicht unglücklich, wenn es etwas einfacher 
nachvollziehbar wäre als die vorbis/mp3 boliden. Eine kompressionsrate 
von 1 zu 4 wäre ja schon ausreichend

von im lalaland (Gast)


Lesenswert?

Werner Mülller schrieb:
> Die Anforderungen an den Sound sind nicht sonderlich hoch und die


> Vom Klang her ausreichend ist PCM mit 16 bit bei 16 kHz Abtastrate
> (mono!)
> Versuche mit ADPCM sind gescheitert, weil der Sound einfach zu grottig
> ist
> Grauenvolle Artefakte, selbst auf mini Lautsprechern leider extrem gut
> hörbar.


da würde ich nochmal schauen ob da nicht etwas falsch gelaufen ist.
Ich selber hatte in letzter Zeit nur mit 8Khz 16bit zu tun ( am ende 
G.711/G.722)
Aber 16Khz 16bit sollte schon fast Bandqualität/UKW mono sein...


SOnst vieleicht der STM32 MP3  decoder ?

von im lalaland (Gast)


Lesenswert?


von heappy (Gast)


Lesenswert?

Werner Mülller schrieb:

> Vorbis (selbst im TREMOR low memory branch) hat noch eine menge Aufrufe
> von alloca, was ich embedded nicht echt gebrauchen kann

Du benutzt sonst auch keinen Stack?

von im lalaland (Gast)


Lesenswert?

versuche die normale malloc/free funktion

dazu hast du hoffentlich schon die _sbrk() bearbeitet ( syscall.c )

Das klappt eigentlich ganz gut solange man immer ein vielfaches einer 
gewissen blockgröße holt/freigibt
dazu kannst dir ja einen wrapper bauen.


alternativ eine heap implementation ( siehe FreeRTOS )

von Jim M. (turboj)


Lesenswert?

Werner Mülller schrieb:
> Zielhardware: LPC1778 bei 120 MHz, ca 40-50 kB RAM und 1/3 der CPU sind
> verfügbar.

Wird für MP3 relativ knapp und dürfte nicht ausreichen sein.

Und wo kommt der Sound her? Ich hätte da nämlich einfach eine MicroSDHC 
oder -XC Karte verbaut, und die Soundfiles unkomprimiert gelassen. SPI 
zur Ansteuerung kann man notfalls mit ein paar GPIOs in Software 
stricken, insbesondere wenn noch CPU Zyklen frei sin.

von Rolf M. (rmagnus)


Lesenswert?

Werner Mülller schrieb:
> Vom Klang her ausreichend ist PCM mit 16 bit bei 16 kHz Abtastrate
> (mono!)

Schon mal an 8 Bit logarithmisch gedacht, wie z.B. bei ISDN (A-law)? Da 
hat man zwar nicht die Dynamik von 16 Bit, aber auch nicht das 
Quantisierungsrauschen von 8 Bit, und man spart schon mal die Hälfte.

: Bearbeitet durch User
von Werner (Gast)


Lesenswert?

lalaland: Danke, SEHR interessant

heappy: Danke für den überaus intelligenten Einwurf.
Doch ich benutze Stack. Jetzt noch reichhaltiger. Neu auch Stack to Go!
Habe auch ein RT-OS am Laufen. Viele Stacks. Mag vorhersehbares 
Verhalten

Magnus: Danke für den Hinweis. Prinzipiell bestimmt eine gute Idee und
auch easy in der Umsetzung (beim Dekodieren) mittels Lookup-Table
nur leider reicht Halbierung nicht
Habe 128MiB zur Verfügung, brauche 200 Minuten Sound.
Ich komme auf 87kbit/s verfügbar. Gebraucht würden 128. Schade.

von Lalaland (Gast)


Lesenswert?

G.722

Ist sehr einfach und hat 64kbit

von Lalaland (Gast)


Lesenswert?


von W.S. (Gast)


Angehängte Dateien:

Lesenswert?

Werner Mülller schrieb:
> ich bin auf der Suche nach einem freien(!) Audiodekoder, den ich in eine
> bestehende Anwendung integrieren kann.
>
> Die Anforderungen an den Sound sind nicht sonderlich hoch und die
> abzuspielenden Dateien sind vorab bekannt, daher ist auch das
> Kompressionsformat frei wählbar

Na dann sei doch ganz einfach ein bissel SELBST kreativ! Es ist ja 
eigentlich eine einfache Denkaufgabe (die ich bereits vor einigen Jahren 
erledigt habe).

Also, erstens hänge ich dir mal hier ein paar Dateien dran - und 
zweitens solltest du dir die Lernbetty hier aus dem Forum herunterladen, 
denn dort findest du den (eigentlich sehr einfachen) Dekoder dazu.

Ich hatte damals mir das von Sierra stark vereinfachte ADPCM 
Kompressions-Schema mal vorgenommen und daraus ein für die beschränkten 
Möglichkeiten in einem µC geeignetes Zeug gemacht. Es geht und reicht 
für viele Zwecke aus. Die Kompressionsrate von richtigem ADPCM wird zwar 
nicht erreicht, aber dafür ist es über alles ein bißchen einfacher.

Nebenbei: ich hatte mir damals auch ein vereinfachtes Verfahren 
ausgedacht, um Bilder und Grafiken platzsparend in einem µC 
unterzubringen, siehe Landkarten auf dem µC oder so.

W.S.

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.