Генерирующийся звук Java

Я создал клон вони, и я хотел бы добавить некоторые звуковые эффекты, когда коллизии происходят. Моя проблема состоит в том, что каждый пример, который я мог найти о синтезировании звука, берет приблизительно 30 строк кода, рассматривание моего целого заявления имеет только 90 строк кода. Я ищу более простой подход. Существует ли простой способ создать звук звукового сигнала различных тонов? Продолжительность не имеет значения. Я просто хочу серию звуковых сигналов с различными тонами.

11
задан iBug 22 December 2017 в 05:22
поделиться

3 ответа

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();
21
ответ дан 3 December 2019 в 02:40
поделиться

java.awt.Toolkit.getDefaultToolkit().beep()

series of beeps?

int numbeeps = 10;

for(int x=0;x<numbeeps;x++)
{
  java.awt.Toolkit.getDefaultToolkit().beep();
}
2
ответ дан 3 December 2019 в 02:40
поделиться

Вы можете использовать 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

3
ответ дан 3 December 2019 в 02:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: