Всем привет!!!
Ситуация такая:
Заголовок успешно читаю. Хочу получить массив с самплами.
Проблема: Не понимаю как преобразовать битовое представление.
Цель: Необходимость выводить в виде звуковой волны с последующими трансформациями и записью в файл. (Задание курсовой.)
Пока выглядит так:
Это структура:
typedef struct WAV_HEADER{
char RIFF[4]; // RIFF Header Magic header
unsigned long ChunkSize; // RIFF Chunk Size
char WAVE[4]; // WAVE Header
char fmt[4]; // FMT header
unsigned long Subchunk1Size; // Size of the fmt chunk
unsigned short AudioFormat; // Audio format 1=PCM,6=mulaw,7=alaw, 257=IBM Mu-Law, 258=IBM A-Law, 259=ADPCM
unsigned short NumOfChan; // Number of channels 1=Mono 2=Sterio
unsigned long SamplesPerSec; // Sampling Frequency in Hz
unsigned long bytesPerSec; // bytes per second
unsigned short blockAlign; // 2=16-bit mono, 4=16-bit stereo
unsigned short bitsPerSample; // Number of bits per sample
char Subchunk2ID[4]; // "data" string
unsigned long Subchunk2Size; // Sampled data length
}wav_hdr;
Это читалка заголовка в конструкторе:
wav_hdr wavHeader;
FILE *wavFile;
int headerSize = sizeof(wav_hdr), filelength = 0;
wavFile = fopen( FileName.toAscii().data() , "r" );
if(wavFile == NULL){
std::cout << "ERROR READ FILE" << std::endl;
}
else
{
std::cout << "FILE IS OPEN TO READ" << std::endl;
fread(&wavHeader,headerSize,1,wavFile);
filelength = getFileSize(wavFile);
for (int i = 0; i < wavHeader.Subchunk2Size; i++)
{
audioData[i] = // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// А что тут теперь делать ???
// Как читать данные ???
// И в каком формате они должны быть представленны ???
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
fclose(wavFile);
Буду благодарен за объяснения и примеры кодов!