Forum: Mikrocontroller und Digitale Elektronik Audiorecorder


von Jonathan S. (dr4)


Lesenswert?

Hallo,
ich würde gerne einen Audiorecorder basteln, der die Daten als Opus oder 
CELT-Encoded auf eine SDHC-Karte schreibt. Nun würde ich gerne wissen, 
ob jemand es schon geschafft hat, FFpmeg für AVR zu compilen oder ob es 
einen anderen Weg gibt, das encoding zu lösen. Und wie viel 
Rechenleistung bräuchte ein AVR dafür (~14kbps)?

Und sehe ich das richtig, dass ein Mikrocontroller das encoding macht 
und ein zweiter nötig ist, um die Daten auf die Karte zu schreiben? 
Ansonsten könnte doch wenn die Daten geschrieben werden keine neuen vom 
Mikrofon empfangen werden, oder?

von holger (Gast)


Lesenswert?

>FFpmeg für AVR zu compilen

Buhahahaha;)

von Malte S. (maltest)


Lesenswert?

Jonathan S. schrieb:
> FFpmeg für AVR zu compilen

Ich würde eher einen Z80 nehmen.

von Carsten (Gast)


Lesenswert?

Nimm sowas:
http://www.vlsi.fi/en/products/vs1063.html

Je nach verwendetem µC und gewünschtem Dateisystem auf der SD-Karte hat 
dieser schon genug mit dem Speichern der Daten zu tun.

von Jonathan S. (dr4)


Lesenswert?

Carsten schrieb:
> Nimm sowas:
> http://www.vlsi.fi/en/products/vs1063.html
>
> Je nach verwendetem µC und gewünschtem Dateisystem auf der SD-Karte hat
> dieser schon genug mit dem Speichern der Daten zu tun.

Gibt es keinen 32bit µC, der das encoding machen könnte? Decoding von 
MP3 geht ja anscheinend

von Karl H. (kbuchegg)


Lesenswert?

Decoden ist ja auch vergleichsweise trivial.

von Michael (Gast)


Lesenswert?

Was willst du denn mit FFpmeg? Nimm dir einen STM32F4 (mit FPU, DMA und 
USB-OTG) z.B. das STM32F4Discovery und mach FLAC Encoding drauf.

von Jonathan S. (dr4)


Lesenswert?

Michael schrieb:
> Was willst du denn mit FFpmeg? Nimm dir einen STM32F4 (mit FPU, DMA und
> USB-OTG) z.B. das STM32F4Discovery und mach FLAC Encoding drauf.

FLAC wird aber verdammt schnell verdammt groß

von Malte S. (maltest)


Lesenswert?

Aah meintest du vielleicht ARM statt AVR? Dann ist es piece of cake.
http://wiki.xiph.org/OpusFAQ#On_what_platforms_does_Opus_run.3F
Aber ffmpeg brauchste zum encoden gar nicht soweit ich weiß.

von holger (Gast)


Lesenswert?

>FLAC wird aber verdammt schnell verdammt groß

Mein Gott, nimm einen Laptop mit ner dicken Festplatte.
41kHz Samplerate Stereo und 16Bit pro Sample sind
gerade mal 10MByte pro Minute.

von Jonathan S. (dr4)


Lesenswert?

Malte S. schrieb:
> Aah meintest du vielleicht ARM statt AVR? Dann ist es piece of cake.
> http://wiki.xiph.org/OpusFAQ#On_what_platforms_does_Opus_run.3F
> Aber ffmpeg brauchste zum encoden gar nicht soweit ich weiß.

Danke für den Link! Um die benötigte Leistung grob schätzen zu können, 
könnte ich den Opus encoder nur mit RISC-Befehlen compilen, auf meinen 
Computer laufen lassen und dann auf Real Time runterrechnen, oder ist 
das zu ungenau? Damit hätte ich eine ungefähre anzahl von MIPS. Aber was 
ist mit dem RAM? Wie viel brauche ich da? Kann ich das auch auf meinen 
Computer messen oder gibt es ARM-VMs?

holger schrieb:
>>FLAC wird aber verdammt schnell verdammt groß
>
> Mein Gott, nimm einen Laptop mit ner dicken Festplatte.
> 41kHz Samplerate Stereo und 16Bit pro Sample sind
> gerade mal 10MByte pro Minute.

1. brauche ich nur Mono, also "nur" 5 MBytes/Minute
2. dicke Fetsplatte? SDHC
3. Opus geht ja anscheind auch

von Malte S. (maltest)


Lesenswert?

Schätze mal im Zweifelsfall kann qemu irgendwas ARMiges emulieren. Wie 
das genau aussieht und was für ein Core das dann ist keine Ahnung. Ich 
würde aber mal in der Richtung gucken.

von Jonathan S. (dr4)


Lesenswert?

Malte S. schrieb:
> Schätze mal im Zweifelsfall kann qemu irgendwas ARMiges emulieren. Wie
> das genau aussieht und was für ein Core das dann ist keine Ahnung. Ich
> würde aber mal in der Richtung gucken.

Danke! Ich hatte BOCHS im Kopf, aber das kann ja leider kein ARM. Was 
für µC sind denn genereall empfehlenswert? Ich kenne mich da kaum aus. 
Stromverbrauch ist in diesem Fall relativ wichtig und gcc-support.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jonathan S. schrieb:
> ich würde gerne einen Audiorecorder basteln, der die Daten als Opus oder
> CELT-Encoded auf eine SDHC-Karte schreibt

Wozu diese Codierungen?

Bei unkomprimiertem Stereo-PCM (44.1 kHz, 16 Bit, das ist das 
CD-Audio-Format) fallen 176.4 kB pro Sekunde an, das sind etwa 635 
MB/Stunde.

Die kleinste SDHC-Karte ist 4 GB groß, darauf passen also knapp 6.3 
Stunden Audiomaterial.

Was hast Du vor?

von Jonathan S. (dr4)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Jonathan S. schrieb:
>> ich würde gerne einen Audiorecorder basteln, der die Daten als Opus oder
>> CELT-Encoded auf eine SDHC-Karte schreibt
>
> Wozu diese Codierungen?
>
> Bei unkomprimiertem Stereo-PCM (44.1 kHz, 16 Bit, das ist das
> CD-Audio-Format) fallen 176.4 kB pro Sekunde an, das sind etwa 635
> MB/Stunde.
>
> Die kleinste SDHC-Karte ist 4 GB groß, darauf passen also knapp 6.3
> Stunden Audiomaterial.
>
> Was hast Du vor?

Ich will in der Lage sein, ein ganzes Wochenende durchgehend 
aufzunehmen. Man könnte zwar alle 6.3 Stunden die Speicherkarte 
wechseln, aber das ist unpraktisch. Man könnte aber auch einfach 
16GB-SDHC-Karten benutzen, müsste halt nur mit größeren Pointern umgehen 
können. Zudem werde ich ein eher schlechtes Mikro benutzen, wodurch sich 
eine Sampling-Rate von 44,1 kHz nicht lohnt. Ich denke, dass 16 kHz @ 16 
Bit da angebrachter sind und komme auf 139h. Ist das richtig? Das würde 
ja locker reichen. Vielleicht könnte man noch eine einfache Kompression 
darauf anwenden, würde dann allerdings nicht viel bringen.

EDIT: Als Datenformat würde ich WAV bevorzugen weil es meines Wissens 
nach sehr einfach aufgebaut ist (Header + Alle Samples hintereinander). 
Oder gibt es da was besseres?

von Wusel D. (stefanfrings_de)


Lesenswert?

Schau Dir mal Mini-Disc Recorder an. Meiner (gefühlte 20 Jahre alt) kann 
8 Stunden am Stück aufnehmen und die Aufnahme bei Stille pausieren.

Vielleicht reicht das ja schon, wäre jedenfalls relativ preisgünstig und 
schon fix und fertig.

Ansonsten würde ich auch zu einem Computer raten, z.B. ein Netbook.

von Martin H. (marrtn)


Lesenswert?

Schau Dir mal folgende AppNote an:
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/CD00204907.pdf

Decoding wegwerfen, dafür SD-Card einbauen und fertig ;-)

von Jonathan S. (dr4)


Lesenswert?

Stefan Frings schrieb:
> Schau Dir mal Mini-Disc Recorder an. Meiner (gefühlte 20 Jahre alt) kann
> 8 Stunden am Stück aufnehmen und die Aufnahme bei Stille pausieren.
>
> Vielleicht reicht das ja schon, wäre jedenfalls relativ preisgünstig und
> schon fix und fertig.
>
> Ansonsten würde ich auch zu einem Computer raten, z.B. ein Netbook.

Danke für den Tipp mit silence! Dann könnte man relativ einfach und 
effektiv RLE drüberlaufen lassen. Gemutet wird, wenn das Signal zu 
schwach ist (stille) oder die entropie zu hoch ist (rauschen).

Notebook ist leider keine Lösung da das Gerät sehr kompakt sein muss.

Martin H. schrieb:
> Schau Dir mal folgende AppNote an:
> 
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/CD00204907.pdf
>
> Decoding wegwerfen, dafür SD-Card einbauen und fertig ;-)

Wenn man kein Decondig macht, kann man doch einfach 16000/sekunde den 
Wert vom ADC nehmen und in die Datei schreiben, oder?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jonathan S. schrieb:
> EDIT: Als Datenformat würde ich WAV bevorzugen

Dann aber entfällt doch Deine Eingangsforderung nach "Opus" bzw. "Celt".

Wo also ist das Problem?

Jonathan S. schrieb:
> Man könnte aber auch einfach
> 16GB-SDHC-Karten benutzen, müsste halt nur mit größeren Pointern umgehen
> können.

Muss man auch nicht, denn die maximale Dateigröße ist durch das 
verwendete Dateisystem (FAT32 laut SDHC-Spezifikation) begrenzt. Du 
kannst aber völlig problemlos Deine Aufzeichnung in z.B. 1 GB-Häppchen 
zerlegen.

Wenn Du mit 16 kHz Samplerate und 16-Bit-Mono-Samples arbeitest, kommst 
Du auf 32 kByte/sec, also 115.2 MByte/h.

Damit genügt eine 4 GB-Karte schon für 34.7 Stunden, was mehr als ein 
Tag ist.

Deutlich mehr bekommst Du auf die Speicherkarte, wenn Du eine 
Audiokompression anwendest. Das ist am einfachsten mit einem externen 
Audiocompressor zu erledigen, wie es sie beispielsweise von VLSI gibt:

http://www.vlsi.fi/en/products.html

Hier bietet sich der VS1063 an, oder, wenn Du auf Deinen µC auch 
verzichten kannst, und eine Einchip-Lösung haben möchtest, der VS1005.

Klar, die Dinger kosten etwas, aber dafür nehmen sie Dir auch /sehr 
viel/ Arbeit ab.

von Martin H. (marrtn)


Lesenswert?

Ich habe gesagt decoding wegschmeißen, nicht encoding!
Vermutlich lässt sich das aber eh nicht trennen.

von Jonathan S. (dr4)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Jonathan S. schrieb:
>> EDIT: Als Datenformat würde ich WAV bevorzugen
>
> Dann aber entfällt doch Deine Eingangsforderung nach "Opus" bzw. "Celt".
>

Da ich mich mit µC kaum auskenne und ich mit 16GB immerhin mindestens 
139h Encoding hinbekomme muss mir das erstmal reichen.

Rufus Τ. Firefly schrieb:
> Jonathan S. schrieb:
>> Man könnte aber auch einfach
>> 16GB-SDHC-Karten benutzen, müsste halt nur mit größeren Pointern umgehen
>> können.
>
> Muss man auch nicht, denn die maximale Dateigröße ist durch das
> verwendete Dateisystem (FAT32 laut SDHC-Spezifikation) begrenzt. Du
> kannst aber völlig problemlos Deine Aufzeichnung in z.B. 1 GB-Häppchen
> zerlegen.
>

ExFAT

Martin H. schrieb:
> Ich habe gesagt decoding wegschmeißen, nicht encoding!
> Vermutlich lässt sich das aber eh nicht trennen.

