2011-07-20 49 views
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,该怎么办?我该如何给出向量中第一个字节的指针?我应该使用另一个容器,如简单的字符数组吗?

+2

第一个字节的地址有用吗?浮点数的字节解释与其实际值完全无关。 XAudio2可以解决这个问题吗? –

+2

你的循环是错误的。它会错误地读取文件。 – Nawaz

+0

@Konrad老实说,我不确定,因为我在选项中指定样本采用Float32格式,并且每个样本都有32位,所以XAudio2将在解释值之前读取前4个字节? –

回答

1

如何给矢量中第一个字节的指针?

完全相同的方式,但我不确定它会做你的期望。阅读你的问题的意见。