Как генерировать чистые тона с различными децибелами в Java? - PullRequest
8 голосов
/ 22 августа 2011

Мне нужно генерировать чистые тона с различными уровнями децибел (дБ) в Java. Есть ли пример, как это сделать?

Ответы [ 2 ]

4 голосов
/ 22 августа 2011

Тоны с миди-синтезатором

Вы можете генерировать тоны с помощью синтезатора:

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)

Я не знаю, как преобразовать его в децибелы, возможно, это зависит от уровня громкости вашей звуковой карты.

3 голосов
/ 22 августа 2011

Это http://jsresources.org/examples/OscillatorPlayer.html показывает, как создавать чистые синусоидальные (или почти любые другие) сигналы и воспроизводить их. Что касается децибел, их отношение к амплитуде составляет db ~ 20 * log10 (amplitude), т.е. amplitude ~ 10 ^ (dB/20), поэтому просто рассчитайте из этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...