如何在java中生成具有不同分贝的纯音?

时间:2011-08-22 12:14:13

标签: java audio

我需要在java中生成具有不同分贝级别(dB)的纯音。有什么例子可以这样做吗?

2 个答案:

答案 0 :(得分:4)

带有midi Synth的音调

您可以使用合成器生成音调:

import javax.sound.midi.*;

public class MidiSynthesizerSample {
  public static void main(String[] args) {
      int[] notes = new int[]{60, 62, 64, 65, 67, 69, 71, 72, 72, 71, 69, 67, 65, 64, 62, 60};
      try {
          Synthesizer synthesizer = MidiSystem.getSynthesizer();
          synthesizer.open();
          MidiChannel channel = synthesizer.getChannels()[0];

          for (int note : notes) {
              channel.noteOn(note, 50);
              try {
                  Thread.sleep(200);
              } catch (InterruptedException e) {
                  break;
              } finally {
                  channel.noteOff(note);
              }
          }
      } catch (MidiUnavailableException e) {
          e.printStackTrace();
      }
  }
}

您可以使用

设置频道的音量
getSetChannelVolumeMessage(int, int)

http://www.springworldgames.com/rmleditor/javadoc/com/springworldgames/music/MidiUtils.html#getSetChannelVolumeMessage(int, int)

我不知道如何将其转换为分贝,也许这取决于你的声卡音量。

答案 1 :(得分:3)

这个http://jsresources.org/examples/OscillatorPlayer.html显示了如何创建纯正弦波(或几乎任何其他波形)并播放它们。至于分贝,它们与振幅的关系是db ~ 20 * log10 (amplitude),即amplitude ~ 10 ^ (dB/20),所以只需从中计算。