Forum: Mikrocontroller und Digitale Elektronik STM32f4 Discovery: wave aufnehmen


von roggen 1. (roggen123)


Lesenswert?

Hallo liebe Leute.

ich versuch mich momentan in den STM32 Controller einzuarbeiten.
ich wollte es anhand des Beispielst: Audio Playback and Record von ST 
machen.

Das Programm bringt mich jedoch leicht zum verzweifeln...
mit dem Aufnehmen und darauffolgenden Wiedergebe klappt alles super...
jedoch wenn ich die Datei seperat vom USB, mit dem Mediaplaye, abspielen 
möchte, bekomme ich nur eine Fehlermeldung, dass diese Datei nict 
wiedergegeben werden kann.

Hat jemand schon mal das gleiche Problem gehabt und kann mir da vllt 
weiterhelfen? ich würde es wirklich willkommen heißen, wenn auch die 
Datei auf dem USB richtig funktioniert. Wenn dass jedoch nicht der Fall 
ist, dann stimmmt wohl etwas mit den Programmiercode nicht.

Gruß
Roggen

von Uwe B. (derexponent)


Lesenswert?

Hi Roggen,

ich habe mit dem STM Beispiel auch rumgespielt
und hab dann selbst eine Funktion zum Aufnehmen geschrieben

die von STM erstellte WAV hat, so wie ich das gesehen habe
mehrere Fehler im WAV-Header :

1. sie speichern nicht die tatsächliche Länge vom File
und die korrekte Datenanzahl stimmt auch nicht

2. sie speichern das File als "Stereo" obwohl es Mono ist

3. sie speichern als Sampl-Frq 8000 Hz, es wird aber mit 16000 Hz
aufgenommen

4. das TAG (Byte/sec) beschreiben sie auch mit 8000 obwohl bei 16bit da
der doppelte Wert reinkommen müsste

ich kann dir jetzt nicht genau sagen welcher dieser Fehler
dazu führt das Windows dein File nicht abspielt
zur not musst du alle 4 Punkte per Hand korrigieren
(z.B. per HEX-Editor)

Gruss Uwe

von roggen 1. (roggen123)


Lesenswert?

Danke! Da hast vollkommen recht. Ich werde mal sehen, wie ich das 
Problem besten löse.

von Uwe B. (derexponent)


Lesenswert?

Ich vermute dem Player passt die Filelänge nicht

die anderen Werte führen eigentlich nur zu einer falschen
Abspielgeschwindigkeit

schau dir mal nach dem Aufnehmen die Filegröße im Explorer an (in Bytes)
und schreib diesen Wert (als 4Byte Hex) ab Adr 0x04 im WAV-Header
(direkt nach 'RIFF')

dann zieh von dem Wert 44 Bytes ab (so lange ist der Header) und 
speicher
diesen kleineren Wert (auch als 4Byte Hex) ab Adr 0x28 im WAV-Header
(direkt nach 'data')


hier mal ein Beispiel :

dein File ist 902836 Bytes gross => 0x0DC6B4

Adr 0x04 = 0xB4
Adr 0x05 = 0xC6
Adr 0x06 = 0x0D
Adr 0x07 = 0x00

902836 - 44 = 902792 => 0x0DC688

Adr 0x28 = 0x88
Adr 0x29 = 0xC6
Adr 0x2A = 0x0D
Adr 0x2B = 0x00

und schau mal ob das File dann abgespielt wird

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.