Wie gerne ich auch einen Opus Recorder gemacht hätte, ist mir das alles 
für mein erstes Projekt in diese Richtung zu kompliziert. Da kaufe ich 
mir lieber größere Karten und mache muting + RLE.

Kann mir jemand einen günstigen 32bit-µC empfehlen? Ich finde die ganzen 
Typen verwirrend. Ist etwas STM32-Artiges gut?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jonathan S. schrieb:
> ExFAT

Nicht auf SDHC, das ist erst bei SDXC spezifiziert.

Ja, die SD_irgendwas_-Spezifikation schreibt das verwendete Dateisystem 
vor:

SD FAT16
SDHC FAT32
SDXC ExFAT

Außerdem:
Schon irgendwo mal 'ne ExFAT-Implementation für irgendeinen µC im 
Quelltext gesehen?

von Jonathan S. (dr4)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Jonathan S. schrieb:
>> ExFAT
>
> Nicht auf SDHC, das ist erst bei SDXC spezifiziert.
>
> Ja, die SD_irgendwas_-Spezifikation schreibt das verwendete Dateisystem
> vor:
>
> SD FAT16
> SDHC FAT32
> SDXC ExFAT
>
> Außerdem:
> Schon irgendwo mal 'ne ExFAT-Implementation für irgendeinen µC im
> Quelltext gesehen?

Ok. Dann SDHC. Hatte eh vor, die Datei alle 15min. oder so zu splitten. 
Ich stelle mir auch ziemlich unschön vor, eine 16GB-Datei unter Win zu 
öffnen.

von klausr (Gast)


Lesenswert?

Jonathan S. schrieb:
> Wie gerne ich auch einen Opus Recorder gemacht hätte, ist mir das alles
> für mein erstes Projekt in diese Richtung zu kompliziert. Da kaufe ich
> mir lieber größere Karten und mache muting + RLE.
>
> Kann mir jemand einen günstigen 32bit-µC empfehlen? Ich finde die ganzen
> Typen verwirrend. Ist etwas STM32-Artiges gut?

Jetzt mal im ernst: Um was geht es? Willst du was lernen oder musst du 
ein konkretes Problem lösen?

1) Wenn du ein konkretes Problem (eine ganze WE Audio aufzeichnen) lösen 
musst, dann würde ich mir folgendes anschauen:
http://www.thomann.de/de/portable_recorder.html
Wie wichtig ist dir die Aufnahme? Was machst du, wenn deine 
Selbstbaulösung nach ein paar Stunden Probleme macht?

2) Was lernen: Welche Erfahrung hast du? Schonmal einen uC programmiert? 
Kannst du C? Traust du dir das zu, an einem STM32F4 einen Codec (AD/DA) 
Wandler dran zubauen? (ok. für WAV+RLE reicht auch ein AVR) Schaltplan 
entwerfen + Audio-Vorstufe? Mikrofonvorstufe? Das ganze zu layouten? 
Layout Fehler zu suchen? Dann die ganze SPI-Programmierung (AD-Wandler, 
SD-Karte, Filesystem) Evtl. noch ein Display?

Mein Vorschlag, wenn du wirklich selbst was programmieren willst, nimm 
dir ein (fast) fertiges Produkt, das du ändern kannst, z.B. das VS1063 
Eval Board. Findest du hier:
http://verkkokauppa.planeetta.net/epages/Planeetta.sf/en_GB/?ObjectPath=/Shops/vlsi/Products/VS1063_PROTO_BOARD. 
Kostet ganze 45,- €

Das Board hat schon eine fertige Firmware drauf, die (fast) das macht, 
was du möchtest. Wenn man sowas als Basis nimmt, hat ein erfahrener 
Programmierer die Aufgabe in ein paar Stunden erledigt.

Wenn du es dir schwerer machen aber auch mehr Freiheiten haben möchtest, 
kannst du dir bei E-Bay das Open407V-D Kit besorgen, das enthält 
zumindest funktionierende Hardware für einen STM32F4 inkl. Audio AD/DA 
Interface, SD-Card und Display. Dann musst du dich nur noch um die 
Software kümmern.
Der STM32F4 hätte genug Power, um MP3 Encoding in Software zu machen.

