这对我来说似乎是一个相当复杂的问题,但我是c ++的新手。我正在尝试读取多个wave文件,对它们执行操作,并将结果写入新文件。我对他们做的事情可能包括将它们混合在一起或以任意数量的方式单独处理它们以产生一个或多个新的wav文件。到目前为止,我正在尝试使用以下类来管理它们:
class wavObj {
public:
char RIFF_ID[4]; // 4 bytes, RIFF Header Magic header
uint32_t RIFF_Size; // 4 bytes, RIFF Chunk Size
char RIFF_WAVE[4]; // 4 bytes, WAVE Header
char fmt_ID[4]; // 4 bytes, FMT header
uint32_t fmt_Size; // 4 bytes, Size of the fmt chunk
uint16_t fmt_AudioFormat; // 2 bytes, Audio format 1=PCM,6=mulaw,7=alaw, 257=IBM Mu-Law, 258=IBM A-Law, 259=ADPCM
uint16_t fmt_NumOfChan; // 2 bytes, Number of channels 1=Mono 2=Sterio
uint32_t fmt_SamplesPerSec; // 4 bytes, Sampling Frequency in Hz
uint32_t fmt_bytesPerSec; // 4 bytes, bytes per second
uint16_t fmt_blockAlign; // 2 bytes, 2=16-bit mono, 4=16-bit stereo
uint16_t fmt_bitsPerSample; // 2 bytes, Number of bits per sample
uint16_t fmt_cbSize; // 2 bytes, Extension size for high bit depth stuff
uint16_t fmt_wValidBitsPerSample; // 2 bytes, wav may not use all fmt_bitsPerSample. this tells how many are actually used.
uint32_t fmt_dwChannelMask; // 4 bytes,
char fmt_SubFormat[16]; // 16 bytes,
char data_ID[4]; // 4 bytes, "data" string
uint32_t data_Size; // 4 bytes, Sampled data length
vector<unsigned char> dataBuffer; // the data (of all sorts of fun sizes)
int loadFile( const char *filePath );
void displayHeader();
};
将文件中的数据读入此类非常简单,但将二进制文件写入文件很复杂。我的问题是,序列化向量,或者编写构造函数和析构函数来管理wave文件数据的新/删除情况是否更容易/更安全/更有效。或者是否有更好的方法来管理和操作许多wav文件?我对图书馆没有兴趣帮助我,我这样做主要是为了学习经验。