Я создал клон вони, и я хотел бы добавить некоторые звуковые эффекты, когда коллизии происходят. Моя проблема состоит в том, что каждый пример, который я мог найти о синтезировании звука, берет приблизительно 30 строк кода, рассматривание моего целого заявления имеет только 90 строк кода. Я ищу более простой подход. Существует ли простой способ создать звук звукового сигнала различных тонов? Продолжительность не имеет значения. Я просто хочу серию звуковых сигналов с различными тонами.
Here's a small example taken (and shortened) from Java Sound - Example: Code to generate audio tone
byte[] buf = new byte[ 1 ];;
AudioFormat af = new AudioFormat( (float )44100, 8, 1, true, false );
SourceDataLine sdl = AudioSystem.getSourceDataLine( af );
sdl.open();
sdl.start();
for( int i = 0; i < 1000 * (float )44100 / 1000; i++ ) {
double angle = i / ( (float )44100 / 440 ) * 2.0 * Math.PI;
buf[ 0 ] = (byte )( Math.sin( angle ) * 100 );
sdl.write( buf, 0, 1 );
}
sdl.drain();
sdl.stop();
java.awt.Toolkit.getDefaultToolkit().beep()
series of beeps?
int numbeeps = 10;
for(int x=0;x<numbeeps;x++)
{
java.awt.Toolkit.getDefaultToolkit().beep();
}
Вы можете использовать JSyn. Это библиотека, которую вы должны установить (с .DLL
и .JAR
). Но очень просто создавать разные тона.
Ссылка (Также доступны учебные пособия)
Это пример:
public static void main(String[] args) throws Exception {
SawtoothOscillatorBL osc;
LineOut lineOut;
// Start JSyn synthesizer.
Synth.startEngine(0);
// Create some unit generators.
osc = new SawtoothOscillatorBL();
lineOut = new LineOut();
// Connect oscillator to both left and right channels of output.
osc.output.connect(0, lineOut.input, 0);
osc.output.connect(0, lineOut.input, 1);
// Start the unit generators so they make sound.
osc.start();
lineOut.start();
// Set the frequency of the oscillator to 200 Hz.
osc.frequency.set(200.0);
osc.amplitude.set(0.8);
// Sleep for awhile so we can hear the sound.
Synth.sleepForTicks(400);
// Change the frequency of the oscillator.
osc.frequency.set(300.0);
Synth.sleepForTicks(400);
// Stop units and delete them to reclaim their resources.
osc.stop();
lineOut.stop();
osc.delete();
lineOut.delete();
// Stop JSyn synthesizer.
Synth.stopEngine();
}
Martijn