I'm trying to open a wav file, read it, convert the buffer to an integer array, then convert it back and write it.
int main(){
ifstream file ("C:\\Documents\\ParadigmE3-shortened.wav",std::ios_base::out | std::ios_base::binary);
char * header = new char[50000044];
file.read(header, 50000044);
cout << header[0] << endl;
unsigned int * header_int = new unsigned int[50000044];
for(unsigned int i = 0; i < sizeof(header); i++){
header_int[i] = header[i];
}
char * writefile = new char[50000044];
for(unsigned int i = 0; i < sizeof(header); i++){
itoa(header_int[i], &writefile[i], 10);
}
cout << writefile[0] << endl;
ofstream newfile ("C:\\Documents\\ParadigmE3-modified.wav", std::ios_base::out | std::ios_base::binary);
newfile.write(writefile, 50000044);
}
Currently, this prints:
R
8
Indicating that it changed the data in the process of converting it. How would I get this to work properly?
After some suggestions, and learning I can perform calculations on char
variables, I reformulated the code, and now it is:
int main(){
// Create file variable with file
ifstream file ("C:\\Documents\\ParadigmE3-shortened.wav",std::ios_base::out | std::ios_base::binary);
// Read the first 15040512 bytes to char array pointer, called header
char * header = new char[15040512];
file.read(header, 15040512);
// Copy contents of header to writefile, after the 44'th byte, multiply the value by 2
char * writefile = new char[15040512];
for(int i = 0; i < sizeof(header); i++){
if(i<44) writefile[i] = header[i];
if(i>=44) writefile[i] = 2 * header[i];
}
// Copy the contents of writefile, but at the 44th byte, divide it by 2, returning it to its original value
for(int i = 0; i < sizeof(header); i++){
if(i<44) writefile[i] = writefile[i];
if(i>=44) writefile[i] = .5 * writefile[i];
}
// Create file to write to
ofstream newfile ("C:\\Documents\\ParadigmE3-modified.wav", std::ios_base::out | std::ios_base::binary);
// Write writefile to file
newfile.write(writefile, 15040512);
}
However, upon playing (in Windows Media Player), it does not play, so it is clearly not the original file, as I was going for.