von Jonathan S. (dr4)


Lesenswert?

klausr schrieb:
> Jetzt mal im ernst: Um was geht es? Willst du was lernen oder musst du
> ein konkretes Problem lösen?

Beides. Ich will µC programmieren und da ich keinen passenden Recorder 
gefunden habe, wollte ich das mal ausprobieren.

klausr schrieb:
> Wie wichtig ist dir die Aufnahme? Was machst du, wenn deine
> Selbstbaulösung nach ein paar Stunden Probleme macht?

Das ist nicht so schlimm.

klausr schrieb:
> Schonmal einen uC programmiert?
> Kannst du C?

µC habe ich noch nicht programmiert und C musste ich zum Glück auch noch 
nicht lernen. Da ich allerdings µC und in OpenCL programmieren will 
werde ich das wohl tun. Ich denke allerdings nicht, das ich da große 
Schwierigkeiten haben werde.

klausr schrieb:
> Traust du dir das zu, an einem STM32F4 einen Codec (AD/DA)
> Wandler dran zubauen?

Wenn ich mich auf WAV + RLE beschränke sollte das schon gehen. Hoffe 
ich.

klausr schrieb:
> Schaltplan
> entwerfen + Audio-Vorstufe? Mikrofonvorstufe?

Ich habe einen selbstgelöteten Mikrofonverstärker hier rumliegen. Den 
könnte ich mir mal anschauen.

klausr schrieb:
> Wenn du es dir schwerer machen aber auch mehr Freiheiten haben möchtest,
> kannst du dir bei E-Bay das Open407V-D Kit besorgen, das enthält
> zumindest funktionierende Hardware für einen STM32F4 inkl. Audio AD/DA
> Interface, SD-Card und Display. Dann musst du dich nur noch um die
> Software kümmern.

Inwieweit muss ich mich da um die SDHC-Card kümmern? Habe da noch keine 
gute Spec zu gefunden, habe aber auch nicht wirklich gesucht.

von Rodeorekorder (Gast)


Lesenswert?

Jonathan S. schrieb:
> C musste ich zum Glück

Jonathan S. schrieb:
> C musste ich zum Glück auch noch
> nicht lernen.

Von wegen Glück. Mit solchen Sprüchen machst du dir in einem uC Forum 
keine Freunde  ;-)

von Jonathan S. (dr4)


Lesenswert?

> Jonathan S. schrieb:
>> C musste ich zum Glück auch noch
>> nicht lernen.
>
> Von wegen Glück. Mit solchen Sprüchen machst du dir in einem uC Forum
> keine Freunde  ;-)

Seitdem ich gelernt habe, dass in C a[5] das gleiche wie 5[a] ist, finde 
ich C strange.
http://stackoverflow.com/questions/381542/in-c-arrays-why-is-this-true-a5-5a

von Malte S. (maltest)


Lesenswert?

Ja, die kurioseren Eigenheiten. Wenn du allerdings verstanden hast, 
warum das so ist, kann dir schonmal eine Menge Böses™ weniger 
passieren :)

von c-hater (Gast)


Lesenswert?

Jonathan S. schrieb:

> Ich will in der Lage sein, ein ganzes Wochenende durchgehend
> aufzunehmen.

Es gibt auch Audiokompression, die wesentlich weniger Rechenleistung 
fordert. Aber natürlich ist die auch weitaus weniger effizient.

Aber vermutlich ist das in deiner Anwendung garnicht nötig. Das hört 
sich ziemlich nach einer Überwachungsanwendung an. Da wird also sowieso 
99% der Zeit nichts als Rauschen und unwichtige leise Umgebungsgeräusche 
zu hören sein, die kein Schwein interessieren und über die du zur 
Auswertung mühselig hinwegspulen mußt.

Wenn das so ist, dann wäre es viel sinnvoller, noch vor der Aufnahme das 
Signal zu klassifizieren und nur den Teil aufzuzeichnen, der mit einiger 
Wahrscheinlichkeit brauchbare Informationen enthält. Das spart viel mehr 
Speicherkapazität als jede noch so ausgefeilte Kompressionsmethode und 
das bei sehr viel weniger Rechenzeitaufwand.

