Forum: FPGA, VHDL & Co. .flac umwandeln in festen std_logic_vector


von Jan (Gast)


Lesenswert?

Gibt es eine Möglichkeit fertige codierte.flac Dateien in eine feste 
vhdl st_logic_vector Datei umzuwandeln (also nur die audio sampels)?
Grüße
Jan

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jan schrieb:
> Gibt es eine Möglichkeit
Drehen wir den Spieß mal um, dann wird ein Schuh daraus:
Warum sollte es keine Möglichkeit geben so was zu tun? Allerdings 
wirst du kaum ein fertiges Tool finden, das das kann. die Arbeit wirst 
du selber machen müssen...

> Gibt es eine Möglichkeit fertige codierte.flac Dateien in eine feste
> vhdl st_logic_vector Datei umzuwandeln (also nur die audio sampels)?
Gibt es eins Möglichkeit, diese Datei in eine WAV-Datei umzuwandeln? 
Denn ab dort ist es ungemein einfacher, die Daten einzulesen...

> Gibt es eine Möglichkeit fertige codierte.flac Dateien in eine feste
> vhdl st_logic_vector Datei umzuwandeln (also nur die audio sampels)?
Wofür? Für eine Simulation? Oder willst du die Audio-Daten auf diese Art 
ins FPGA packen?

von Janos B. (janos)


Lesenswert?

Kennst du Matlab? Ich denke das sollte da recht einfach gehen, audioread 
ließt deine n samples lange .flac Dateie und wandelt sie dir in eine 2xn 
Matlab-Matrix.

Schreib nun ein Skript, welches zuerst die Matrix a mit deinen Samples 
anlegt, danach ein textfile anlegt und öffnet. File ID abspeichern und 
dann in einer for-Schleife mit der Zählvariable i einen String an nach 
der Art
1
vector = ['signal sample_left' num2str(i) ':  std_logic_vector(' num2str(length(de2bi(a(1:1))-1) ' downto 0) := "' mat2str(de2bi(a(1:i))) '";'];
anlegen.
Danach noch in der for Schleife diesen String mit irgendwas wie
1
fprintf(File_ID, '%s /n', vector)
Zeile für Zeile in deinem Textfile ablegen. Damit hättest du dann alle n 
linken Samples in n verschiedenen Std_logic_vector umgewandelt und der 
Inhalt deines Textfiles sähe z.B. so aus (für die Unwahrscheinliche 
Bitbreite von 8 Bit in der .flac Datei :D ):

signal sample_left1: std_logic_vector (7 downto 0) := "01001101";
signal sample_left2: std_logic_vector (7 downto 0) := "01001010";
signal sample_left3: std_logic_vector (7 downto 0) := "01011100";
signal sample_left4: std_logic_vector (7 downto 0) := "10000010";

usw...

Ich hab oben stehendes jetzt nur mal eben so aus dem Kopf geschrieben 
und nicht laufen lassen, da ich gerade hier kein Matlab habe und 
garantiere somit nicht für einen Flüchtigkeitsfehler. Aber ich denke der 
Ansatz wird damit deutlich?

von J. S. (engineer) Benutzerseite


Lesenswert?

Reden wir hier von offline- oder realtime-Konversion?

Einen flac-decoder in VHDL zu machen ist sicher nicht so ohne, gfs gibt 
es da was. Wäre auch für meine aktuelle Anwendung interessant. Offline 
geht das mit jedem flac-Player, den man auf eine wave-Datei richtet, 
oder mit den einschlägigen Audioprogrammen.

Die WAVE-Datei kann man mit SOC in ein binary verwandeln und (z.B. mit 
Excel) dann in eine Const-Struktur verwandeln.

Viel wird da aber in einen FPGA nicht reinpassen. Wenn, muss das per 
Software direkt in ein RAM geschrieben werden und auch das ist ja 
begrenzt. Also WAV in ein DDR-RAM.

von J. S. (engineer) Benutzerseite


Lesenswert?

Upps, ich sehe gerade, da gab es eine zeitgleiche Antwort.

Stimmt, MATLAB ist immer eine Lösung, hat aber nicht jeder. Vielleicht 
geht es auch mit Octave?

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.