SMFプレイヤーをつくろう!リベンジ「ボリューム調節をつけよう」

投稿日: 更新日:

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

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プレイヤーをつくろう!リベンジ「ボリューム調節をつけよう」” への1件のフィードバック

    […] なたで日記 いろいろな思ったこと書きますヽ(^▽^ゞ) by natade コンテンツへ移動 ホーム紹介 ← SMFプレイヤーをつくろう!リベンジ「拍子とタイムベース」 SMFプレイヤーをつくろう!リベンジ「ボリューム調節をつけよう」 → […]

    いいね

コメントをどうぞ(承認された後に公開されます。メールアドレスの記入は自由ですが、記入した場合でも一般公開されることはありません)

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中