我需要在java中生成具有不同分贝级别(dB)的纯音。有什么例子可以这样做吗?
答案 0 :(得分:4)
您可以使用合成器生成音调:
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)
我不知道如何将其转换为分贝,也许这取决于你的声卡音量。
答案 1 :(得分:3)
这个http://jsresources.org/examples/OscillatorPlayer.html显示了如何创建纯正弦波(或几乎任何其他波形)并播放它们。至于分贝,它们与振幅的关系是db ~ 20 * log10 (amplitude)
,即amplitude ~ 10 ^ (dB/20)
,所以只需从中计算。