mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Audio Datei aus I2S-Daten erstellen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Burkhard K. (buks)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Wie bekommme ich aus gespeicherten Rohdaten im I²S Format (2 Kanäle á 16 
Bit, signed, left justified) eine abspielbare Audio-Datei?

Lassen sich unkompromierten Daten in einem Container (.ogg?) verpacken? 
Oder geht es nicht ohne Codec wie FLAC oder Vorbis? Gibt es evtl. 
passende Pakete für Octave oder SciLab?

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst einfach ein WAV-File daraus machen. Das File-Format ist 
ziemlich einfach. Es besteht nur aus einem Header und dann den Rohdaten. 
Es gibt 8- und 16-bit, sowie Mono und Stereo. Bei Bedarf kannst Du das 
Wav-File mit einem beliebigen Kodierer in MP3 oder OGG wandeln.

BTW: Ich nehme an, es geht um dein Ultraschallprojekt. Welches Mikrophon 
verwendest du?

Autor: Hans (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert

Autor: c-hater (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hans schrieb:

> Du kannst einfach ein WAV-File daraus machen. Das File-Format ist
> ziemlich einfach. Es besteht nur aus einem Header und dann den Rohdaten.
> Es gibt 8- und 16-bit, sowie Mono und Stereo. Bei Bedarf kannst Du das
> Wav-File mit einem beliebigen Kodierer in MP3 oder OGG wandeln.

Das ist so nicht ganz richtig dargestellt. Was du hier beschreibst, ist 
PCM-Wav, also ein Spezialfall von Wav für unkomprimierte Daten. 
Sozusagen der historische Urgrund des Wav-Formats. So aber natürlich 
genau passend für das Problem des TO.

Man sollte aber auch erwähnen, dass Winzigweich schon damals im letzten 
Jahrtausend viel weitsichtiger war als viele OSS-Projekte es heute sind 
und eine Art Escape von den trivialen PCM-Daten von Anfang an vorgesehen 
hat, die FCC-ID.

D.h.: Ein Wav-Container kann im Prinzip jedes Audiozeugs beinhalten, 
auch das, was heute "High-End" ist. Theoretisch muss dazu nur die FCC-ID 
bei Microsoft registriert werden, damit es auch formal "offiziell" wird. 
Keine Ahnung, ob das entsprechende Registrierungsverfahren heute 
überhaupt noch existiert...

Aber egal, Fakt ist jedenfalls, dass es etliche offiziell registrierte 
FCC-IDs tatsächlich gibt, die eben NICHT PCM-Wav sind. Das sollte man 
beim Programmieren immer im Hinterkopf haben, wenn man mit Wav-Dateien 
hantiert...

Autor: Burkhard K. (buks)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans schrieb:
> Welches Mikrophon
> verwendest du?

Knowles FG-23629 Elektret mit selbstgebauten Verstärker zur 
Frequenzganganpassung.

Hans schrieb:
> Octave: wavwrite

wavwrite und wavread kennt meine 5.1 Installation nicht, dafür 
audiowrite und audioread, die können auch WAV-Format. Danke.

Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde einen I2S-Core in ModelSIM einladen und per file write 
speichern.

Mit C müsste es auch leicht zu machen sein. I2S(nach SPEC) enthält 
uncodierte signed Daten in PCM.
Du musst nur schauen, wie es mit den Rohdaten aussieht und diese 
gespeichert wurden. U.U. gibt es einen offset gegenüber dem WS.

Autor: GEKU (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Burkhard K. schrieb:
> ie bekommme ich aus gespeicherten Rohdaten im I²S Format (2 Kanäle á 16
> Bit, signed, left justified) eine abspielbare Audio-Datei?

Mit Audacity Datei/Importieren/Rohdaten

https://www.audacityteam.org/download/

Autor: IFF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:

> Man sollte aber auch erwähnen, dass Winzigweich schon damals im letzten

Es war Electronic Arts..

Autor: Analogmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GEKU schrieb:
> Mit Audacity Datei/Importieren/Rohdaten

Mein Audacity kann keine I2S-Daten importieren. Rohdaten im CSV-Format 
geht. Das ist aber etwas anderes.

Autor: Burkhard K. (buks)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Tipps und Hinweise.

Bis ich die Rohdaten habe, muss ich noch etwas basteln. Bis dahin eine 
kleine Spielerei mit Downchirps (hyperbolisch vs. exponentiell) in 
Octave.

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist besser, wenn Du ein Semikolon an die Zeilenenden machst, sonst 
läuft dein Output über.

Mit sound(sig,fab) kann man das Signal hörbar machen.
fab=19200;

t = [0:0.001:10.239];
figure(1);
plot(t,((32-e)*e.**(-t))+e+40,t,(16./(t+0.5))+40);
hchidx = (16./(t+0.5)).+40;
hchirp = cos(hchidx.*(2*pi).*t);
echidx = ((32-e)*e.**(-t))+e+40;
echirp = cos(echidx.*(2*pi).*t);

figure(2);
plot(t,echirp, t,hchirp);

audiowrite('eh_chirp.wav', transpose([hchirp;echirp]), fab, 'BitsPerSample', 16);

figure(3);
plot(t,echirp.-hchirp, t,hchirp.-echirp);
audiowrite('ehdelta_chirp.wav', transpose([hchirp-echirp;echirp-hchirp]), fab, 'BitsPerSample', 16);

sound(echirp,fab);

Autor: GEKU (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Analogmann schrieb:
> Mein Audacity kann keine I2S-Daten importieren

Audacity kann neben Textdatei (CSV)  auch "Binäre Dateien" importieren.

Autor: Hein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo ich das gerade lese:

GEKU schrieb:
> Audacity kann neben Textdatei (CSV)  auch "Binäre Dateien" importieren.

Wie muss das Format aufgebaut sein? In der Audacity Doku ist kein 
Hinweis oder Beispiel dafür.

(Bäuchte einen einfachen Analogdatenabspieler)

Autor: c-hater (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hein schrieb:

> Wie muss das Format aufgebaut sein?

Dafür gibt es viele Möglichkeiten, aus denen du beim Import frei wählen 
kannst.

Siehe Anhänge...

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
IFF schrieb:

> Es war Electronic Arts..

Nö, von denen stammte nur das Grundgerüst des Containers. Die konkrete 
Ausprägung der Fileformate stammt von den jeweiligen Lizenznehmern. Im 
Falle von Wav, Anim und Avi halt von Microsoft.

Autor: Burkhard K. (buks)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:
> aus denen du beim Import frei wählen
> kannst.

... und musst. Bisher habe ich keine Möglichkeit gefunden, eine 
Defaulteinstellung für den Import vorzugeben. Die Samplingrate ist zwar 
frei wählbar, aber trotzdem steht in der Maske immer 44100Hz. Da ich mit 
50kHz oder 100kHz arbeite, muss ich dieses Feld bei jedem Import neu 
anfassen.

: Bearbeitet durch User
Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum machst Du nicht einfach alles in Octave?

.. wavread ... o.ä.

Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans schrieb:
> .. wavread ... o.ä.

Weil der TE (angeblich) einen I2S-Datenstrom hat und der ist nicht so 
direkt zu importieren.

Autor: Tobias N. (technick2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:
> Dafür gibt es viele Möglichkeiten, aus denen du beim Import frei wählen
> kannst.

Kann der auch ASCII lesen?

Ich hatte das auch bereits einmal probiert, komme aber nicht weiter. Hat 
wer mal ein Beispiel für ein konkretes Datenformat oder Rohdatenfile und 
der dazu passenden Einstellung des Importfilters?

Ich hätte gerne so etwas als WAV:

4564, 2342
2344,  123
... , ...

also zweireihig direkt aus Excel, gfs mit Semikolon, wenn sein muss.

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias N. schrieb:

> Kann der auch ASCII lesen?

Nein.

> Ich hätte gerne so etwas als WAV:
>
> 4564, 2342
> 2344,  123
> ... , ...
>
> also zweireihig direkt aus Excel, gfs mit Semikolon, wenn sein muss.

Dann musst du es aus Excel halt im Binärformat exportieren. Dazu sind 
nur sehr wenige Zeilen VBA-Code nötig. Ungefähr 5...

Mit ein paar Zeilen mehr könnte man dann allerdings auch gleich direkt 
aus Excel ein *.wav speichern...

Man muss halt einfach nur generell programmieren können und die VBA-Doku 
lesen.

Autor: Burkhard K. (buks)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jürgen S. schrieb:
> Weil der TE (angeblich) einen I2S-Datenstrom hat und der ist nicht so
> direkt zu importieren.

Warum "(angeblich)"? Ich schreibe tatsächlich den Datenstrom an den 
Codec 1:1 mit.

Soweit ich sehe, besteht Octave's audioread() auf einem Container, 
Audacity importiert auch Rohdaten.

Import mit fread() ginge sicher - aber das Handling in Audacity (z.B. 
beim Zuschneiden) ist deutlicher einfacher.

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Soweit ich sehe, besteht Octave's audioread() auf einem Container,
>Audacity importiert auch Rohdaten.

Du musst ja nicht audioread(...) nehmen. Mit fread(...) kann man ja 
beliebige Binärdaten lesen, also auch Deine I2S Daten:
https://octave.org/doc/v4.2.1/Binary-I_002fO.html

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.