WAVE PCM soundfile format
来源:互联网 发布:三国志2017挂机软件 编辑:程序博客网 时间:2024/06/05 19:35
WAVE PCM 格式分析:
The canonical WAVE format starts with the RIFF header:0 4 ChunkID Contains the letters "RIFF" in ASCII form (0x52494646 big-endian form).4 4 ChunkSize 36 + SubChunk2Size, or more precisely: 4 + (8 + SubChunk1Size) + (8 + SubChunk2Size) This is the size of the rest of the chunk following this number. This is the size of the entire file in bytes minus 8 bytes for the two fields not included in this count: ChunkID and ChunkSize.8 4 Format Contains the letters "WAVE" (0x57415645 big-endian form).The "WAVE" format consists of two subchunks: "fmt " and "data":The "fmt " subchunk describes the sound data's format:12 4 Subchunk1ID Contains the letters "fmt " (0x666d7420 big-endian form).16 4 Subchunk1Size 16 for PCM. This is the size of the rest of the Subchunk which follows this number.20 2 AudioFormat PCM = 1 (i.e. Linear quantization) Values other than 1 indicate some form of compression.22 2 NumChannels Mono = 1, Stereo = 2, etc.24 4 SampleRate 8000, 44100, etc.28 4 ByteRate == SampleRate * NumChannels * BitsPerSample/832 2 BlockAlign == NumChannels * BitsPerSample/8 The number of bytes for one sample including all channels. I wonder what happens when this number isn't an integer?34 2 BitsPerSample 8 bits = 8, 16 bits = 16, etc. 2 ExtraParamSize if PCM, then doesn't exist X ExtraParams space for extra parametersThe "data" subchunk contains the size of the data and the actual sound:36 4 Subchunk2ID Contains the letters "data" (0x64617461 big-endian form).40 4 Subchunk2Size == NumSamples * NumChannels * BitsPerSample/8 This is the number of bytes in the data. You can also think of this as the size of the read of the subchunk following this number.44 * Data The actual sound data.
看以下例子分析:
Notes:
- The default byte ordering assumed for WAVE data files is little-endian. Files written using the big-endian byte ordering scheme have the identifier RIFX instead of RIFF.
- The sample data must end on an even byte boundary. Whatever that means.
- 8-bit samples are stored as unsigned bytes, ranging from 0 to 255. 16-bit samples are stored as 2's-complement signed integers, ranging from -32768 to 32767.
- There may be additional subchunks in a Wave data stream. If so, each will have a char[4] SubChunkID, and unsigned long SubChunkSize, and SubChunkSize amount of data.
- RIFF stands for Resource Interchange File Format.
General discussion of RIFF files:
Multimedia applications require the storage and management of a wide variety of data, including bitmaps, audio data, video data, and peripheral device control information. RIFF provides a way to store all these varied types of data. The type of data a RIFF file contains is indicated by the file extension. Examples of data that may be stored in RIFF files are:
- Audio/visual interleaved data (.AVI)
- Waveform data (.WAV)
- Bitmapped data (.RDI)
- MIDI information (.RMI)
- Color palette (.PAL)
- Multimedia movie (.RMN)
- Animated cursor (.ANI)
- A bundle of other RIFF files (.BND)
NOTE: At this point, AVI files are the only type of RIFF files that have been fully implemented using the current RIFF specification. Although WAV files have been implemented, these files are very simple, and their developers typically use an older specification in constructing them.
For more info see http://www.ora.com/centers/gff/formats/micriff/index.htm
References:
- http://netghost.narod.ru/gff/graphics/summary/micriff.htm RIFF Format Reference (good).
- http://www.lightlink.com/tjweber/StripWav/WAVE.html
- WAVE PCM soundfile format
- WAVE PCM soundfile format
- WAVE PCM soundfile format
- WAVE PCM soundfile format
- 音频编解码·格式篇(1)Wave PCM audio format(WAV)
- 音频编解码·格式篇(1)Wave PCM audio format(WAV)
- 音频编解码·格式篇(1)Wave PCM audio format(WAV)
- 音频编解码·格式篇(1)Wave PCM audio format(WAV)
- WAVE PCM 声音文件格式
- WAVE PCM 声音文件格式
- WAVE PCM 文件剖析
- WAVE PCM 声音文件格式
- PCM Audio and Wave Files
- PCM Audio and Wave Files
- The WAVE file format
- Windows WAVE format(转)
- Wave File format help
- wp:Wave File Format
- Attribute/特性心得随笔
- 学霸们别让证书迷了眼
- Android中用到的多线程技术概念
- Object.toString()返回字符串的意义:对象名+@+对象内存地址?
- Hadoop如何实现关联计算
- WAVE PCM soundfile format
- 理解InvalidateRect函数
- 电子钱包、电子现金与qPBOC
- WSDL分析
- ORA-00607 ORA-00600解决方法
- 将像素绘制到屏幕上去
- android:failed to connect to localhost/127.0.0.1
- windows获取时间方法
- LoadRunner+Android模所器实现抓包并调试本地服务端