JREに備わっているソフトウェアシンセサイザーで一応お望みのことは可能だと思います。パッケージでいうとjavax.sound.midi
とjavax.sound.sampled
が関連します。過去にやったことがあるのでいくつかコメントします。
- 概要
JREにはソフトウェアシーケンサー、ソフトウェアシンセサイザーおよび波形データを出力したり入力したりするインターフェースが用意されています。普通のやりかたで再生すると音声データがシステムのサウンド出力デバイスへ送信されますが、出力先は切り替えることができ、自前で受信した波形データをwavファイルへ出力する出力インターフェースを実装すれば実現できるはずです。
- 音質
標準で用意されている音色データはそれなりの品質とはいえ素人の耳にとっても若干物足りません。自分はもっとよい音質にしようとしてjavaのシーケンサーから別のVSTiソフトシンセへ繋ぎwav出力するのを試みたことがありますが、互換性等々の問題にはばまれ断念しました。もし多少なりともよい音質にするならVSTi用の音色ファイルのある種のもの(SF2という拡張子だったと思います)がJRE付属ソフトシンセでも読み込めますのでそちらのほうが簡単だと思います。音色ファイルによってはJREのものに比べかなりの差が感じられました。
3. 再生するMIDIファイル
蛇足とは思いますが・・・パーカッションはもともとシンセサイザーによってばらばらな仕様になっていたりするので期待通りの再生ができないことが多いように思えます。またJREのシーケンサーはSTANDARD MIDI FORMAT1にしか対応してないので16チャンネルまでの演奏しかできません(同時発音数はそこそこあります)。今時の市販ソフトは16チャンネルの制約はなく複数のソフトシンセインスタンスで多チャンネルの演奏ができますが、それにくらべるとjavaだけでできるのは非常に素朴な楽曲に限定されます。
4. その他
sonor_3rdさんが挙げておられるもののほかに以下もキーワード候補にするとよいかもしれません。かなり古い情報のものが多いと思いますがjavaのAPI自体に違いはないはずです。
- java シーケンサー
- java シンセサイザー
- VSTi (波形データ出力の参考になるものがあるかも)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。