アプリ版:「スタンプのみでお礼する」機能のリリースについて

私は今大学でプログラミングの入門講座を履修していて、1月18日までに自分でプログラムを自作する課題に追われて困っています。

今のところ、ある二次方程式から導き出される数値を使って音程を決めていき、それを順次MIDIで吐き出すプログラムを想定しています。

ところが、既にあるMIDIファイルを再生するJavaアプレットのサンプルならいたるところにあるのに、JavaでMIDI音源を直接操作して音を出すサンプルはなかなか見当たりません。プログラミングは初心者で、基本をざっとやっただけなので、APIガイドを見つつプログラムが組めるほどの力はありません。javax.sound.midiパッケージを使うと出来そうなのですが、APIガイドには例文が載っているわけでもないので…

せめて、PCのMIDI音源で「ドレミ」と鳴らしたいのですが、何かよい本やサイトがありましたらぜひ教えてください。調子のいい質問とは思いますが、よろしくお願いします。

A 回答 (2件)

これ役に立ちませんか?


Java Sound プログラマーズガイド
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/so …
    • good
    • 0
この回答へのお礼

すばやい返信をありがとうございます。
ただ、残念ながらそのページは既知でした。読解力不足であまりピンとこなかったんです。すみません。

お礼日時:2006/01/07 21:53

こんばんは。


JAVA PRESSの補足サンプルが役に立つと思います。
http://cappuccino.jp/keisuken/java/JavaSound/
この中の、MidiSample04.javaがサンプルそのものなんですが、私の環境(WindowsXP + JRE1.5、JDK1.4)だと音が鳴りません。
おそらくJava標準のシンセ(Java Sound Synthesizer)にインストゥルメントがロードされていないためだと思います。

下のサンプルはWindows標準のシンセを取得してドレミを鳴らすサンプルです。MacやLinuxでは途中で終了してしまうので、リストに表示される別のシンセをmsynthNameに指定しなおしてください。
--------------------
import javax.sound.midi.*;

public class ExMIDI {

public static void main(String[] args) throws Exception {

MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
String msynName = "Microsoft GS Wavetable SW Synth";
MidiDevice msyn = null;
Receiver rc = null;
ShortMessage mes = new ShortMessage();

for(int i = 0; i < infos.length; i++) {
System.out.println("--------------------------------------------------");
System.out.println("[ " + (i + 1) + " ]" + new String(infos[i].getName().getBytes("ISO-8859-1")));
System.out.println("バージョン:" + infos[i].getVersion());
System.out.println("メーカー :" + infos[i].getVendor());
System.out.println("説明   :" + infos[i].getDescription());
System.out.println("--------------------------------------------------");

if(infos[i].getName().equals(msynName)) {
msyn = MidiSystem.getMidiDevice(infos[i]);
}
}

if(msyn == null) {
System.out.println(msynName + "が見つかりません。");
System.exit(1);
}

msyn.open();

rc = msyn.getReceiver();

mes.setMessage(ShortMessage.NOTE_ON, 0, 60, 120);//ド発音用
rc.send(mes, -1);
Thread.sleep(1000);
mes.setMessage(ShortMessage.NOTE_ON, 0, 60, 0);//ド消音用
rc.send(mes, -1);

mes.setMessage(ShortMessage.NOTE_ON, 0, 62, 120);//レ発音用
rc.send(mes, -1);
Thread.sleep(1000);
mes.setMessage(ShortMessage.NOTE_ON, 0, 62, 0);//レ消音用
rc.send(mes, -1);

mes.setMessage(ShortMessage.NOTE_ON, 0, 64, 120);//ミ発音用
rc.send(mes, -1);
Thread.sleep(1000);
mes.setMessage(ShortMessage.NOTE_ON, 0, 64, 0);//ミ消音用
rc.send(mes, -1);

msyn.close();

}

}
--------------------

参考URL:http://cappuccino.jp/keisuken/java/JavaSound/
    • good
    • 0
この回答へのお礼

詳細な返答をありがとうございます。
音、自分のPCではちゃんと鳴りました!学校のPCはWindowsなのでこのままでも問題なく使えると思います。
おかげでなんとか課題が始められそうです。本当にありがとうございました!

お礼日時:2006/01/07 21:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!