Входной файл: in.wav
. Я должен читать фрагменты (преуспел) и читать образцы для нормализации аудиофайла ...Ошибка приложения, хотя я не могу понять причину
Проблема в том, что он сбой при попытке сгладить значения образцов .wav-файла. Он просто найдет минимальное значение и максимальное значение в массиве, но он сработает ... Скажите, пожалуйста, что не так.
Вот код:
#include <stdio.h>
#include <stdlib.h>
#include "main.h"
#define hdr_SIZE 64
typedef struct FMT
{
char SubChunk1ID[4];
int SubChunk1Size;
short int AudioFormat;
short int NumChannels;
int SampleRate;
int ByteRate;
short int BlockAlign;
short int BitsPerSample;
} fmt;
typedef struct DATA
{
char Subchunk2ID[4];
int Subchunk2Size;
int Data[441000];
} data;
typedef struct HEADER
{
char ChunkID[4];
int ChunkSize;
char Format[4];
fmt S1;
data S2;
} header;
int main()
{
FILE *input = fopen("in.wav", "rb"); /// nameIn
if(input == NULL)
{
printf("Unable to open wave file (input)\n");
exit(EXIT_FAILURE);
}
FILE *output = fopen("out.wav", "wb"); /// nameOut
header hdr;
fread(&hdr, sizeof(char), hdr_SIZE, input);
/* NOTE: Chunks has been copied successfully. */
/*###############################*/
/*##### UPDATE (char *ptr;) #####*/
/*###############################*/
char *ptr; // 'int' was written here instead of 'char'. That's was a stupid mistake...
long n = hdr.S2.Subchunk2Size;
/// COPYING SAMPLES...
ptr = malloc(sizeof(hdr.S2.Subchunk2Size));
while (n-- != 0)
{
fread(&ptr, 1, 1, input); // Continues reading after the least 'stop' place.
} // I was being told here (on "stack") that it is so...
n = hdr.S2.Subchunk2Size; // Resetting 'n'.
int min = ptr[0], max = ptr[0], i;
/* THE PROBLEM IS HERE: */
for (i = 0; i < n; i++)
{
if (ptr[i] < min) // If the next elements is less than previous, swap them.
min = ptr[i];
if (ptr[i] > max) // If the next elements is bigger than previous, swap them.
max = ptr[i];
}
printf("> > >%d__%d\n", min, max); // Displaying of 'min' and 'max'.
fclose(input);
fclose(output);
return 0;
}
UPDATE:
ЭВРИКА! Это все из-за 8 бит на образец! Я должен манипулировать ими (с образцами), как с типом символа. (См моего "### UPDATE ###" - комментарий в коде)
Заполнение байтов ... Просеивание байтов везде! – 2013-05-09 18:43:55
Вы пробовали использовать код через отладчик? (Также вы можете начать с 'i = 1', так как вы уже установили' min' и 'max' в' ptr [0] ') – Kninnug
Что касается вашего обновления,' min' устанавливается в первый элемент динамически выделенный массив, для которого инициализируется 'ptr'. – jxh