今日のジャンク.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形式のデータにデコードしておく必要があります。


音楽CDのトラックデータを追加するためには、MSDiscMasterObjオブジェクトからIRedbookDiscMasterインタフェースを取得する必要があり、全体の流れは以下の通りになります。

  1. CoCreateInstance()で、MSDiscMasterObjオブジェクトのインスタンスを生成して、IDiscMasterのインタフェースを取得。
  2. IDiscMaster::Open()で、IMAPIのアクセスを開始。
  3. IDiscMaster::SetActiveDiscMasterFormat()で、使用するディスクフォーマットのIID( IID_IRedbookDiscMaster )を指定し、IRedbookDiscMasterインタフェースを取得する。
  4. IDiscRecorderインタフェースを取得し、IDiscMaster::SetActiveDiscRecorder()で、ライティングを行うレコーダーを指定する。
  5. 必要であれば、ライティング速度の調整。
  6. PCM形式の音楽データを準備。1トラック当たりのフレーム数を取得。
  7. IRedbookDiscMaster::CreateAudioTrack()で、新しいトラックを作成する。
  8. IRedbookDiscMaster::AddAudioTrackBlocks()で、音楽データを書き込んでいく。
  9. IRedbookDiscMaster::CloseAudioTrack()で、トラックを閉じる。
  10. 「6~9」の繰り返してトラックを追加する。
  11. IDiscMaster::RecordDisc()で、ライティングが開始される。
  12. 全ての処理が完了したら、最後にIDiscMaster::Close()で、IMAPIのアクセスを終了する。

VC2005用のサンプルコードは こちら を参考にして下さい。
サンプルコードでは最低限のエラーチェックしか行っていません。使用方法を誤ると、大切なデータが記録されたメディアが読み取れなくなる恐れがありますので、自己責任の元、注意してご利用下さい。

サンプルコードの補足。

  • 引数で指定されたwavファイルを、順番にトラックに追加しています。
  • 使用するレコーダーを指定した後に、書き込み速度をx2で設定していますが、お好みで調節してみてください。(ウチの環境だと、最高速で音楽CDを作ろうとしたら、コースターが出来上がってしまった(--;)
  • 殆どの労力が、wavファイルの解析に費やされてるような気もしますが、エンコードされた音楽ファイルを追加したい場合は、この部分を変更することで対応できそう。今回は面倒なのでパス・・・
  • ドライブ、メディアの種類によって、原因不明の失敗も多いみたいです。ざっくり作ったサンプルのミスか、環境依存かは不明。マズイ箇所が何処か気がつきましたら連絡頂けると助かります。

しっかし、コマンドラインアプリ形式のサンプルページを作るのは面倒だなぁ(´・ω・`)
FC2ブログのファイルアップロードで、lzhかzipが指定できたら楽なのに。
スポンサーサイト

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

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://junktxt.blog90.fc2.com/tb.php/29-11b87713
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

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