2011-07-20 12 views
0

XAudio2のXAUDIO_BUFFER構造体のオーディオバッファへのポインタは、BYTE *pAudioDataと定義されています。 .csvファイルであることベクトルの先頭バイトへのポインタ<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":私は16ビットの整数PCMを使用していた場合は、これは私のプログラムは以下のように見えたものです。ベクトルはメモリ内で順番に整理されているので、私は単にpAudioData = &vec[0]を実行するだけで動作します。 .csvの形式をfloatに変更したい場合はどうすればよいですか?ベクトルの最初のバイトへのポインタを与えるにはどうしたらいいですか?単純な文字配列のような別のコンテナを使うべきですか?

+2

最初のバイトのアドレスはどのようなものですか? floatのバイト単位の解釈は、実際の値とはまったく関係ありません。 XAudio2はこれに対処できますか? –

+2

ループが間違っています。ファイルを間違って読み込みます。 – Nawaz

+0

@Konrad正直なところ私は分かりませんが、オプションではサンプルがFloat32形式であり、各サンプルに32ビットが指定されているので、XAudio2は値を解釈する前に最初の4バイトを読み込みます? –

答えて

1

ベクターの最初のバイトへのポインタを与えるにはどうすればよいですか?

まったく同じ方法ですが、期待通りのことをすることはできません。あなたの質問にコメントを読んでください。