• 締切済み

Javaでサウンドフォントを用いてMIDI演奏

 サウンドフォントをJavaで読み込み、その音色を使ってMIDIの演奏を行いたいのですが、そのような方法、又はそういうことができるクラスライブラリなどありませんでしょうか? ゲームを作っており、Windows VistaやMacでも正常な音が出るように、音源を統一したいのですが、デフォルトのサウンドバンクは使い物になりませんので・・・。

みんなの回答

noname#179638
noname#179638
回答No.9

 timidity++的なサンプリング音源単位での切り替えはJavaでは不可能ですがシンセサイザ単位での切り替えならJavaでも可能です。  Ogg Vorbisはオープンソース版MP3といった感じでJavaでも再生できるようです。 ご質問にtimidity++という単語を使用しているところを見ると timidity++での音源ファイル切り替えによる音質にこだわっているようですが 音質にこだわりたいならMIDIを使うべきではありません。 生音を使うべきです。 MIDIは楽譜にすぎません。 Ogg Vorbisは音楽ファイル(oggはコンテナ名)です。 楽譜と音楽は違います。 昔ならともかく今のネットワーク環境ならOgg Vorbisの容量は問題ないでしょう。

noname#82539
質問者

お礼

 度々のご回答ありがとうございます。  >JavaのデフォルトのMIDIシンセサイザ(音源)はMSではありませんよ~。  ・・・ですよね。(汗) 間違えました。「OSのデフォルト音源(誤解を避けるため、以下MS音源と書きます)で演奏したい」でした。  で、本題なのですが・・・一応そのOggのライブラリも存じ上げておりまして、それも使う予定でおります。こだわりたかったのは、音質というよりは互換性でして、使うにしても、MS音源程度の音質のものをバンドルしようと考えておりました。自分の曲や、使おうとしている素材の一部が、音源依存が激しいのです。しかもWindows Vistaの音源では、音色数が少なくなったと聞きますし・・・。  とりあえず、サウンドフォントを使うのはちょっと難しいようですので、今のところはOSのデフォルト音源を使うことにしようと思います。わかりにくい上に面倒な質問にここまでお付き合いいただきまして、まことにありがとうございました。

noname#179638
noname#179638
回答No.8

>timidity++のJava版のようなソフトがあり、ソースが公開されているならば、それでも全然構いません。 私の知る限りでは存在しません。

noname#179638
noname#179638
回答No.7

>「Javaのデフォルト音源(誤解を避けるため、以下MS音源と書きます)で演奏したい」  JavaのデフォルトのMIDIシンセサイザ(音源)はMSではありませんよ~。 SUN製です。 しかし、プログラマが明示的にWindows環境ではJavaのデフォルトの音源ではなくMSを使用せよ、と指示することは可能です。

noname#179638
noname#179638
回答No.6

 Timidity++がどういったものかは存じ上げておりますよ~。 ご質問の内容がMIDIの良い音源、つまり良いサンプリングにこだわりたい、ということであれば逆提案なのですがMIDIではなく Ogg for Javaの採用を考えてみてはいかがでしょうか? http://netmind.hu/ogg/ Ogg Vorbisご存知でしょうか? http://www.xiph.org/vorbis/ これならMIDIとちがってOSやPCの機種によって音色が微妙に違うということもありませんし。 「セフィロス!!」的なコーラス(あくまでも「セフィロス!!」的であってそれそのものを使用したら著作権侵害です)もMIDIよりも格段に容易にできますしそもそも歌詞付きの曲も流せますし生音なのでMIDIよりは明らかに音質が良いです。  ゲームユーザーにMIDI音色(サンプリング音源)ファイルをインストールしてもらうのはユーザーにとっての敷居が高くなりますし(ましてやゲームは娯楽系アプリなので)、ブロードバンド時代にはMIDIより生音という気がしますよ~。

noname#179638
noname#179638
回答No.5

>インストールされたMIDIデバイスでないと演奏できない のではなく JavaでMIDIが演奏したい場合 別途ソフトウェアシンセサイザやソフトMIDIを インストールしなければいけないのではなく JavaではJREのみをインストールすればJavaでMIDIは演奏できますが音質が悪い ということです。

