PCM16le双声道数据中左声道和右声道的采样值是间隔存储的。samples=44100Hz,采样位数是16bit,每个声道的一个采样值占用2Byte。“LE”代表Little Endian,代表2 Byte采样值的存储方式为高位存在高地址中。
int CTransPic::simplest_pcm16le_halfvalueleft(char* url){
ifstream infptr;
infptr.open(url, ios::in | ios::binary);
ofstream hflfptr;
hflfptr.open("halfvalueleft.pcm", ios::out | ios::binary);
int cnt = 0;
unsigned char* halfbuf = (unsigned char*)malloc(4);
while (!infptr.eof())
{
short *samplenum = NULL;
infptr.read((char*)halfbuf, 4);
samplenum = (short*)halfbuf;
*samplenum = (*samplenum) / 2;
hflfptr.write((const char*)samplenum, 2);
hflfptr.write((const char*)halfbuf + 2, 2);
++cnt;
}
cout << cnt << endl;
free(halfbuf);
infptr.close();
hflfptr.close();
return 0;
}