신기하다고 해야겠지만..
파형을 뒤집는다고 해서 소리가 달라지지 않는다라는 신기한 사실이 발견되었다.
당연히 뒤집으면 값이 달라지니, 주파수 쪽에서도 변동이 생길 것이고,
그러다 보면 당연히 일반적인 사람의 목소리가 아니거나 다른 소리로 변한걸이라고 생각했는데
그대로 나오는 현상이 있었다.
완전히 같은 위치는 아니지만
"in.wav"에서는 2채널에서는 파형이 나오는데 반해
"outout.wav"에서는 파형이 전혀 나오지 않음에도 불구하고 소리는 나온다.
왼쪽 파형을 뒤집어서 오른쪽에 덮어 씌운 결과물이 "output.wav"인데
왜 소리가 나오는지도 애매하다..
void main()
{
short s16temp;
FILE *fp;
FILE *output;
char filename[] = "in.wav";
RIFF_HEADER riff;
FMT_CHUNK fmt;
DATA_CHUNK data;
char *wave = NULL;
unsigned int idx, maxloop;
unsigned int ch_idx, ch_maxloop;
fp = fopen(filename, "rb");
output = fopen("output.wav","wb");
fread(&riff, 1, sizeof(RIFF_HEADER), fp);
fwrite(&riff, 1, sizeof(RIFF_HEADER), output);
printf("riff.file_length[%d] bytes\n",riff.file_length);
fread(&fmt, 1, sizeof(FMT_CHUNK), fp);
fwrite(&fmt, 1, sizeof(FMT_CHUNK), output);
printf("fmt.fmt_length[%d] bytes\n",fmt.fmt_length);
printf("fmt.format[%d]\n",fmt.format);
printf("fmt.channels[%d] channels\n",fmt.channels);
printf("fmt.khz[%d] kHz\n",fmt.khz);
printf("fmt.bps[%d] Bps\n",fmt.bps);
printf("fmt.blockalign[%d] bytes/block\n",fmt.blockalign);
printf("fmt.depth[%d] bits/sample\n",fmt.depth);
fread(&data, 1, sizeof(DATA_CHUNK) - 4, fp);
fwrite(&data, 1, sizeof(DATA_CHUNK) - 4, output);
printf("data.data_length[%d]\n",data.data_length);
printf("playtime %02d:%02d\n",
data.data_length/fmt.bps/60,
data.data_length/fmt.bps);
printf("samples %02d\n",
data.data_length/fmt.blockalign);
wave = malloc(data.data_length);
fread(wave, 1, data.data_length, fp);
maxloop = data.data_length / 2;
ch_maxloop = fmt.channels;
#if 1
for(idx=0; idx < maxloop; idx+=fmt.channels)
{
memcpy(&s16temp, (short*)wave + idx + 1, fmt.depth / 8);
fwrite(&s16temp, 1, fmt.depth / 8, output);
if(s16temp == -65536)
{
s16temp = -65535;
}
s16temp = -s16temp;
fwrite(&s16temp, 1, fmt.depth / 8, output);
}
#endif
free(wave);
fclose(fp);
fclose(output);
}