ボリューム調節をつけました。

MIDIでボリュームをいじる時はどうすればいいでしょうか。
1、デバイスのMIDIボリュームをいじる。
2、チャンネル全部にVolume(コントロールチェンジの0x07番)を送信。
3、チャンネル全部にExpression(コントロールチェンジの0x0B番)を送信。
4、SysExメッセージでマスターボリュームを制御。
5、ノートオンのベロシティを制御

方法は、いろいろあります。
問題は、Javaでどれを実装するかです。

「1」はおなじみの「Windows Media Player」がやらかす方法です。
なんかやらかすというと変な言い方なのですが、この方法を使うと次にMIDIデバイスを利用するソフト全部に及ぶというか。
まあ、「Windows Media Player」を終了させる時に、MIDIデバイスの音量を0にするという素晴らしいことをするので、
こんなのは些細なことなのですが。
いろいろ、意見がありましたが、Javaでは、デバイスの音量たぶん調節できないのでまず無理ということです。
(できるらしいです。海外のサイト調べてたらあった。)

「2」「3」これがまあ妥当な方法です。が実は罠があります。
なぜか受け付けないSMFが存在するという。
中みたら、SysExメッセージで色々書いてあって何やらしているようです。
うまくいくのもあるのですが、全部うまくいくとは限らないのでこれもパス。
ところで、「Volume」はチャンネルの音量。「Expression」は楽器の音量の違いらしいですよ。

「4」これは一番楽な方法。(^✹^)

でも…ごめん。「5」を採用してしまった。
なんというか、うん。特に意味ないです。

制御の方法なのですが、普通音量-30とかなら、現在の音量-30とか計算しそうですが、
こういう方法は自分としてはまずいと思います。
だって、人間の耳って指数とか感じる音量の変化があって線形じゃないんですよ。
あ、でももしかしたらMIDIの音量の設定ってそれもふまえて作ってあるのかな。
指数を利用して、現在の音量×e^-(0~2)みたいな式で音量調節することにしました。

それが上のです。うまく音量調節できてるかな。

ところでJavaのレイアウトはSpringLayoutが最強ですね。
めっちゃ使いやすい。あれっなんか前もこんなこと書いたような…。デジャブ?
あと、「Java Sound Synthesizer」の音にほれた。

以前のブログへ SMFプレイヤーをつくろう!リベンジ「完成した」
次のブログへ  SMFプレイヤーをつくろう!リベンジ「出力ポートとMIDIと周波数の関係」

完成したJava製のSMFプレイヤーのダウンロード

関連記事

  • SMFプレイヤーをつくろう!リベンジ「完成した」SMFプレイヤーをつくろう!リベンジ「完成した」 実は、昨日のうちにあっけなく完成。ワ――ヾ(o・ω・)ノ――イ SMFプレイヤーをつくろう!リベンジ「セットテンポと分解能」の問題もいつのまにか全部解決してました。 というわけで、デバイスの設定とかできるようにして、とりあえずうん。 こんな感じ。 白い欄には、曲名・著作権情報・再生時間/長さ・拍:拍子・BPM・歌詞が表示されます。 シンセサイザーの一番の上のは、「Mic […] Posted in ツール制作
  • 音の高さの表示ソフトdrawwaveの開発 part1 音の高さを調べるソフトといえば、「おんかいくん」などが上げられますが、 今日はJavaで製作された「drawwave」というソフトを紹介します。(*^U^*) 何をするソフトかというと、リアルタイム(実時間)で音声を目で見るソフトです。 音声の波形を描く ということで draw wave […] Posted in ツール制作
  • Javaで3Dの音声視覚エフェクトを作った part4Javaで3Dの音声視覚エフェクトを作った part4 いままで、SO2、SO2と言ってきましたが、 (SO2=1998年に発売したスターオーシャン2というテレビゲーム) 多分普通の人は知らないので、 しまってあったPS2を出してスクリーンショットを撮ってきました。 ボイスコレクション画面 […] Posted in ツール制作
  • SMFプレイヤーをつくろう!リベンジ「言語の設定とキーボードの表示」SMFプレイヤーをつくろう!リベンジ「言語の設定とキーボードの表示」 久しぶりにSMFプレイヤーの更新。 といっても前回の段階でSMFの再生の最低限の機能は実装されているので、 今回は表示関連を中心に。 まずは、言語の設定。 生まれて初めて、言語の設定を行えるような機能追加をしました。(=o・ω・o) ほら、これからは日本以外にも視野を広げる時代ですから。はい。 実装としましては、言語の設定は、辞書式にしました。 辞書ファイルはカレントディ […] Posted in ツール制作
  • 音の高さの表示ソフトdrawwaveの開発 part2 「音の高さの表示ソフト […] Posted in ツール制作
  • SMFプレイヤーをつくろう!リベンジ「出力ポート、MIDIと周波数の関係」SMFプレイヤーをつくろう!リベンジ「出力ポート、MIDIと周波数の関係」 追加した機能 ・Sequencerのインターフェースにメソッド名を似させる。 入れ替えとか、いつかクラスを公開時に役立ちそう。 ・Sequencerにあった、ティック単位の位置調節の追加 内部では、ms単位で処理しているので、ティックから時間に変更するようなメソッドを追加で。 ・メイタベント0x59の調情報取得 この調の情報。最初はノートオン時に反映させる […] Posted in ツール制作
  • SMFプレイヤーをつくろう!リベンジ「拍子とタイムベース」SMFプレイヤーをつくろう!リベンジ「拍子とタイムベース」 今回は、現在再生中のSMFが、何分の何拍子のときに、何泊目を演奏しているか。 そういう情報を表示させる時の計算方法のメモです。 これらを計算するためには次のような情報を知る必要があります。 ・d 分の n 拍子の1拍は、デルタタイムでいうといくつになるか。 ・d 分の n […] Posted in ツール制作
  • SMFプレイヤーをつくろう!リベンジ「セットテンポと分解能」SMFプレイヤーをつくろう!リベンジ「セットテンポと分解能」 以前(2007/4/30)、HSPでMCI(Media Control Interface)を利用せずに SMF(スタンダードMIDIファイル .mid)を再生するためのモジュールを作ってSMFプレーヤーを作りました。(ここ) しかし実はこれには色々と問題が山積みになっていたりする。 1. なんかメタイベント,SysExイベントが正常に送れていないっぽい? 2. […] Posted in ツール制作
  • HSPでSMFプレイヤーを開発した!HSPでSMFプレイヤーを開発した! 今SMFプレイヤー開発に夢中です! なぜ今更SMFかって? ウィンドウズメディアプレイヤーには視覚エフェクトがついているのですが、 midiには対応していません。 そこで自分で作ってしまおうと思ったわけです! 元々はドラムの音だけど専用wavで鳴らすような midiプレイヤーがあったらと思って、 開発しようとずっと前から考えていました。 それで […] Posted in ツール制作
  • ビューア開発 – Javaで2D画像処理ビューア開発 – Javaで2D画像処理 4ヶ月間かけてのんびり勉強したJavaで、画像処理系ツール作ってます。 アルファ値対応で、対応形式はJavaTM Image […] Posted in ツール制作