2013-02-14 2 views
-1

32 비트 float wav 데이터를 해석하는 방법은 무엇입니까? w32 데이터를 I32로 읽은 다음 2^31으로 나눕니다. 그러나 올바른 결과를 얻지 못합니다.32 비트 플로트 wav 데이터를 해석하는 방법

+4

파일의 데이터는 실제로 32 비트 부동 상태입니까? 그렇다면 int32로 읽는 것이 명확하게 작동하지 않습니다. –

+0

wav 데이터를 빅 엔디안 또는 리틀 엔디안으로 인코딩 할 수 있습니다. 먼저 바이트를 스왑해야 할 수도 있습니다. –

+0

먼저 올바른 결과를 정의하십시오. –

답변

2

값은 실수입니다. 값을 부동 소수점 값에 할당하고 그대로 사용해야합니다. float 값을 int32 값으로 읽는다면 reinterpret_cast와 같은 효과가 있습니다.

float f1 = 1.0e5; 
int i1 = *reinterpret_cast<int*>(&f1); 
// i1 = 1203982336, not 100000 

는 잘못된 값을 받고 피할 수없는 경우, 다음 다시 '올바른'값을 얻기 위해, 당신은 재 해석을

float f2 = *reinterpret_cast<float*>(&i1); 
// f2 = 1.0e5 

여전히해야 할 수있는 데이터의 엔디안을 조정하는 역 할 필요가있다.

2

RIFF header을 확인하십시오. 이것은 Wav 파일의 엔디안을 알려줍니다.

32 비트 부동 소수점을 올바르게 읽는 데 엔디안을 사용하십시오. 예 : 시스템이 리틀 엔디안 (예 : x86 프로세서 기반)이고 wav 파일이 빅 엔디안 (예 : 이전 PPC Mac에서 생성 된 경우) 인 경우 데이터를 읽은 후에 32-bit endian swap을 수행해야합니다 float 변수에 실제로 의미가있는 데이터가 포함되어 있습니다 (일반적으로 -1.0f와 1.0f 사이의 값입니다).

+0

모두 감사합니다! float로 데이터를 읽으면 문제가 해결되었습니다. 데이터는 32 비트 부동 소수점으로 저장되었으므로 int로 읽는 것은 실제로 이해가되지 않았습니다. –

관련 문제