noname#179638
noname#179638
回答No.4

 JavaのデフォルトでMIDIが演奏できないのではなく JavaのデフォルトのMIDIのシンセサイザの音質の評判が良くない、ということかと思いますけど・・・  未確認ですがJavaのデフォルトのMIDIのシンセサイザはPureJavaらしく これ自体は問題ないみたいなんですが 楽器のサンプリングファイルのサンプリング周波数が低いものが Javaのデフォルトで搭載しているらしく(Javaがサーバ処理が主流になってきてSUNがMIDIなどのマルチメディア関係に無関心だから?) JavaデフォルトのMIDIのシンセサイザでは Javaで一応MIDIは演奏できますよレベルの音質らしいです(「JavaでMIDI」ではJavaデフォルトのシンセサイザを「おもちゃ」と表現しています)。  音質にこだわるならJavaデフォルトのシンセサイザではなく 別のシンセサイザ(JavaのデフォルトのMIDIのシンセサイザ以外のソフトウェアシンセサイザを含むし外部MIDI機器も含みます)を出力先に設定するのです。 これはJava5以降でなければできません。 開発中のゲームの開発サイトとか無いの?教えて!

noname#82539
質問者

お礼

 ご回答ありがとうございます。  あ、なるほど・・・「Javaのデフォルト音源(誤解を避けるため、以下MS音源と書きます)で演奏したい」という質問だと誤解されてしまっていたのですね・・・。  ただ、僕がやりたいのはMS音源での演奏でもなく、配布するパッケージにソフトウェア音源ファイル(sf2など)を同梱し、その音色で演奏を行いたいということなのです。Timidity++(もしTimidityをご存知でなかったら、MidRadioPlayerやWindows版QuickTimeなど、内蔵音源でMIDIを演奏するソフトを思い浮かべていただくとわかりやすいかと)のようなことができるようなライブラリがあれば、と思ったのですが・・・。自作するには、少々敷居が高すぎるものでして。  なにやら質問の仕方が悪かったみたいで、色々と混乱を招き、申し訳ありません・・・。

noname#82539
質問者

補足

 お礼で、参考にしているゲーム開発解説サイトについて書くのを忘れておりました。あまり挙げても意味はないかもしれませんが、念のため挙げておきます。 http://javagame.main.jp/  あと、もう一つ書き漏らしがありました。 "インストールされたMIDIデバイスでないと演奏できない" というのは、"適当なフォルダにサウンドフォントファイルを置いただけでは、JREはそれがMIDIデバイスだと認識してくれない"という意味です。  正直、この説明で伝わるかどうかは微妙な感じもしますが・・・わかりにくい説明で申し訳ないです・・・。

noname#179638
noname#179638
回答No.3

 SAYKAさんが検索してくれたURLの上位にある JavaでMIDI の デフォルトに頼らない方法 は ご覧になられましたか。 http://www.ruimo.com/howto/java/midi/index.html デフォルトのシーケンサがSunのReal-timeシーケンサ(Sunのソフトウェアシンセシンセサイザ)だが出力デバイスを明示的に指定する方法を解説。 Java 5からは、シーケンサを使用しつつ、出力先は外部MIDIも可能 これでようやく本格的なMIDIシーケンサがJavaで書けるようになった このようなことが掲載されていますよ。

noname#82539
質問者

お礼

 ご回答ありがとうございます。  この記事を読む限り、インストールされたMIDIデバイスでないと演奏できないような感じがしたため、(ゲームであるため、システムフォルダやレジストリへの書き込みは行いたくない)無視してしまったのですが、もしかすると普通のsf2の読み込みもできるかも知れませんね・・・。少し試してみようと思います。

noname#179638
noname#179638
回答No.2
noname#82539
質問者

お礼

 ご回答ありがとうございます。  Javadocも探してはみたのですが、やはりそれらしい情報は発見できませんでした・・・。引き続きもう少し探してみます・・・。  ちなみに、作っているのはRPGです。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

http://www.google.co.jp/search?q=java%20midi&hl=ja&lr=lang_ja 音源の統一は不可能だけど確かにMIDIで再生なら共通演奏データで小さくできるね。 MIDIを再生して、結果的にどう鳴るのか決めるのはOS側の制御によるからそれはまぁどうにもならないんじゃないかな。

noname#82539
質問者

お礼

 ご回答ありがとうございます。すみません、誤解を招く表現をしてしまったようです。  質問は、「サウンドフォントを読み込み、その音色による演奏(Windows Media Playerのような一般のMIDIプレイヤーで演奏される音色まで換えたいということではなく、あくまで作成したアプリケーションによって演奏されるMIDIの演奏のことです)が出来るクラスライブラリはないか」ということです。要するに、timidity++のようなことをJavaでやりたいのです。クラスライブラリとして配布されていなくても、timidity++のJava版のようなソフトがあり、ソースが公開されているならば、それでも全然構いません。  音源統一云々と書いたことで混乱を招くことになってしまいましたようで・・・。失礼しました。

関連するQ&A