サポート機能を判定する(minim編)

◆PROCESSING 逆引きリファレンス

 カテゴリー:音楽・演奏

サポート機能を判定する(minim編)

【解説】

minimは、PROCESSINGで手軽に音楽を演奏できるライブラリです。

minimについて、より詳しく知りたい方は下記公式サイト 様を参照して下さい。

minimには音楽の再生だけでなく、音量(ボリューム、ゲイン)や位相、消音(ミュート)、バランスなどをコントロールする機能が搭載されています。

しかしこれらの制御機能は、残念ながらすべてのPCで同じように動作するわけではないようです。あなたのPC環境や利用する音楽データによってはサポートされない事があるのです。

例えば私のPCでは、minimで音量(ボリューム)をコントロールする機能がサポートされていません(泣)。

あなたが利用する環境で、minimがサポートしている制御機能を知るには、AudioPlayerクラスが提供している hasControl() メソッドを利用します。

しかし・・・1つ落とし穴があり、このメソッドは非推奨となっているのです。コーディングすると動作はしますが、警告MSGが表示されてしまいます・・・。

まぁ、かなり残念な感じですが、・・・このあたりがタダで利用可能なソフトの欠点なのかもしれません・・・(汗)。

【構文】

boolean   player.hasControl(  type )  ;

player は AudioPlayerクラスのインスタンス変数です。
type で指定した機能がサポートされている場合 Trueが、未サポートなら False が戻されます。

void  player.printControls( );

player は AudioPlayerクラスのインスタンス変数です。
標準出力に、各制御機能のサポート状況を表示します。

【パラメータ】

type は javax.sound.sampled.FloatControl.Type  と javax.sound.sampled.BooleanControl.Type で定義している定数です。

以下の名前で、minimのControllerクラスの定数として再定義されています。

BALANCE
GAIN
PAN
SAMPLE_RATE
VOLUME
MUTE

【注意】

先にも述べましたが、hasControl() メソッドは非推奨となっており、動作はしますがコーディングすると警告MSGが表示されます。

頑張って minim のプログラムソースを拝見しましたが、(独自に JavaのSOUND APIを利用すれば別ですが)minimでhasControl() メソッドに代わる制御機能の確認方法は無さそうでした。

minim のプログラムソースでは、各get()メソッド(例えば、getGain( ) やgetVolume( ) メソッド)で0が戻されたら、「サポートしていない可能性がある」作りにはなっていました。

しかし厳密には、サポートしている場合でも0が戻る事があるため、get( ) メソッドで判定する方法は正確性を欠きます。

その一方で、AudioPlayerクラスが提供している printControls( ) メソッドを実行すると、サポート状況を標準出力(コンソール領域)に表示してくれます。

例えば printControls( ) メソッドを実行すると、こんな感じの出力がコンソール領域に表示されます(クリックすると拡大します)。

printcontrols
情報の出力先が標準出力(コンソール領域)なので使い勝手が悪いです。

また(少なくとも私の環境では) shifting機能のサポート状況については、正確な表示を行ってくれませんでした(汗)。

例えば上記表示では Gain(ゲイン)機能の shifting は未サポート(doesn’t support shifting.)と表示されています。しかし実際に minimのshiftGain() メソッドを実行すると、それっぽく動作するのです・・・。

というわけでminimの制御機能のサポート状況調査関連メソッドは、現在のところ(Ver2.2.2現在)あまり信用できないというのが実情のようです。そのうち改善されると良いですね・・・。

 

【関連記事】


サンプルプログラム

hasControlで調査する例:

dataフォルダ配下に 適当な音楽ファイルがある事が前提です。
上記を実行するとコンソール領域にサポート状況を表示します。

<出力サンプル>
hascontrol

 

printControlsで調査する例:

※上記の標準出力関連の制御プログラムは Quita 様:「Java コンソール出力(標準出力・標準エラー出力)内容をString文字列として取り出す」 記事を参考にさせて頂きました。ありがとうございます。

hasControl() メソッド利用時の警告MSGが気持ち悪いので、苦肉の策として printControls( ) メソッドの出力文字列から、サポート状況を判断する関数を作成しました。

正確性には欠けますが、コーディング時に警告MSGが表示されることはありません(笑)。

・・・かなり強引ですけどね(汗)。

<出力サンプル>
hascontrol2

 


PROCESSING逆引きリファレンス一覧 へ戻る

本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。