MIDI: Bermain piano dengan Java


Tidak dipungkiri lagi hal yang paling menarik minat programmer pemula adalah pemograman grafis dan suara. Dan begitu juga denganku. Di masa-masa saat pertama kali belajar pemograman dengan Turbo Basic, aku menghabiskan banyak waktu mengubah layar monitor dan membuat speaker internal bersuara aneh. Saat itu ada keyword PLAY yang meminta input berupa string yang berisi deretan tangga nada yang hendak dipakai.

Untuk standar zaman sekarang, sudah ada standar MIDI untuk merekam dan menyalurkan instrumen suara. Java mendukung MIDI melalui sejumlah API yang berada di package javax.sound.midi. Berikut ini adalah contoh sederhana untuk memutar nada-nada:

import java.util.Random;

import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiDevice;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Receiver;
import javax.sound.midi.ShortMessage;


public class LatihanMIDI {

  public LatihanMIDI() {
    MidiDevice.Info[] info = MidiSystem.getMidiDeviceInfo();
    System.out.println("Daftar MIDI Device yang tersedia:");
    for (MidiDevice.Info i : info) {
      System.out.println("Name = " + i.getName());
      System.out.println("Description = " + i.getDescription());
      System.out.println("Vendor = " + i.getVendor());
      System.out.println();
    }
    try {
      System.out.println("Memakai device pertama.");
      MidiDevice device = MidiSystem.getMidiDevice(info[0]);
      device.open();
      
      Receiver receiver = device.getReceiver();
      
      for (int i= 0; i<128; i++) {
        receiver.send(createMessage(i), -1);
        Thread.sleep(i);
      }
      for (int i=127; i>0; i--) {
        receiver.send(createMessage(i), -1);
        Thread.sleep(i);
      }
      Random rand = new Random();
      while (true) {
        int i = rand.nextInt(127);
        receiver.send(createMessage(i), -1);
        Thread.sleep(rand.nextInt(1000));
      }
      
      
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  
  public ShortMessage createMessage(int n1) {
    ShortMessage msg = new ShortMessage();
    
    try {
      msg.setMessage(ShortMessage.NOTE_ON, 0, n1, 100);
    } catch (InvalidMidiDataException e) {
      e.printStackTrace();
    }
    return msg;
    
  }
  
  public static void main(String[] args) {
    new LatihanMIDI();
  }

}

Program ini akan terus berulang dan memainkan nada secara acak. O ya, aku memakai MIDI device yang pertama dalam listing (apapun itu), kemudian menulis byte MIDI langsung ke Receiver.

Perihal Solid Snake
I'm nothing...

3 Responses to MIDI: Bermain piano dengan Java

  1. Nico Leoney mengatakan:

    kalau mau ganti nada nya menjadi nada mp3 gimana mas
    08989667842

    • Solid Snake mengatakan:

      Apa yang dimaksud dengan “Nada mp3”? MIDI message mengatur nada, volume, dsb. Hal ini berbeda dengan MP3 yang merupakan sebuah AudioFormat. MP3 mengatur bagaimana menyimpan suara ke dalam file. MP3 tidak memiliki “Nada mp3” (misalnya nada C harus dalam bentuk byte xx; nada D dalam bentuk byte yy; dsb), tetapi MP3 memiliki teknik kompresi untuk data suara yang bisa menghasilkan file yang kecil.

  2. Ping-balik: Membuat Program Pemutar Musik Dengan Mudah Memakai JFugue | The Solid Snake

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: