신기하다고 해야겠지만..
파형을 뒤집는다고 해서 소리가 달라지지 않는다라는 신기한 사실이 발견되었다.

당연히 뒤집으면 값이 달라지니, 주파수 쪽에서도 변동이 생길 것이고,
그러다 보면 당연히 일반적인 사람의 목소리가 아니거나 다른 소리로 변한걸이라고 생각했는데
그대로 나오는 현상이 있었다.

완전히 같은 위치는 아니지만
"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);
}

'모종의 음모 > noise cancelling' 카테고리의 다른 글

wave multi channel order  (0) 2010.05.01
파형 뒤집어 플레이 하기  (6) 2009.08.12
WAVE format  (0) 2009.08.12
Active Noise Control - ANC  (0) 2009.08.12
WAVEFORMATEX structure  (0) 2009.04.01
음속  (0) 2009.03.30
Posted by 구차니

댓글을 달아 주세요

  1. 오오.. 이거 무지 신기하네요. 근데 암만 생각해도 이상합니다. 파형이 없는데 소리가 난다니...
    MS녹음기의 농간은 아닐까요?

    2009.08.13 00:30 [ ADDR : EDIT/ DEL : REPLY ]
    • winamp에서도 일단은 파형은 평편하게 나오는데 소리는 나더군요 ㅎ

      음.. 일단 wav 포맷을 좀 더 파고 들어 봐야겠어요 ㅠㅠ

      2009.08.13 11:33 [ ADDR : EDIT/ DEL ]
  2. 프로그램의 버그 아닐까요? 소스를 살펴보지 않아서 모르겠지만요.

    2009.08.13 10:23 [ ADDR : EDIT/ DEL : REPLY ]
    • 프로그램 버그이거나 제가 버그겠죠 ㅋ
      파형이야 좌우 합쳐서 그려주는 걸테니까, 좌측 출력을 invert 시켜서 우측 출력으로 해준거니까 계산상으로는 평편한 파형이 나오는건 맞는것 같습니다

      2009.08.13 11:34 [ ADDR : EDIT/ DEL ]
  3. 마음

    프로그램 안에 폰트 색깔이 예쁘네요
    혹시 VS Setting 파일을 받을수 있을까요?
    제 이메일 주소는 aubreybread@naver.com이에요!

    2010.04.16 17:07 [ ADDR : EDIT/ DEL : REPLY ]