Der einfachste Trigger wäre natürlich schlicht ein gewisser 
Mindestpegel. Wenn aber das, was dich konkret interessiert, gewisse 
charakteristische Signaleigenschaften hat, kann man den Trigger weiter 
verfeinern. Menschliche Sprache läßt sich z.B. relativ leicht als solche 
erkennen.

von klausr (Gast)


Lesenswert?

Jonathan S. schrieb:
> µC habe ich noch nicht programmiert und C musste ich zum Glück auch noch
> nicht lernen. Da ich allerdings µC und in OpenCL programmieren will

Wie kommst du darauf, dass du einen µC in OpenCL programmieren kannst? 
OpenCL ist für massive Parallelarchitekturen aka Grafikkarte gedacht. 
Nix uC.

Das einzige, was ich mir bei dir jetzt noch vorstellen kann, nimm einen 
AVR, Bascom und den eingebauten AD Wandler (hat zwar nur 10 bit, aber 
zum aufzeichnen sollte es reichen). Es soll auch irgendwo einen FAT32 
SD-Card Treiber für Bascom geben. Wenn das dann läuft, denke über 
externe AD-Wandlung nach.

Falls doch C, mein Tipp: C lernt man nicht am µC - arbeite erst (am 
besten gleich mit dem gcc auf'm PC) ein gutes C Tutorial durch und 
besorg dir dann den Kernighan Richi 
http://de.wikipedia.org/wiki/The_C_Programming_Language
Es gibt auch noch andere gute Bücher zum C lernen, habe da aber keinen 
Überblick, da ich C von >25jahren gelernt habe (damals auf'm Amiga).

von klausr (Gast)


Lesenswert?

Jonathan S. schrieb:
> Seitdem ich gelernt habe, dass in C a[5] das gleiche wie 5[a] ist, finde
> ich C strange.

Eigentlich nicht - wenn man mal Assembler programmiert hat ist einem 
5[a] sofort klar: "Damals" auf dem 68k: move.b 5(a0),d0. Eigentlich muss 
man nur begreifen, dass eine Array-Variable gleichzeitig auch ein 
Pointer ist.

von Jonathan S. (dr4)


Lesenswert?

c-hater schrieb:
> Wenn das so ist, dann wäre es viel sinnvoller, noch vor der Aufnahme das
> Signal zu klassifizieren und nur den Teil aufzuzeichnen, der mit einiger
> Wahrscheinlichkeit brauchbare Informationen enthält. Das spart viel mehr
> Speicherkapazität als jede noch so ausgefeilte Kompressionsmethode und
> das bei sehr viel weniger Rechenzeitaufwand.
>
> Der einfachste Trigger wäre natürlich schlicht ein gewisser
> Mindestpegel. Wenn aber das, was dich konkret interessiert, gewisse
> charakteristische Signaleigenschaften hat, kann man den Trigger weiter
> verfeinern. Menschliche Sprache läßt sich z.B. relativ leicht als solche
> erkennen.

Es geht um Sprache. Hast du Infos darüber, wie das mit wenig 
Rechenleistung geht? Ich kenne nur, dass das Signal mittels FFT zerlegt 
wird und bei bestimmten Frequenzen + Oberschwingungen Sprache angenommen 
wird.

klausr schrieb:
> Wie kommst du darauf, dass du einen µC in OpenCL programmieren kannst?

Hab ich nicht gesagt.

klausr schrieb:
> Das einzige, was ich mir bei dir jetzt noch vorstellen kann, nimm einen
> AVR, Bascom und den eingebauten AD Wandler (hat zwar nur 10 bit, aber
> zum aufzeichnen sollte es reichen). Es soll auch irgendwo einen FAT32
> SD-Card Treiber für Bascom geben. Wenn das dann läuft, denke über
> externe AD-Wandlung nach.

Danke. Wäre wohl das einfachste.

von Malte S. (maltest)


Lesenswert?

Bei Sprache kommen auch die diversen Telefonie-Codecs in Betracht. 
Hardware dafür könnte auch in äteren ISDN- oder DECT Geräten von der 
Schlachtbank zu finden sein.

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.