2012-11-15 9 views
0

아래 코드에서 볼 수있는 것처럼 변수 vol을 사용하여 Java에서 사운드를 재생하는 기능이 있습니다. 이 변수 vol은 0과 1 사이의 십진수입니다. 0을 재생할 때 사운드는 기본적으로 가능한 가장 작은 볼륨이며, 1로 재생하면 소리가 가능한 한 크게 들립니다. 프로그램의 소리가 어떤 decibles인지 어떻게 알 수 있습니까? 주어진 vol의 십분 사료를 알고 싶습니다.자바 사운드와 관련된 데시벨

public static final AudioFormat DEFAULTAUDIOFORMAT = new AudioFormat(44100, 16, 2, true, true); 

private void generateTone() { 
     int channels = DEFAULTAUDIOFORMAT.getChannels(); 
     int sampleSizeInBytes = DEFAULTAUDIOFORMAT.getSampleSizeInBits() /8; 
     float sampleRate = DEFAULTAUDIOFORMAT.getSampleRate(); 
     int timedSample = (int) (sampleRate * msecs/1000f); 
     int len = timedSample * channels * sampleSizeInBytes; 
     int shapeLen = (int) (.05 * timedSample); 
     buf = new byte[len]; 
     double scale; 
     for (int i = 0, j = 0; i < timedSample; ++i) 
     { 
      int wave = (int)(vol * 32767.0 * Math.sin(2.0 * Math.PI * hz * i/sampleRate)); 
      scale = 1.0; 
      if (i <= shapeLen) { 
       scale = i/(double)shapeLen; 
      } 
      else if (i >= timedSample - shapeLen) { 
       scale = 1.0-((i- timedSample + shapeLen)/(double)(shapeLen-1)); 
      } 
      wave = (int)(scale * wave); 
      buf[j++] = (byte)(wave >>> 8); 
      buf[j++] = (byte) wave; 
      buf[j++] = (byte)(wave >>> 8); 
      buf[j++] = (byte) wave; 
     } 
    } 
+2

스피커 앞에 미터를 삽입하면 되나요? Java는 신호를 생성 한 후 증폭이 얼마나 적용되는지를 알 수있는 방법이 없습니다. – Affe

답변

0

데시벨은 v1 현재 음량의 값이고 v2이 기준 낮은 사운드 레벨 10 * Math.log10(v1/v2)로 정의된다.

+0

및 v1 및 v2의 단위는 무엇입니까? 제 경우에는 v2가 0입니다. – CodeGuy

+0

0으로 나눌 수 없으므로 임의의 초기 레벨, 즉 가장 낮은 소리를들을 수 있습니다. – remigio

+0

@ CodeGuy 여기 단위는 전원입니다. 전압 레벨 만있는 경우 승수는 10 대신 20입니다. – EJP

1

1 단계 : SPL 미터를 찾습니다. 어떤 종류의 제조 또는 실험실 작업이있는 경우 안전 담당자가 누구인지 알고 있어야합니다. 그렇지 않다면, 일을 마친 후 주차장에서 놀고, 어리석은 시끄러운 입체 음향을 가진 자동차를 누가 보는지 물어보십시오.

2 단계 : 사용자에게 의미있는 참조를 설정하십시오. 휴대 전화 벨소리? 기기에서 1m 떨어진 야외에서 측정 할 수 있습니다. (아마 청바지 한 켤레의 주머니에서도 ... :)) Automotive Device? 장치에서 운전석까지의 일반적인 거리에서 차량 내부를 측정하십시오. 조작? opeartor가 앉는 일반적인 거리에서 cemet floor를 측정하십시오. 당신은 아이디어를 얻습니다.

3 단계 : 유량계를 설정하고 참조 측정을하십시오. 그것은 단지 추정 일 뿐이므로 나는 min에서 max까지 약 10 개의 값을 읽었을 것입니다. 그리고 점 사이의 직선을 보간합니다. 당신이 수학 괴짜 일 경우 커브에 적합 할 수 있습니다.

4 단계 : 이전의 데이터를 사용하여 Vol 레벨을 기반으로 참조 SPL을 찾는 조회 테이블을 소프트웨어에 넣습니다.

5 단계 : 측정을 위해 참조 환경이 사용 된 상자와 비슷한 곳에서 설명하십시오.

6 단계 : 제품에 소리 출력 값이 참조 추정 일 뿐이며 출력 레벨이 직업 안전 지침을 준수한다는 것을 보증하지 않는 큰 부인책을 제품에 부착하십시오.

자바와는별로 아무것도하지만 : 음압 레벨의

데시벨은 보통 사람이들을 수있는 소리 quiestest받는 특정 지점의 상대에 공기에서 발생하는 압력의 비율이다.

전압이나 전력과 같은 음향 시스템에 대해 언급 할 수있는 절대적인 양이 아닙니다. "이것은 90dB-SPL 신호입니다"라고 말하는 것은 의미가 없습니다. 참조 문은 다음과 같아야합니다.

"3mx3m의 스튜디오에서 축에있는 라우드 스피커에서 2m 거리에서 측정 한 90dB-SPL 신호입니다."

제어 된 환경에서 전체 시스템을 측정해야합니다. 그러면 소스 코드의 제어 신호가 시스템 출력의 압력과 관련되는 방식을 예측하기위한 경험적 모델을 개발할 수 있습니다.