91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 7KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2021-06-08
  • 語言: C/C++
  • 標簽: wav??

資源簡介

200行代碼實現(xiàn)PCM格式的WAV文件的讀寫,使用標準C++庫實現(xiàn),不依賴于其他庫。 // Write WAv文件 Wave_header header(1, 48000, 16); uint32_t length = header.fmt_data->sample_per_sec * 10 * header.fmt_data->bits_per_sample / 8; uint8_t *data = new uint8_t[length]; CWaveFile::write("e:\\test1.wav", header, data, length); // read //CWaveFile wave; //wave.read("e:\\test1.wav");

資源截圖

代碼片段和文件信息


#include?
#include?
#include?
#include?
#include?

using?namespace?std;

#define?FOURCC?uint32_t

#define?MAKE_FOURCC(abcd)?\
(?((uint32_t)d)?|?(?((uint32_t)c)?<
template??struct?MakeFOURCC{?enum?{?value?=?(ch0?<

//?Format?chunk?data?field
struct?Wave_format{

uint16_t?format_tag;??????//?WAVE的數(shù)據(jù)格式,PCM數(shù)據(jù)該值為1
uint16_t?channels;????????//?聲道數(shù)
uint32_t?sample_per_sec;??//?采樣率
uint32_t?bytes_per_sec;???//?碼率,channels?*?sample_per_sec?*?bits_per_sample?/?8
uint16_t?block_align;?????//?音頻數(shù)據(jù)塊,每次采樣處理的數(shù)據(jù)大小,channels?*?bits_per_sample?/?8
uint16_t?bits_per_sample;?//?量化位數(shù),8、16、32等
uint16_t?ex_size;?????????//?擴展塊的大小,附加塊的大小

Wave_format()
{
format_tag??????=?1;?//?PCM?format?data
ex_size?????????=?0;?//?don‘t?use?extesion?field

channels????????=?0;
sample_per_sec??=?0;
bytes_per_sec???=?0;
block_align?????=?0;
bits_per_sample?=?0;
}

Wave_format(uint16_t?nb_channel?uint32_t?sample_rate?uint16_t?sample_bits)
:channels(nb_channel)?sample_per_sec(sample_rate)?bits_per_sample(sample_bits)
{
format_tag????=?0x01;???????????????????????????????????????????//?PCM?format?data
bytes_per_sec?=?channels?*?sample_per_sec?*?bits_per_sample?/?8;?//?碼率
block_align???=?channels?*?bits_per_sample?/?8;
ex_size???????=?0;???????????????????????????????????????????????//?don‘t?use?extension?field
}
};

//?The?basic?chunk?of?RIFF?file?format
struct?base_chunk{

FOURCC?fcc;????//?FourCC?id
uint32_t?cb_size;?//?數(shù)據(jù)域的大小

base_chunk(FOURCC?fourcc)
:?fcc(fourcc)
{
cb_size?=?0;
}
};

/*

數(shù)據(jù)格式為PCM的WAV文件的基本結(jié)構(gòu)
--------------------------------
|?base_chunk?|?RIFF |
---------------------
| WAVE????????????|
---------------------
|?base_chunk?|?fmt??| Header
---------------------
|?Wave_format|??????|?
---------------------
|?base_chunk?|?data?|
---------------------------------
|????PCM?data???????????????????|
---------------------------------
*/

/*

數(shù)據(jù)格式為PCM的WAV文件頭
--------------------------------
|?base_chunk?|?RIFF |
---------------------
| WAVE????????????|
---------------------
|?base_chunk?|?fmt??| Header
---------------------
|?Wave_format|??????|
---------------------
|?base_chunk?|?data?|
--------------------------------
*/

struct?Wave_header{

shared_ptrse_chunk>?riff;
FOURCC?wave_fcc;
shared_ptrse_chunk>?fmt;
shared_ptr??fmt_data;
shared_ptrse_chunk>?data;

Wave_header(uint16_t?nb_channel?uint32_t?sample_rate?uint16_t?sample_bits)
{
riff??????=?make_sharedse_chunk>(MakeFOURCC<‘R‘?‘I‘?‘F‘?‘F‘>::value);
fmt???????=?make_sharedse_chunk>(MakeFOURCC<‘f‘?‘m‘?‘t‘?‘?‘>::value);
fmt->cb_size?=?18;

fmt_data??=?make_shared(nb_channel?sample

評論

共有 條評論