IRedbookDiscMaster
COM公式ドキュメント
IRedbookDiscMaster インターフェイスは、オーディオ CD イメージのステージングを可能にします。このインターフェイスは MSDiscMasterObj がサポートする形式の 1 つを表し、Track-at-Once モード (固定サイズのオーディオギャップ) でのマルチトラックオーディオディスクの作成を可能にします。
メソッド 8
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ステージングが完了した、またはステージング中のトラックの総数を取得します。
| pnTracks | INT* | out | クローズ済みトラックとオープン中トラックの合計数。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラーコードが返されるのが一般的ですが、返される可能性のあるエラー値はこれらに限られません:
オーディオトラックのステージングに使用できるブロックの総数を取得します。この総数には、トラックギャップ用に割り当てが必要となる可能性のあるブロックを含め、すべての種類のブロックが含まれます。
| pnBlocks | INT* | out | ディスク上で使用できるオーディオブロックの総数。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラーコードが返されるのが一般的ですが、返される可能性のあるエラー値はこれらに限られません:
使用中のオーディオブロックの総数を取得します。
| pnBlocks | INT* | out | クローズ済みトラックとオープン中トラックの両方で使用されているブロックの総数。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラーコードが返されるのが一般的ですが、返される可能性のあるエラー値はこれらに限られません:
領域不足による追加の失敗が発生する前にトラックへ追加できるブロックの現在の数を取得します。
| pnBlocks | INT* | out | オープン中のトラックをクローズする前に、そのトラックに追加できるオーディオブロックの数。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラーコードが返されるのが一般的ですが、返される可能性のあるエラー値はこれらに限られません:
解説(Remarks)
このメソッドは、オープン中のトラックに関連付けられたギャップを考慮します。また、オープン中のトラックがない状態でこのメソッドを呼び出した場合は、新しいトラックを作成したときに追加できるオーディオブロックの最大数 (ギャップなどを考慮した値) が返されます。
オーディオブロックのサイズをバイト単位で取得します。
| pnBlockBytes | INT* | out | オーディオブロック 1 個の合計サイズ (バイト単位)。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラーコードが返されるのが一般的ですが、返される可能性のあるエラー値はこれらに限られません:
解説(Remarks)
このメソッドは 2352 を返します。
新しいオーディオトラックのステージングを開始します。イメージ内にオープン中のオーディオトラックがない場合にのみ呼び出すことができます。
| nBlocks | INT | in | このトラックに追加するオーディオブロックの数。最大 99 個のトラックを作成でき、オープン中のトラックは残りの使用可能なオーディオブロックをすべて消費できます。 nBlocks パラメーターはあくまで目安であり、トラック長をこのサイズに強制するものではありません。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラーコードが返されるのが一般的ですが、返される可能性のあるエラー値はこれらに限られません:
解説(Remarks)
トラックがオープンされた後は、 AddAudioTrackBlocks メソッドを使用してトラックにデータを追加します。
現在オープン中のトラックにオーディオデータのブロックを追加します。このメソッドは、使用できる領域がなくなるか、トラックがいっぱいになるまで繰り返し呼び出すことができます。
| pby | BYTE* | in | トラックブロックの配列へのポインター。形式は 44.1 KHz 16 ビットステレオの RAW オーディオサンプルで、WAV のデータ部で使用される形式と同じです。 |
| cb | INT | in | 配列のサイズ (バイト単位)。この数値はオーディオブロックサイズの倍数である必要があります。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラーコードが返されるのが一般的ですが、返される可能性のあるエラー値はこれらに限られません:
解説(Remarks)
すべてのブロックを追加した後は、 CloseAudioTrack メソッドを呼び出してトラックを完了します。
このメソッドの呼び出しによって使用可能なオーディオブロック数を超過する場合、メソッドは IMAPI_E_DISCFULL を返し、可能な限り多くのオーディオデータを保持します。これに対して IJolietDiscMaster::AddData メソッドはデータを一切保持しないため、不正なファイルが生成されることはありません。
現在オープン中のオーディオトラックをクローズします。IDiscMaster::RecordDisc メソッドを呼び出す前に、すべてのオーディオトラックをクローズしておく必要があります。
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。操作が失敗した場合は次のエラーコードが返されるのが一般的ですが、返される可能性のあるエラー値はこれらに限られません:
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IRedbookDiscMaster "{E3BC42CD-4E5C-11D3-9144-00104BA11C5E}" #usecom global IRedbookDiscMaster IID_IRedbookDiscMaster "{}" #comfunc global IRedbookDiscMaster_GetTotalAudioTracks 3 var #comfunc global IRedbookDiscMaster_GetTotalAudioBlocks 4 var #comfunc global IRedbookDiscMaster_GetUsedAudioBlocks 5 var #comfunc global IRedbookDiscMaster_GetAvailableAudioTrackBlocks 6 var #comfunc global IRedbookDiscMaster_GetAudioBlockSize 7 var #comfunc global IRedbookDiscMaster_CreateAudioTrack 8 int #comfunc global IRedbookDiscMaster_AddAudioTrackBlocks 9 var,int #comfunc global IRedbookDiscMaster_CloseAudioTrack 10 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IRedbookDiscMaster "{E3BC42CD-4E5C-11D3-9144-00104BA11C5E}" #usecom global IRedbookDiscMaster IID_IRedbookDiscMaster "{}" #comfunc global IRedbookDiscMaster_GetTotalAudioTracks 3 sptr #comfunc global IRedbookDiscMaster_GetTotalAudioBlocks 4 sptr #comfunc global IRedbookDiscMaster_GetUsedAudioBlocks 5 sptr #comfunc global IRedbookDiscMaster_GetAvailableAudioTrackBlocks 6 sptr #comfunc global IRedbookDiscMaster_GetAudioBlockSize 7 sptr #comfunc global IRedbookDiscMaster_CreateAudioTrack 8 int #comfunc global IRedbookDiscMaster_AddAudioTrackBlocks 9 sptr,int #comfunc global IRedbookDiscMaster_CloseAudioTrack 10 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。