20 Aralık 2017 Çarşamba

JavaSound SourceDataLine Arayüzü - Hoparlör

Giriş
Şu satırı dahil ederiz.
import javax.sound.sampled.SourceDataLine;
Ses çıkarma işlemini gerçekleştiren sınıftır. Yazılan veriyi çalar.

Kullanım Şekli
1. AudioSystem.getLine() çağrısı ile SourceDataLine nesnesi elde edilir.
2. SourceDataLine.open(AudioFormat) çağrısı ile ses çıkışı açılır
3. SourceDataLine.start() çağrısı ile çalma işlemi başlatılılır.
4. SourceDataLine.write() çağrısı ile çalınacak müzik diskten okundukça verilir.
5. Çalma işlemi bitince SourceDataLine.drain() ve SourceDataLine.stop() çağrıları ile nesnede bekleyen veri de çalınır ve hoparlör kapatılır

constructor
Örnek
Şöyle yaparız.
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
SourceDataLine sdl = (SourceDataLine) AudioSystem.getLine(info);
Örnek
Şöyle yaparız.
AudioFormat af = new AudioFormat(8000.0f,8,1,true,false);
DataLine.Info info = new DataLine.Info(SourceDataLine.class, af);
SourceDataLine speaker = (SourceDataLine)AudioSystem.getLine(info);
close metodu
Şöyle yaparız.
sdl.close();
drain metodu
Şöyle yaparız.
sdl.drain();
getControl metodu
Şöyle yaparız.
FloatControl volume = (FloatControl)audioOutput.getControl 
 (FloatControl.Type.VOLUME); 
Şöyle yaparız.
FloatControl masterGain =
  (FloatControl)audioOutput.getControl (FloatControl.Type.MASTER_GAIN);
isControlSupported metodu
Şöyle yaparız.
SourceDataLine audioOutput = ...;
if ( audioOutput.isControlSupported (FloatControl.Type.VOLUME) ) {
  FloatControl volume = (FloatControl)audioOutput.getControl
    (FloatControl.Type.VOLUME);
  ...
} 
Şöyle yaparız.
if ( audioOutput.isControlSupported (FloatControl.Type.MASTER_GAIN) ) {
  FloatControl volume =
    (FloatControl)audioOutput.getControl (FloatControl.Type.MASTER_GAIN);
  ...
} 
open metodu
Örnek
Şöyle yaparız.
AudioFormat format = ...;
SourceDataLine sdl = ...;
sdl.open(format);
Örnek
Şöyle yaparız.
AudioFormat af = new AudioFormat(8000.0f,8,1,true,false);
speaker.open(af);
start metodu
Şöyle yaparız.

audioLine.start();
write metodu
Örnek
Şöyle yaparız.
byte[] buffer = ...;

speaker.write(buffer, 0, buffer.length);
speaker.drain();
Örnek
Şöyle yaparız.
int BUFFER_SIZE = 4096;
byte[] bytesBuffer = new byte[BUFFER_SIZE] = ...;
sdl.write(bytesBuffer, 0, BUFFER_SIZE);
Örnek
Beep sesi çıkarmak için şöyle yaparız.
import javax.sound.sampled.*;
public class Sound
{
  public static float SAMPLE_RATE = 8000f;
  public static void tone(int hz, int msecs) 
    throws LineUnavailableException {
    tone(hz, msecs, 1.0);
  }

  public static void tone(int hz, int msecs, double vol)
    throws LineUnavailableException {
    byte[] buf = new byte[1];
    AudioFormat af = new AudioFormat(SAMPLE_RATE,8,1,true,false);     
    SourceDataLine sdl = AudioSystem.getSourceDataLine(af);
    sdl.open(af);
    sdl.start();
    for (int i=0; i < msecs*8; i++) {
      double angle = i / (SAMPLE_RATE / hz) * 2.0 * Math.PI;
      buf[0] = (byte)(Math.sin(angle) * 127.0 * vol);
      sdl.write(buf,0,1);
    }
    sdl.drain();
    sdl.stop();
    sdl.close();
  }

  public static void main(String[] args) throws Exception {
    Sound.tone(15000,1000); 
  }
}

Hiç yorum yok:

Yorum Gönder