今日のジャンク.txt

プログラムメモ、きまぐれ日記、etc...

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[VC] IMAPI v1 (その3)

3回目となる今回は、IMAPIv1で音楽CDを作成してみましょう。
IMAPIとはなんぞや?」という方は(その1)からどうぞ。自作プログラムで作った音楽CDをコンポなんかで聴くと、いつもと違った感動があること間違いなし!?

一般的な音楽CDのフォーマットは「RedBook」といって、国際的な標準規格として制定されています。(ちなみに、規格書の表紙は本当に赤いですよ~)
たとえば、音楽CDのデータの最小単位は「フレーム(又はブロック)」で表し、1フレーム=2352バイトで構成され、再生する時は1秒間に75フレームが読まれると定義されています。

まあ、その辺の難しいフォーマット管理もIMAPIの中で隠蔽されているのですが、IMAPIで実際に追加できる音楽データは「サンプリングレート44.1KHz、16-bitステレオ、RAWオーディオサンプル形式」である必要があります。
Windowsで作成した一般的なwavファイルのデータならそのまま使用する事ができますが、mp3やwma等エンコードされた音楽ファイルは、一旦WAVE形式のデータにデコードしておく必要があります。

>> 【“[VC] IMAPI v1 (その3)”の続きを読む】

スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

[VC] IMAPI v1 (その2)

今回はIMAPIv1でデータディスクの作成を行います。
IMAPIとはなんぞや?」という方は(その1)からどうぞ。

IMAPIv1で作成できるデータディスクのフォーマットは、マイクロソフトがISO9660を拡張し、Windowsで一般的な書き込みフォーマットである『Joliet』と呼ばれるタイプですが、主な特徴は以下の通りです。

  • 最大64文字(128byte)のロングファイル名が使用可能
  • アルファベットの大文字、小文字の使い分けが可能
  • ユニコードファイル名のサポート

また、ISO9660形式との互換性を維持するために、8.3形式ファイル名も記録しており、Jolietに対応しないシステムでもファイルの読み取りが可能になっています。

「なんだか難しそうだな~」と思っても大丈夫。
フォーマットの管理や、ライティング処理はIMAPIの内部で隠蔽されているので、単純なライティングであれば、一般的なファイルアクセスと同じ感覚で利用する事が可能です。 (さすがに、市販のライティングソフト並の物を作るとなると一筋縄ではいきませんが…)

早速実験してみましょう。
>> 【“[VC] IMAPI v1 (その2)”の続きを読む】

テーマ:プログラミング - ジャンル:コンピュータ

[VC] IMAPI v1 (その1)

何回かに分けて、VC++で『Image Mastering API Version1.0 (IMAPIv1)』の使い方をメモっていきます。

IMAPIv1とは、アプリケーションからCD-R/CD-RWに対してイメージの書き込みをサポートする機能で、WinXP以降のOSで利用できます。ちなみに、Vistaでは各種DVDメディアへの書き込みや、UDFフォーマットがサポートされたIMAPIv2が利用できます。

今回は、IMAPIv1でドライブ、メディア情報を取得してみましょう。

まず、IMAPIv1をプログラムから利用するためには、"imapi.h"をインクルードします。 "imapi.h"は『Platform SDK』で提供されているヘッダファイルなので、VisualStudio等で開発する場合は、最新のSDKをインストールして、ヘッダファイルを含むフォルダがコンパイラから参照できるように設定する必要があります。
Microsoft® Windows® Software Development Kit for Windows Vista™ and .NET Framework 3.0 Runtime Components
(07/02/04 時点での最新SDK)

IMAPIもCOMで実装されているので、手順としては以下のような感じかな。

  1. CoCreateInstance()で、MSDiscMasterObjオブジェクトのインスタンスを生成して、IDiscMasterのインタフェースを取得。
  2. IDiscMaster::Open()でIMAPIのアクセスを開始。
  3. IDiscMaster::EnumDiscRecorders()で、レコーダードライブの列挙をIEnumDiscRecordersインタフェースで取得。
  4. IEnumDiscRecorders::Next()で、IDiscRecorderインタフェースを取得し、各レコーダードライブの情報にアクセスが可能。
  5. レコーダーに挿入されたメディアの情報にアクセスする場合、IDiscRecorder::QueryMediaInfo()IDiscRecorder::QueryMediaType()を使用。
  6. レコーダーのプロパティ情報を参照する場合、IDiscRecorder::GetRecorderProperties()で、IPropertyStorageインタフェースを取得。
  7. 最後にIDiscMaster::Close()で、IMAPIのアクセスを終了。

VC++2005用のサンプルはこちらをご参考下さい。

WinXPの場合、『IMAPI CD-Burning COM Service』サービスが動作していないと実行に失敗します(管理ツールのサービスで確認)。また、サンプルでは、DVDメディアや、サポートされていないフォーマットのメディアが挿入されていると、表示がおかしくなる場合があります。

テーマ:プログラミング - ジャンル:コンピュータ

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。