2013-05-15 2 views
2

필자는 Java를 사용하여 사운드 샘플을 읽는 프로젝트를 시작했습니다. 각 샘플의 속성에 따라 (단순화를 위해 현재 데시벨에 집중할 생각입니다. 특정 샘플 또는 샘플 세트의 전반적인 '볼륨') 0부터 255까지의 값을 반환합니다. 0은 침묵이고 255는 가장 높은 음압이됩니다 (기준점과 비교하면 어떻게됩니까? 이 말로). 그런 다음이 값을 바이트로 반환하여 PWM을 사용하는 LED의 강도를 제어하고 음악을 시각적으로 '확인'하기 위해 Arduino로 보냈습니다.음악 오디오 샘플을 dB로 표현 하시겠습니까?

저는 오디오 파일 형식 전문가가 아니며 음악 파일에 데이터가 저장되는 방식에 대한 특별한 이해가 없습니다. 따라서 샘플을 읽는 방법을 찾는 데 어려움을 겪고 있으며 전체 볼륨 레벨을 바이트로 표시하는 방법을 찾습니다. javax.sound.sampled 패키지를 살펴 보았습니다. 매우 혼란 스럽습니다. 내가 어떻게 이것을 성취 할 수 있는지에 대한 통찰력은 크게 감사 할 것이다.

+0

아니요, 이것은 다릅니다. – Legare

+1

정확히 어떻게 다른가요? 이것은 적은 단어보다는 더 많은 단어를 넣을 좋은 시간입니다. –

+0

이것은 연결된 질문과 전혀 중복되지 않습니다. – Brad

답변

2

나타냅니다. 그러나 사운드 샘플은 애니메이션에서 시각적 프레임보다 훨씬 자주 실행되기 때문에 집계 측정을 만드는 것이 깔끔하게 이루어집니다.

예를 들어 멋진 시각적 애니메이션 속도는 초당 60 회 업데이트되며 소리의 가장 일반적인 샘플링 속도는 초당 44100 회입니다. 따라서 735 개의 샘플 (44100/60 = 735)이 결국 비주얼 라이저와의 인터페이싱을위한 좋은 선택이 될 수 있습니다.

그런데, 내가 읽은 모든 공식 자바 튜토리얼 (나는 커다란 팬이다.)에서, javax.sound.sampled를 따르는 자바 튜토리얼이 가장 어렵다는 것을 발견했다. http://docs.oracle.com/javase/tutorial/sound/TOC.html
그러나 그들은 여전히 ​​읽을만한 가치가 있습니다. 필자가 다시 작성을 담당한다면 더 많은 코드 예제가있을 것이다. 가장 좋은 코드 예제는 여러 섹션에 있습니다 (예 : "파일 및 형식 변환기 사용").

RMS를 계산하지 않으려는 경우 주어진 수의 샘플에 대해 로컬 높음 및/또는 낮음 값을 저장하는 것이 좋습니다. 이 수를 데시벨과 관련시키는 것은 의심 스럽지만 MAYBE는 비주얼 라이저에 원하는 매핑을 부여한 후에 유용 할 수 있습니다. 문제의 일부는 주어진 웨이브상의 단일 포인트 값이 격렬하게 범위를 가질 수 있다는 것입니다. 로컬 하이는 에너지 또는 볼륨보다 정렬되는 구성 고조파 단계로 인해 더 많을 수 있습니다.

PCM 상단 및 하단 값이 0과 256이 아닌 8 비트 인코딩의 경우 -128-127 일 가능성이 큽니다. 더 일반적인 방법은 여전히 ​​16 비트 인코딩 (-32768 ~ 32767)입니다. 그러나 Bastyen의 링크를 따라 가면 당신은이 걸림돌을 얻을 것입니다. 코드를 비트 인코딩과 독립적으로 만들려면 다른 계산을 수행하기 전에 데이터를 정규화 (-1에서 1 사이의 부동 소수점으로 변환)해야합니다.

+0

나는 초당 60 번 업데이트한다는 아이디어가 마음에 든다. 10ms (사운드 프로세싱에 더 많은 것)보다이 애플리케이션에 더 적합하다. – Bastien

+0

편집을위한 Thx! 처음에는 정확하게하지 않는 것에 대해 사과드립니다. –

3

처음에는 .wav 파일에 데이터를 저장하는 데 사용되는 형식 인 Pulse-code modulation을 읽는 것이 좋습니다 (가장 간단한 방법).

다음에는 here의 wav 파일에서 PCM 데이터를 가져 오는 방법에 대한 게시물이 있습니다.

마지막 (44100 kHz의 모노의 10ms => 441 개 샘플들에서) 약 10ms의 소리의 창에

energy equation http://img15.hostingpics.net/pics/922956CodeCogsEqn.gif
적용 (실제로 더 에너지 임) "볼륨"에 도착.

데시벨을 계산하는 것은 실제로는 간단하지 않다, 그러나 많은 샘플을보고해야합니다, 그것은 당신을 도울 수 있으면 좋겠다 (내게 +1) Bastyen으로