JAVA Sinewave로 소리 재생하기

사인웨이브 만들기

public static byte[] getSineWaveByte(int hz, float sampleRate, int volume) {
    int period = (int) (sampleRate / hz);
    System.out.println(period);
    byte[] b = new byte[(int) (period)];
    for (int i = 0; i < period; i++) {
      double angle = i / (sampleRate / hz) * 2.0 * Math.PI;
      b[i] = (byte) (Math.sin(angle) * 127.0 * volume);
    }
    return b;
  }
//재생
public static void playbyte(byte[] bytes) throws LineUnavailableException {
    byte[] buf = new byte[1];
    AudioFormat af = new AudioFormat(SAMPLE_RATE, // sampleRate
        8, // sampleSizeInBits
        1, // channels
        true, // signed
        false); // bigEndian
    SourceDataLine sdl = AudioSystem.getSourceDataLine(af);
    sdl.open(af);
    sdl.start();
    while (true) {
      sdl.write(bytes, 0, bytes.length);
    }
  }

 

 

 

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다