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

发布于 2024-11-30 22:21:16 字数 49 浏览 1 评论 0原文

我需要在java中生成不同级别的分贝(dB)的纯音。有没有关于如何执行此操作的示例?

i need to generate pure tones with different levels of decibels (dB) in java. is there any example of how to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无声无音无过去 2024-12-07 22:21:16

使用 midi 合成器生成音调

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

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)

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

Tones with midi Synth

You can generate tones with the 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();
      }
  }
}

Where you can set up the volume of the channels, with

getSetChannelVolumeMessage(int, int)

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

I don't know how to convert it to decibels, maybe it depends on your sound-card's volume level.

魂归处 2024-12-07 22:21:16

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

This http://jsresources.org/examples/OscillatorPlayer.html shows how to create pure sinusoidal (or pretty much any other) waveforms and play them. As for decibels, their relation to amplitude is db ~ 20 * log10 (amplitude), i.e. amplitude ~ 10 ^ (dB/20), so just calculate from that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文