2011-07-20 80 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

如何給矢量中第一個字節的指針?

完全相同的方式,但我不確定它會做你的期望。閱讀你的問題的意見。