設計時も使えるプロパティ
property AutoOpen: Boolean;
自動的にファイルをオープンするかどうかを指定します。
True の場合、FileName プロパティにファイル名を指定すると、そのファイルをオープンします。
設計時に FileName プロパティが指定されている時は、アプリケーションの起動後、そのファイルをオープンします。
デフォルトは True です。
property AutoPlay: Boolean;
ファイルをオープンした時に、自動的に再生を開始するかどうかを指定します。
デフォルトは True です。
property ChangePosStep: Intege;
OnChangePosition イベントの頻度を指定します。
前回 OnChangePosition イベントが発生してから、次に発生するまでの最短時間をミリ秒単位で指定します。
必ずしも、ここで指定した間隔でイベントが発生するわけではありません。 TTimer.OnTimer イベントと同様にお考えください。設定できる範囲は 100 以上で、デフォルトは 400 ミリ秒です。
このへんって、どんなプロパティを用意しとけば使い勝手がいいのでしょうか?
単に秒単位くらいの経過時間表示なら、いまのプロパティ・イベントで足りるんでしょうけど、歌詞表示とかする時って、何がわかれば便利?
property DecodePriority: TThreadPriority;
デコードスレッドの優先度を指定します。デフォルトは tpNormal です。
property EqualizerCount: Integer;
イコライザーの分割数を指定します。範囲は 1..32 で、デフォルトは 6 です。
EqualizerMode プロパティが memSubBand の時は、無視されます。ファイル出力にも反映されます。
property EqualizerEnabled: Boolean;
イコライザーの有効/無効を指定をします。
デフォルトは False (無効) です。
ファイル出力にも反映されます。
property EqualizerMode: TMP3EqualizerMode;
TMP3EqualizerMode = (memSubBand, memFreq);
イコライザーをサブバンド単位にするか周波数指定にするかを指定します。
デフォルトは memSubBand です。ファイル出力にも反映されます。
MPEG Audio では、エンコード・デコード時に、周波数によってサブバンドと呼ばれる単位に分割して処理します。例えば、サンプリング周波数44.1KHz の場合、0..689Hz、689..1378Hz・・・21.361..22.05KHz(端数は四捨五入して表記)、 というように 32 のサブバンドに等分して処理します。このプロパティが memSubBand の場合、Equalizer[Index] プロパティは Index=0 は 1番周波数の低いサブバンド、Index=1 は 2番め・・・というように、それぞれのサブバンドに対応しています。
memFreq の時は、EqualizerFreq[Index] プロパティで Index 毎の中心周波数を指定します。
なお、Layer1, 2 の場合、細かい周波数毎に強調・減衰する方法がまだわからないので、memFreq でも memSubband でも EqualizerFreq プロパティの指定は、精度が低いです。
設計時にこのプロパティを memFreq にしておくと、コンポーネント生成時に EqualizerFreq プロパティが 60..16000 Hz のそれらしい値に設定されます。
現在の実装では、デコード途中のデータに演算を施して強調・減衰をしています。イコライザーをかけてもそれほど重くなってないはずです。
周波数指定時の精度ですが、サンプリング周波数 44.1KHz として、Layer 3 なら 40Hz くらい。Layer1, 2 で 700Hz くらい。低周波数帯では使い物にならんかも^^;;
デコード後の PCM にフィルタをかければ、Layer1, 2 でもかなり精度を上げられるのかもしれないけど、それじゃ重くなっちゃうだろうから、今後の方向性で迷っています。自分的には Layer 1, 2 ってほとんど聞かないので、これでいいかなあ?とか思うんですが、どんなもんでしょうか?
property FileName: TFileName;
property InvertPolarity: Boolean;
極性を反転するかどうか指定します。デフォルトは False です。
property NeedInfoType: TMP3InfoType;
どの形式の曲情報を取得するか指定します。Title, Artist, Album, Year, Comment, Genre, Track プロパティに影響します。デフォルトは [mitID3V1, mitID3V2, mitRiff] です。
property NoisySeek: Boolean;
再生中にシークする時にきゅるきゅる鳴るかどうかを指定します。デフォルトは True です。
property UsingCpuCapabilities: TMP3CpuCapabilities
TMP3CpuCapabilities = set of (mccMMX, mcc3DNow, mccKNI, mccE3DNow, mccCMOV, mccEMMX);
CPU の拡張機能のうち、デコードで使用するものを指定します。設計時は任意に設定できます。実行時は、実行時の CPU が実際に持っている機能のうち、このプロパティで指定した機能が使われます。
- mccMMX
- MMX
- mcc3DNow
- 3DNow!
- mccKNI
- KNI(SSE)
- mccE3DNow
- Extension to 3DNow!
- mccCMOV
- CMOV, FCMOV
- mccEMMX
- Extension to MMX
現在の実装では、一部のルーチンで 3DNow!, Extension to 3DNow!, CMOV, Extension to MMX に対応しています。
再生中にこのプロパティを変更した場合、その変更が反映されるのは次回の再生時からになります。
property VolBalance: Integer;
音量の左右のバランスを指定します。
範囲は -100..100。負数で左寄り、正数で右寄りになります。
ファイル出力には反映されません。
デフォルトは 0 です。
property Volume: Integer;
音量を指定します。
範囲は 0..100。
ファイル出力には反映されません。
デフォルトは 100 です。
設計時にこのプロパティを 0 にすると、コンポーネントの生成時に、その時点のサウンドドライバの音量設定を読み込みます。
実行時のみのプロパティ
property Title: String;
property Artist: String;
property Album: String;
property Year: String;
property Comment: String;
property Genre: String;
property GenreIndex: Integer;
property Track: String;
property ID3V1Infos: TStrings;
property ID3V2Infos: TStrings;
property RiffInfos: TStrings;
property InfoType: TMP3InfoType;
TMP3InfoType = set of (mitID3V1, mitID3V2, mitRiff, mitMacBin, mitLyrics);
曲情報を指定します。読み出し専用です。
Title, Artist, Album, Yea, Commen, Genre, Track プロパティは、ID3 Tag Ver1 または 1.1 または ID3 Tag Ver2 または RIFF/WAVE または RIFF/RMP のそれぞれの項目に対応する情報のうち、最長の情報になります。
ファイルからの読込時で Title に相当する情報がない場合、パスを除いたファイル名が Title プロパティになります。
GenreIndex プロパティは ID3 Tag Ver1 または 1.1 形式で Genre を表す数値になります。ID3 Tag Ver1 または 1.1 形式の情報がない場合は -1 になります。
ID3V1Infos, ID3V2Infos, RiffInfos プロパティはそれぞれ、ID3 Tag Ver1 または Ver1.1, ID3 Tag Ver2 3.x, RIFF/WAVE または RIFF/RMP 形式での情報を指定します。
'情報名=内容'' という形式で格納されていて、RiffInfos.Names や RiffInfos.Values などでアクセスします。
InfoTypes プロパティは、MPEG ファイルが持っている音以外の情報の種類を指定します。
TMP3InfoType 型は、
- mitID3V1
- ID3 Tag Ver1 または 1.1
- mitID3V2
- ID3 Tag Ver2
- mitRiff
- RIFF/WAVE または RIFF/RMP
- mitMacBin
- Mac バイナリ
- mitLyrics
- 内蔵 Lyrcis3 Tag
の情報を持っていることを定義します。
現在の実装では、内蔵 Lyrcis 情報は、情報の有無だけをチェックしていて、内容の解析は行っていません。
曲情報って読込だけじゃなくて、書けた方がいいっすよね。わかってはいるんだけど、なかなか、きれいに作れなくて。ID3 Ver1 or 1.1 の書込みだけでもできるようにしとかんと使い勝手が悪いでしょうね。ごめんなさい。
property BitRate: Integer;
ビットレートを bit/sec 単位で指定します。読み出し専用です。
ファイルオープン前は 0、オープン後は固定ビットレートならその値、VBR なら 0 です。
VBR は、いわゆる Xing 形式または VBRI 形式のヘッダで判別しています。ヘッダなし VBR ってのも有り得るので、実は VBR なんだけど、このプロパティが 0 でない・・・ってこともありえます。その場合、Length プロパティも不正確になります。
property Capabilities: TMP3Capabilities;
TMP3Capabilities = set of (mcbCanOpen, mcbCanClose, mcbCanPlay, mcbCanStop, mcbCanPause, mcbCanUnpause, mcbCanSeek, mcbCanOutputFile);
実行可能な操作を指定します。読み出し専用です。
- mcbCanOpen
- Open メソッド実行可能
- mcbCanClose
- Close メソッド実行可能
- mcbCanPlay
- Play メソッド実行可能
- mcbCanStop
- Stop メソッド実行可能
- mcbCanPause
- Pause メソッド実行可能
- mcbCanUnpause
- Unpause メソッド実行可能
- mcbCanSeek
- Seek メソッド実行可能
- mcbCanPlayToFile
- PlayToFile メソッド実行可能
GUI で、それぞれのメソッドに結び付けられたボタン類の有効・無効の設定用にと想定しています。
このプロパティの変更が必要な時は、OnChangeStatus イベントが起きる時なので、OnChangeStatus イベントで、ボタン類の Enabled プロパティを更新しておけば OK。
property Channels: Integer;
チャンネル数を指定します。読み出し専用です。
範囲は、ファイルオープン前は 0、オープン後は 1..2 です。
property DeviceCount: Integer;
実行時にシステムが持っている wave デバイスの数を指定します。読み出し専用です。
property DeviceID: DWord;
出力する wave デバイスを指定します。デフォルトは WAVE_MAPPER です。
WAVE_MAPPER にしておくと、出力時にシステムで適当なデバイスを選んで出力します。
property DeviceNames[Idx: Integer]: String;
実行時にシステムが持っている wave デバイスの名前を指定します。読み出し専用です。
Idx の範囲は 0..DeviceCount-1 です。
property Equalizer[Index: Integer]: Integer;
イコライザーの指定をします。
Index の範囲は 0..31 で、大きい程、高周波数帯を示します。
Equlizer[Index] の範囲は、-100..100 で、大きいほど、その周波数帯を強調することを示します。
強調・減衰の程度は 100 で +20db, -100 で -20db です。大きくしすぎるとサチってノイズが出ます。
デフォルトは、全周波数帯で 0 です。
ファイル出力にも反映されます。
property EqualizerFreq[Index: Integer]: Integer;
イコライザー各バンド毎の中心周波数を指定します。
Index の範囲は 0..31。
EqualizerFreq[Index: Integer] の範囲は 1..24000 で Hz 単位の即値を指定します。
EqualizerMode プロパティが memFreq で、Index が EqualizerCount プロパティ未満の時のみ、反映されます。
ファイル出力にも反映されます。
property HasCpuCapabilities: TMP3CpuCapabilities;
TMP3CpuCapabilities = set of (mccMMX, mcc3DNow, mccKNI, mccE3DNow, mccCMOV, mccEMMX);
CPU が持っている拡張機能を取得します。読み出し専用です。
TMP3CpuCapabilities の内容は UsingCpuCapabilities プロパティを参照してください。
property IsOpen: Boolean;
ファイルを開いているかどうかを指定します。読み出し専用です。
property Layer: Integer;
MPEG Audio ファイルのレイヤーを指定します。読み出し専用です。
ファイルを開く前は 0、開いた後は、1..3 になります。
property Length: Integer;
再生時間をミリ秒単位で指定します。読み出し専用です。
ファイルを開く前は 0 です。
MPEG Audio ファイルはその構造上、再生が終るまで再生時間の特定が難しい場合があります。そのため、再生中と再生終了後で、Length プロパティの内容が変わる場合があります。
property Position: Integer;
現在の位置をミリ秒単位で指定します。Capabilities プロパティに mcbCanSeek がない時は設定しても無視されます。
ファイルを開く前は 0 です。
スレッド間のやりとりが必要ななため、読み込みに数ミリ〜10ミリ秒程度の時間がかかることがあります。この値を何度か続けて使うときは、一度変数に読み込んでから使いまわしてください。
書込みは Seek を伴うので、数100ミリ〜数秒程度かかることがあります。
読み込み精度は waveOutGetPosition API の精度に依存します。
書込み精度は 1 フレーム。44.1KHz, 128Kbps, ステレオ, MPEG1 Layer3 で 25 ミリ秒くらいです。
property SamplingRate: Integer;
サンプリングレートを Hz 単位で指定します。読み込み専用です。
ファイルを開ける前は 0 です。
property Status: TMP3Status;
TMP3Status = (mstStop, mstPlay, mstPause);
現在の状態を指定します。読み込み専用です。
- mstStop
- 停止中
- mstPlay
- 再生中
- mstPause
- 一時停止中
ファイルを開ける前は不定です。
property Version: Integer;
MPEG Audio ファイルのバージョンを指定します。読み出し専用です。
ファイルを開ける前は 0、開けた後は 1..3 です。
1, 2 はそれぞれ MPEG1, MPEG2 を示し、3 は MPEG2.5 を示します。