0
指向XAudio2中XAUDIO_BUFFER
结构的音频缓冲区的指针定义为BYTE *pAudioData
。当我使用16位整数PCM,这是我的程序看起来像:指向矢量第一个字节的指针<float>
void buildWaveBuffer(std::vector<unsigned char> &vec)
{
std::string lineString;
int lineInt;
unsigned char lowByte, highByte;
std::ifstream myfile("sineInt16");
if (myfile.is_open())
{
while(myfile.good())
{
std::getline(myfile,lineString,',');
lineInt = atoi(lineString.c_str());
highByte = (lineInt >> 8) & 0x00FF;
lowByte = lineInt & 0x00FF;
vec.push_back(lowByte);
vec.push_back(highByte);
}
myfile.close();
}
}
"sineInt16"
为.csv文件。由于矢量按顺序组织在内存中,我只需要执行pAudioData = &vec[0]
,它就可以工作。如果我想将.csv的格式更改为float
,该怎么办?我该如何给出向量中第一个字节的指针?我应该使用另一个容器,如简单的字符数组吗?
第一个字节的地址有用吗?浮点数的字节解释与其实际值完全无关。 XAudio2可以解决这个问题吗? –
你的循环是错误的。它会错误地读取文件。 – Nawaz
@Konrad老实说,我不确定,因为我在选项中指定样本采用Float32格式,并且每个样本都有32位,所以XAudio2将在解释值之前读取前4个字节? –