-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwav.h
74 lines (51 loc) · 2.93 KB
/
wav.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "main.h"
//#include <stdint.h>
// Структура, описывающая заголовок WAV файла.
typedef struct
{
// WAV-формат начинается с RIFF-заголовка:
// Содержит символы "RIFF" в ASCII кодировке
// (0x52494646 в big-endian представлении)
char chunkId[4];
// 36 + subchunk2Size, или более точно:
// 4 + (8 + subchunk1Size) + (8 + subchunk2Size)
// Это оставшийся размер цепочки, начиная с этой позиции.
// Иначе говоря, это размер файла - 8, то есть,
// исключены поля chunkId и chunkSize.
uint32_t chunkSize;
// Содержит символы "WAVE"
// (0x57415645 в big-endian представлении)
char format[4];
// Формат "WAVE" состоит из двух подцепочек: "fmt " и "data":
// Подцепочка "fmt " описывает формат звуковых данных:
// Содержит символы "fmt "
// (0x666d7420 в big-endian представлении)
char subchunk1Id[4];
// 16 для формата PCM.
// Это оставшийся размер подцепочки, начиная с этой позиции.
uint32_t subchunk1Size;
// Аудио формат, полный список можно получить здесь http://audiocoding.ru/wav_formats.txt
// Для PCM = 1 (то есть, Линейное квантование).
// Значения, отличающиеся от 1, обозначают некоторый формат сжатия.
uint16_t audioFormat;
// Количество каналов. Моно = 1, Стерео = 2 и т.д.
uint16_t numChannels;
// Частота дискретизации. 8000 Гц, 44100 Гц и т.д.
uint32_t sampleRate;
// sampleRate * numChannels * bitsPerSample/8
uint32_t byteRate;
// numChannels * bitsPerSample/8
// Количество байт для одного сэмпла, включая все каналы.
uint16_t blockAlign;
// Так называемая "глубиная" или точность звучания. 8 бит, 16 бит и т.д.
uint16_t bitsPerSample;
// Подцепочка "data" содержит аудио-данные и их размер.
// Содержит символы "data"
// (0x64617461 в big-endian представлении)
char subchunk2Id[4];
// numSamples * numChannels * bitsPerSample/8
// Количество байт в области данных.
uint32_t subchunk2Size;
// Далее следуют непосредственно Wav данные.
}WAVHEADER;
WAVHEADER WavHeader(uint32_t sampleRate, uint32_t SizeData);