Witam.
Mam problem natury takiej, że gdy wczytuję plik .wav i później chcę go zapisać w takiej samej postaci to plik wyjściowy ma 44b no i niestety nie działa.
Nie jestem pewien czy po subchunk2Size nie ma jakichś danych lub czy pomiędzy coś nie pominąłem.
Pozdrawiam.
#include <iostream>
#include <fstream>
using namespace std;
struct wavHEADER
{
public :
//wavHEADER() : Data(nullptr) {}
//~wavHEADER() { delete[] Data; }
char riff[4];
int chunkSize;
char wave[4];
char fmt[4];
int subchunk1Size;
short int audioFormat;
short int numChannels;
int sampleRate;
int ByteRate;
short int BlockAlign;
short int BitsPerSample;
char SubChunk2ID[4];
int subchunk2Size;
//byte* Data;
};
//stałe
static const uint32_t size_ui32 = sizeof(uint32_t);
static const uint32_t size_ui16 = sizeof(uint16_t);
int main()
{
//wczytanie pliku
ifstream file("input.wav",ios::in | ios::binary);
wavHEADER wavFile;
if (file.good()) {
file.read(wavFile.riff, 4);
file.read(reinterpret_cast<char*>(&wavFile.chunkSize), size_ui32);
file.read(wavFile.wave, 4);
file.read(wavFile.fmt, 4);
file.read(reinterpret_cast<char*>(&wavFile.subchunk1Size), size_ui32);
file.read(reinterpret_cast<char*>(&wavFile.audioFormat), size_ui16);
file.read(reinterpret_cast<char*>(&wavFile.numChannels), size_ui16);
file.read(reinterpret_cast<char*>(&wavFile.sampleRate), size_ui32);
file.read(reinterpret_cast<char*>(&wavFile.ByteRate), size_ui32);
file.read(reinterpret_cast<char*>(&wavFile.BlockAlign), size_ui16);
file.read(reinterpret_cast<char*>(&wavFile.BitsPerSample), size_ui16);
file.read(wavFile.SubChunk2ID, 4);
file.read(reinterpret_cast<char*>(&wavFile.subchunk2Size), size_ui32);
//wavFile.data = new byte[wavFile.subchunk2Size];
//file.read(reinterpret_cast<char*>(wavFile.data), sizeof(wavFile.subchunk2Size));
file.close();
}
cout << "RIFF: " << wavFile.riff[0] << wavFile.riff[1] << wavFile.riff[2] << wavFile.riff[3] << endl;
cout << "chunkSize: " << wavFile.chunkSize << endl;
cout << "wave: " << wavFile.wave[0] << wavFile.wave[1] << wavFile.wave[2] << wavFile.wave[3] << endl;
cout << "fmt: " << wavFile.fmt[0] << wavFile.fmt[1] << wavFile.fmt[2] << wavFile.fmt[3] << endl;
cout << "subchunk1Size: " << wavFile.subchunk1Size << endl;
cout << "audioFormat: " << wavFile.audioFormat << endl;
cout << "numChannels: " << wavFile.numChannels << endl;
cout << "sampleRate: " << wavFile.sampleRate << endl;
cout << "ByteRate: " << wavFile.ByteRate << endl;
cout << "BlockAlign: " << wavFile.BlockAlign << endl;
cout << "BitsPerSample: " << wavFile.BitsPerSample << endl;
cout << "data: " << wavFile.SubChunk2ID[0] << wavFile.SubChunk2ID[1] << wavFile.SubChunk2ID[2] << wavFile.SubChunk2ID[3] << endl;
cout << "subchunk2Size: " << wavFile.subchunk2Size << endl;
//zapisanie do pliku
ofstream file2("output.wav", ios::binary | ios::app | ios::ate);
if (file2.good())
{
file2.write(wavFile.riff, 4);
file2.write(reinterpret_cast<char*>(&wavFile.chunkSize), size_ui32);
file2.write(wavFile.wave, 4);
file2.write(wavFile.fmt, 4);
file2.write(reinterpret_cast<char*>(&wavFile.subchunk1Size), size_ui32);
file2.write(reinterpret_cast<char*>(&wavFile.audioFormat), size_ui16);
file2.write(reinterpret_cast<char*>(&wavFile.numChannels), size_ui16);
file2.write(reinterpret_cast<char*>(&wavFile.sampleRate), size_ui32);
file2.write(reinterpret_cast<char*>(&wavFile.ByteRate), size_ui32);
file2.write(reinterpret_cast<char*>(&wavFile.BlockAlign), size_ui16);
file2.write(reinterpret_cast<char*>(&wavFile.BitsPerSample), size_ui16);
file2.write(wavFile.SubChunk2ID, 4);
file2.write(reinterpret_cast<char*>(&wavFile.subchunk2Size), size_ui32);
//wavFile.data = new byte[wavFile.subchunk2Size];
//file.read(reinterpret_cast<char*>(wavFile.data), sizeof(wavFile.subchunk2Size));
file.close();
}
system("pause");
}
alagneroutFile.write(reinterpret_cast<char*>
w 10 liniach pod rząd to właściwa treść (nazwa pola) ginie w gąszczu pustosłowia.