Audio Datei aus I2S-Daten erstellen

OP #5890355
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?
Gast
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?
Gast
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...
Persönliche Seite
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.
Gast
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.
1
fab=19200;
2

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

11
figure(2);
12
plot(t,echirp, t,hchirp);
13

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

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

20
sound(echirp,fab);
Gast
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)
Gast
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.
OP
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.
Gast
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.
Gast
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.
OP
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.
Gast
c-hater schrieb:
> 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.

Wenn man es programmieren muss, braucht es auch das VBA nicht. Ich bezog 
mich auf den scheinbar ein fachen Vorschlag von oben.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.