Audiorecorder

OP #3115960
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?
OP #3116069
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
OP #3116077
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.
Persönliche Seite #3116148
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?
OP #3116163
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?
#3116180
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.
OP #3116191
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?
Persönliche Seite #3116193
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.
OP #3116210
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?
OP #3116234
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.
Gast #3116281
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.
OP #3116365
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.
Gast #3116524
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.
Gast #3116616
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).
Gast #3116623
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.
OP #3117150
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren