2012-07-31 2 views
0

Java의 스트림에서 읽을 때 낮은 수준의 실제 사운드 데이터 형식은 무엇입니까? 예를 들어, 44.1khz 샘플 속도, 16 비트 샘플 깊이, 2 채널, 부호있는 데이터, bigEndian 형식의 다음 데이터 라인을 사용하십시오.사운드 데이터 형식

TargetDataLine tdLine = new TargetDataLine (새 AudioFormat (44100,16,2, true, true)));

나는 44100 번 샘플링하고 각 샘플은 16 비트라고 알고 있습니다. 내가 이해하지 못하는 것은 16 비트 또는 각각의 16 비트가 나타내는 것입니다. 또한 각 채널에는 자체 16 비트 샘플이 있습니까?

+1

16 비트는 그 불연속 샘플의 시간에 음파의 진폭을 나타내는 숫자를 구성하고 궁극적으로 -1과 1 사이의 값으로 측정됩니다.하지만 기본 데이터 형식이 중요한 이유는 무엇입니까? – bzlm

+0

데이터를 읽고 특정 빈도의 인스턴스를 선택할 수 있기를 원합니다. – user1565671

+1

그러면 [디지털 오디오 기본 사항 이상] (http://en.wikipedia.org/wiki/Fast_Fourier_transform)을 배워야합니다. :) [@ IronMansan 's answer] (http://stackoverflow.com/a/11740529/7724)에서 확장하기 위해, 샘플링 된 사운드의 일부에 포함 된 주파수는 움직일 때 다이어프램이 만드는 모든 음파의 파장입니다 . [이것은 계산 가능합니다] (http://stackoverflow.com/questions/3287518/reliable-and-fast-fft-in-java), 그러나 복잡하고 정확한 과학은 아닙니다. – bzlm

답변

0

첫 번째 질문부터 시작하겠습니다. 예, 각 채널에는 매초 44100 개의 샘플 각각에 대해 자체 16 비트 샘플이 있습니다.

첫 번째 질문은 스피커 내부의 하드웨어에 대해 알아야한다는 것입니다. 격막과 전자석이 있습니다. 격막은 커버를 벗으면 크게 볼 수 있습니다. 전자석이 충전되면 다이어프램에 부착 된 철판을 잡아 당기거나 밀어서 이동시킵니다. 그 움직임은 소리가됩니다.

각 샘플의 값은 전기가 스피커로 전송되는 양입니다. 따라서 샘플이 0 일 때 다이어프램은 정지 상태입니다. 그것이 긍정적일 때 그것은 일방적으로 그리고 그것이 부정 일 때 다른 방향으로 밀려 나게됩니다. 샘플이 클수록 다이어프램이 움직입니다.

데이터의 모든 샘플을 그래프로 표시하면 시간이 지남에 따라 스피커의 움직임 그래프가 나타납니다.

0

당신은 Digital Audio Basics에 대해 배워야합니다 (Wiki는 더 많은 읽기와 링크를 제공합니다). 그 후 44.1khz 샘플 속도, 16 비트 샘플 깊이, 2 채널, 서명 된 데이터, bigEndian 형식 즉시 낮은 수준의 형식을 말해야합니다. 이 경우

그것이있는 16 비트 INT의 바이트 스트림에 넣고 16- 비트 각 샘플을 나타내는 정수 서명 최종적 엔디안 결정, 44100 개 샘플/초를 의미한다 (빅 엔디안 = 최상위 바이트 먼저).