c ++ ifstream read не может быть сохранен в короткий буфер массива - PullRequest
0 голосов
/ 12 ноября 2018

я хочу сохранить данные из ifstream в короткий массив,

, но перед печатью запускается 2

short *Data;
// 88200 / (16/8) = 44100

size_t sdata_size = wavHeader.data_size /(wavHeader.bits_per_sample/8);

Data = new short [sdata_size];

std::cout << "run1" << std::endl;

in.read ((char*)&Data,sdata_size);

std::cout << "run2" << std::endl;

хорошо, я сделал некоторую коррекцию, как указывает Алан Биртлз,

short *Data;
// 88200 / (16/8) = 44100
Data = new short [wavHeader.data_size/(wavHeader.bits_per_sample/8)];

std::cout << "run1" << std::endl;

in.read ((char*)Data,wavHeader.data_size /(wavHeader.bits_per_sample/8));

std::cout << "run2" << std::endl;

in.close();

// this start point at first element and then increment to next array
short *ptr1 = Data;
// this start at the end element and then decrement to the next,
//- minus 1 for last element
 short *ptr2 = Data 
+(wavHeader.data_size/(wavHeader.bits_per_sample/8)) - 1;

for (; ptr1 < ptr2; ++ptr1, --ptr2)
{
  short tmp = *ptr1;
  *ptr1 = *ptr2;
  *ptr2 = tmp;
}
out.write ((char*)Data,wavHeader.data_size /(wavHeader.bits_per_sample/8));

// clean up the new
delete [] Data;

я хочу добиться того, чтобы я стремился обратить аудио данные wav и записать их в другой файл wav. Однако вывод неверен какие-либо идеи, почему?

ожидаемый результат введите описание изображения здесь

мой результат

введите описание изображения здесь

1 Ответ

0 голосов
/ 12 ноября 2018

(char*)&Data должно быть просто (char*)Data, и вы должны создать массив размером sdata_size / sizeof( short ) (при условии, что sdata_size кратно 2).

...