マルチメディア情報 戻る
  >>最終更新:2002年6月19日


このページでは、PCにおけるマルチメディアに関連する情報を掲載していこうと思います。


■AVIファイル関数・マクロについて

以前、仕事でAVIファイルを作成する必要に迫られたことがありました。この時、「さあ、何か参考になるものはないだろうか」とインターネット上で資料を探しまくりました。しかし、キレイにまとまっているページはほとんど見つからず、結局DELPHIに付属している英語版ヘルプくらいしか完全に網羅しているものはない気配・・・。そこで、「よ〜し、こうなったら予備校以来実践で使用したこと皆無の私の英語力を使ってやるぅ!(笑)」と気合を入れて、英語版ヘルプを翻訳してみました。

翻訳前にあれだけ結構必死に探して見つからなかったものですから、もしかしてこんなモノでも活用して下さる方が世の中にはいらっしゃるのではないかと思い、アップすることにした次第です。

「AVIファイル関数・マクロについて」翻訳版

翻訳進行度は全体の約1/2程度(平成11年6月8日現在)です。ここまで翻訳した段階で、AVIを作成することに成功してしまったため、これ以上の翻訳は断念している状態です(^^;。

なお、「日本語版あるよー」とか「間違ってるトコあるよー」とかいう情報をお持ちの方は、どうかがんぞうまでお知らせくださいませ!


■マルチメディアにまつわる小話

1.TMediaPlayerに関して

Borland Delphi / C++Builder には、MCIをカプセル化した「TMediaPlayer」という高機能マルチメディア再生コンポーネントが存在します。これは、何とフォームに貼って、ファイル名を渡すだけで、AVIだろうがMPEGだろうがWAVだろうがMP3だろうがMIDIだろうが・・・・、PCにデコーダが導入されているマルチメディアファイルなら何でも再生することが可能です。

これは、単純にスゴい話です。つまり、誰でも自分が好きなルックスでメディアプレイヤーを簡単に作成出来る、ということです。ムービー関連の再生は、指定しなければメディア再生フォームが自動的に開きますが、再生先にTPanelなどの好きなTWinControlを指定することも出来ます。

しかし、一言に「Windowsマシン」と言っても、ハードでは「DOS/V互換機」「PC98系」等に分かれ、さらに導入されているデバイスドライバもそれこそ星の数ほど存在するため、Windowsアプリケーションを作成する場合、いくつか問題も発生します。マルチメディア関連もご多分に漏れず、いくつか問題が出てきます。

この項では、こうした問題の中で、私が経験した問題とその対応方法をご紹介していこうと思います。これからマルチメディアアプリなどをお作りになられる方の、些少なりともご参考になれば幸いです。

WindowsMediaPlayer7あたりをインストールしたPCでは、TMediaPlayerでMPEGの再生が可能です。WindowsMediaPlayerのデコーダを使用しているので、画面のクオリティは充分なものになります。

しかし、私は以下の点で非常に悩みました(^^;。

(1) VAIOでは再生出来ない!

ヒット商品であるSONYのVAIOですが、フリーウェア作者にとっては結構鬼門になっている様です。VAIOは、MPEGのデコードにSONYオリジナルのドライバを利用しているのですが、TMediaPlayerの出力先にTPanelなどのTWinControlを指定していると、これが著作権関係が理由なのか、一部の機種でジャマーノイズが入り、全く正常に再生出来ません。

MPEG再生は、PrintScreenなどでキャプチャ出来ない様に、フォームのキャンバスに直接描画せずに上のレイヤーを生成してそこに描画しています。しかし、VAIOはどうやら再生1次バッファに展開したものをTWinControlに複写するのを「違法コピー処理」と判断するらしく、ジャミングしてしまいます(T_T)。

対応策は・・・今のところありません。僕の場合は、Cinepakなどを用いたAVIファイルを同梱し、そちらを再生することで回避しました。この問題については、ネット上で非常に多く見ることが出来ました。

(2) Application.OnDeactivate でブルブル

全画面アプリを作成しているとき、[Alt] + [TAB] によるタスクチェンジに対応しようと、Application.OnDeactivate に解像度を戻す処理を入れていました。初期の頃はMPEGでなくAVIを用いていたので発症しなかったのですが、映像をMPEGに差し替えた途端・・・MPEG再生を終了してファイルを閉じた直後、一瞬フォーカスがアプリから去ってしまい、そのためタスクを切り替えていなくても Application.OnDeactivate イベントが発生し、解像度が元に戻ってしまいました(T_T)。

どうやら、「ファイルを閉じる」=「上のレイヤーを閉じる」という作業をする際、MPEGデコーダの設計上なのか、タスクがそちらに移ってしまうみたいなのです。

様々な試行錯誤の末、以下の処理でこの問題を回避出来ることが判明しました。

  MediaPlayer1.Stop;
  Application.OnDeactivate:=nil;
  MediaPlayer1.Close;
  Application.ProcessMessages;
  Application.OnDeactivate:=AppDeactivate;

つまり、Closeする直前に一旦Deactivateイベントを消去してClose、他のアプリケーションのタスクをこなしてから再度Deactivateイベントを再登録するのです。何ともイヤらしい感じですが、この対応は再生メディアファイルがAVIに変わっても何ら問題を発生しないため、通常からこの形にしておいて良いと思います。

2.MIDI再生なんて・・・

一昔前と違い、いまやPCでMIDI再生など当たり前。サウンドサウンドボードや外部音源も安くなって導入しやすくなり、また特にスゴいものがなくてもオンボードのPCM音源にソフトウェア音源を用いることで、安価にゴージャスな音色のMIDI再生を実現することも出来ます。

しかし、その反面ドライバの数は増大し、機能やクオリティにもバラつきが出て、せっかく良い環境が増えているにも関わらず、MIDI再生を行うアプリケーションを作成する側にとっては大変な時代でもあります。

この項では、そんなMIDI再生にまつわる情報を書いていこうと思います。

(1) フェードアウトが出来ない!

私は作曲の仕事も行っていまして、ゲームなどのBGMを作成する時はもちろんMIDIを用いています。そして、PCのゲームの場合は、スタンダードMIDIファイルで提出する、ということも多々あります。

しかし、、、ある仕事の時に、思いもよらぬケースに出会いました。

その仕事では、ある程度長い曲を作り、最後の部分をフェードアウトする必要がありました。私がMIDIデータを作成する際は、

  ・トラック間の音量バランスを取る際は Volume を使用

  ・トラック内の音量変化には Expression を使用

という形をとることが多く、今回もフェードアウトに Expression を用いて作成しました。家のPCで、外部MIDI音源と内蔵音源、ソフトウェア音源などで再生してみて、問題なくフェードアウトすることを確認した上で提出しました。

ところが、数週間経った後、クライアントから「一部の機種でフェードアウトしないので修正して欲しい」という要望が届きました。これにはビックリ!特殊なコントロールチェンジやエクスクルーシブを用いた訳ではなく、単に標準的なMIDIコマンドを用いただけなのに、何故・・・? いくらデータを調べても、問題になりそうな部分はありませんでした。

そこで、先方に「どんなPCで問題が起きたのですか?」と尋ねてみると、以下の状況だということがわかりました。

  ・OSはWindowsNT4

  ・マシンに添付されていたCDに入っていたデバイスドライバを導入

  ・ドライバのバージョンアップはしていない

そこで、色々調べてみた結果、こういう事実が分かりました。

  ・ドライバによっては、音量変化はVolumeでしか行うことが出来ないものがある。

  ・Velocityすら無視するドライバが存在する

実質的に、全てのマシンで再生出来るMIDIデータを作成するには、以下のルールを守る必要がありそうです。

  【使用出来るコマンド】

   ◎Program Change
    およそ問題なし。音色は千差万別だが、一応キャラクターの方向性は問題なさそう。

   ◎Volume
    音量変化はA〜Cカーブまで様々だが、とりあえず変化するという意味では利用OK。

   ○Panpot
    ドライバによっては、「左」「中」「右」とダイナミックに代わるものもアリ。少々注意が必要。

   △Modulation
    全然効かない、あるいはバリバリ効いてしまうなど、かなり厳しい。

   ○Expression
    ほとんどOKなのだが、一部で「全く機能しない」ものがあるので、ダイナミックな音量変化を行うとバランスがめちゃくちゃに。

   △Pedal
    全然効かない、あるいは全然キーオフしないなど、不具合のタネ。

   ○Pitchbend
    およそOKだが、ベンド幅が固定なドライバも割と多く、注意が必要。

  【キー情報】

   ◎Note : まあ大丈夫。ただし、音色によって音域制限があるドライバもある。

   ◎Step : 問題なさそう。

   ○Gate : まあまあ問題ないが、リリースが異常に長い、あるいは妙にスタッカートになってしまうドライバもアリ。多少注意。

   △Velocity : (レゾナンスの影響か)音色が違ってしまうドライバや、段階が異常に荒い、あるいは殆ど無視してしまうドライバあり。注意!

良い音源やサウンドボードが安くなり、「いよいよ波形データに落とさなくてもMIDIでクオリティの高い演奏が可能な時代が来るゾっ!!」などと喜んでいたのも束の間・・・。きっともう少し時間が経ち、こういった不良ドライバが淘汰されていけば、こういった無意味な知識を捨てることも出来るんでしょうが、しばらくの間は、これらを気にしながら細々と仕事していこうと思います・・・(T_T)。