Wave ファイルをロードする関数を作成しています。その過程で、ステレオの場合はデータを 2 つの個別のバッファに分割します。プログラムは i = 18 になり、左チャネルの fread パス中にクラッシュします。(cout は無視してかまいません。これらはデバッグ用に存在するだけです。)ファイルを 1 回のパスでロードし、memmove を使用してバッファを埋める必要があるのではないでしょうか?
if(params.channels == 2){
params.leftChannelData = new unsigned char[params.dataSize/2];
params.rightChannelData = new unsigned char[params.dataSize/2];
bool isLeft = true;
int offset = 0;
const int stride = sizeof(BYTE) * (params.bitsPerSample/8);
for(int i = 0; i < params.dataSize; i += stride)
{
std::cout << "i = " << i << " ";
if(isLeft){
std::cout << "Before Left Channel, ";
fread(params.leftChannelData+offset, sizeof(BYTE), stride, file + i);
std::cout << "After Left Channel, ";
}
else{
std::cout << "Before Right Channel, ";
fread(params.rightChannelData+offset, sizeof(BYTE), stride, file + i);
std::cout << "After Right Channel, ";
offset += stride;
std::cout << "After offset incr.\n";
}
isLeft != isLeft;
}
} else {
params.leftChannelData = new unsigned char[params.dataSize];
fread(params.leftChannelData, sizeof(BYTE), params.dataSize, file);
}