
Audio-Intro Teil 3

WAV

Struktur
Dateikopf
Das WAV-Format folgt dem RIFF Resource Interchange File Format, also ist das WAV-Format eigentlich eine dreischichtige Beziehung, die hier vereinfacht wird. Sein Datei-Header-Format ist wie folgt:
Adressieren Sie Inhalte vom Carving-Typ
00H-03H 4 Zeichen * 4 Flag für den Austausch von RIFF-Ressourcendateien
04H-07H 4 unsigned int Die Anzahl der Bytes von der nächsten Adresse bis zum Ende der Datei.
08H-0BH 4 Zeichen * 4 WAV-Datei WAVE-Logo
0CH-0FH 4 Zeichen * 4 fmt Wave-Datei-Flag, die letzte Ziffer ist 0x20 Leerzeichen
10H-13H 4 unsigned int Die Größe des Subchunk-Dateiheaders. Für das WAV-Subfragment ist der Wert 0x10.
14H-15H 2 kurz ohne Vorzeichen Formattyp, wenn der Wert 1 ist, bedeutet dies, dass die Daten lineare PCM-Codierung sind
16H-17H 2 kurze vorzeichenlose Anzahl von Kanälen
18H-1BH 4 int unsigned Abtastrate
1CH-1FH 4 int unsigned Wavefile Bytes pro Sekunde = Abtastrate Bittiefe PCM / 8 Kanäle
20H-21H 2 kurze vorzeichenlose DATA-Datenblockeinheitslänge = Anzahl der Kanäle * PCM-Bittiefe / 8
22H-23H 2 kurze vorzeichenlose Bittiefe PCM
24H-27H 4 Zeichen * 4 Datenstempeldaten
28H-2BH 4 unsigned int Gesamtlänge des Datenteils (Bytes)
struct WAVHeader
{ Zeichen RIFF[ 4 ]; ///Ressourcendatei-Austausch-Flag RIFF unsigned LEN; ///Anzahl Bytes von der nächsten Adresse bis zum Ende der Datei char WAV[ 4 ]; ///WAV-Datei-Flag WAVE char FMT [ 4 ]; ///FMT-Dateizeiger winken, letzte Ziffer ist 0x20 Leerzeichen unsigned SubchunkSize; ///Die Größe des Sub-Chunk-Dateiheaders, für WAV ist dieser Sub-Chunk der Wert 0x10 DATATYPE short unsigned; / //Formattyp, wenn der Wert 1 ist, bedeutet dies, dass die Daten vorzeichenlose lineare PCM-Codierung short CH sind; ///Anzahl der vorzeichenlosen Kanäle F; ///Vorzeichenlose Abtastrate BYTERATE; ///Anzahl der Bytes pro Sekunde der Wave-Datei = Abtastrate*PCM-Bittiefe/8*Anzahl der vorzeichenlosen Kanäle
kurz DATAUNITLEN; ///Länge der Datenblockeinheit = Kanalnummer * Bittiefe PCM/8 unsigned short BITDEPTH; ///Bittiefenzeichen PCM DATA[ 4 ]; ///Datenflag data unsigned DATALEN ; ///Teilliche Gesamtlänge der Daten (Bytes) };
Datenorganisation
Nach dem Dateikopf folgt der Datenteil der WAV-Datei. Seine Datenorganisation ist: der linke Kanalwert des ersten Abtastpunkts, der rechte Kanalwert des ersten Abtastpunkts, …, der linke Kanalwert des letzten Abtastpunkts, der rechte Kanalwert des letzten Abtastpunktwerts. Jeder Wert hat eine Bittiefe von Bits.
Generieren Sie eine einfache wav
Vervollständigen Sie zuerst den Wav-Header.
WAVHeader getHeader ( int Zahl )
{
WAV-Header-Auflösung; memcpy (res.RIFF, “RIFF” , sizeof (res.RIFF)); memcpy (res.WAV, “WAVE” , sizeof (res.WAV)); memcpy (res.FMT, “fmt” , Größe von ( res.FMT )); res.SubchunkSize= 0x10 ; res.DATENTYP= 1 ; res.CH= 2 ; res.F=F; res.BITDEPTH=TIEFE; res.BYTERATE=res.F*res.BITDEPTH/ 8 *res.CH; res.DATAUNITLEN=res.CH*res.BITDEPTH/ 8 ; memcpy(res.DATA, “Daten”
, Größe von ( res.DATA ));
res.DATALEN=num*res.DATAUNITLEN;
res.LEN=res.DATALEN+ 44 -8 ; Rückkehrer; }
Definieren Sie zuerst den Schlüsselnamen – Häufigkeitsvergleichstabelle.
const double keyf[]=
{ 27.5 , 29.1352 , 30.8677 , 32.7032 , 34.6478 , 36.7081 , 38.8909 , 41.2034 , 43.6535 , 46.2493 , 48.9994 , 51.9131 , 55 , 58.2705 , 61.7354 , 65.4064 , 69.2957 , 73.4162 , 77.7817 , 82.4069 , 87.3071 , 92.4986 , 97.9989 ,
103.826 , 110 , 116.541 , 123.471 , 130.813 , 138.591 , 146.832 , 155.563 , 164.814 , 174.614 , 184.997 , 195.998 , 207.652 , 220 , 233.082 , 246.942 , 261.626 , 277.183 , 293.665 , 311.127 , 329.628 , 349.228 , 369.994 , 391.995 , 415.305 , 440
, 466.164 , 493.883 , 523.251 , 554.365 , 587.33 , 622.254 , 659.255 , 698.456 , 739.989 , 783.991 , 830.609 , 880 , 932.328 , 987.767 , 1046.5 , 1108.73 , 1174.66 , 1244.51 , 1318.51 , 1396.91 , 1479.98 , 1567.98 , 1661.22 , 1760 , 1864.66 ,
1975,53, 2093, 2217,46, 2349,32, 2489,02, 2637,02, 2793,83, 2959,96, 3135,96, 3322,44, 3729,31, 3951,07, 4186,01; ___ { “A-0” , “A#0” , “B- 0” , “C-1” , “C#1” , “D-1” , “D#1” , “E-1” , “F-1”, “F#1”
, “G-1” , “G#1” , “A-1” , “A#1” , “B-1” , “C-2” , “C#2” , “D-2″ , ” D#2“, „E-2“, „F-2“, „F#2“, „G-2“, „G#2“, „A-2“, „A#2“, „B- 2″, “C-3”, “C#3”, “D-3”, “D#3”, “E-3”, “F-3”, “F#3”, “G-3” , “Sonne#3” ,
