kiyasuの日記

ハッピーうれピーよろしく哀愁

ADM BWFを普通のwavに分割する①

流れとしては

  1. ADM BWFを読み込んでデータ部分のバイト列を取得する
  2. ixml部分に(多分)書かれている情報に従ってデータのバイト列を分割する
  3. 分割したバイト列にファイルごとにヘッダ付けてwavとして書き出す

ということになるだろう。多分。

ADM BWFを読み込んでデータ部分のバイト列を取得する

C#

[C#] Wave波形を読み込むよ – Pelican Philosophy

RIFFについて

RIFFファイルについて – RIFFファイルの概要と読み込み | C++でVST作り

Wavについて

音ファイル(拡張子:WAVファイル)のデータ構造について

WAVのフォーマット

WAVEデータの作成と再生【Windowsプログラミング研究所】

wFormatTag はフォーマットです。PCM形式は WAVE_FORMAT_PCM です。
nChannels はチャンネル数です。1チャンネルならモノラル、2チャンネルならステレオです。
nSamplesPerSec は標本化周波数です。
nAvgBytesPerSec は1秒間のバイト数です。計算式は wfe.nSamplesPerSec * wfe.nBlockAlign です。
nBlockAlign はブロックアライメント(データの最小単位)です。計算式は wfe.nChannels * wfe.wBitsPerSample/8 です。
wBitsPerSample は量子化ビット数です。
cbSize は使いません。0 を指定して下さい。

こういう具体的な話はありがてえ

C, C++

こういうbyte列の処理はなんとなくCとかC++でやりたいけど、それはわきに置いておく。メモだけ残しておこう

謎のC言語ブログ: Broadcast Wave Format に対応した WAVE 音声の読み込み

WAVEファイルの読込み/再生

その他

SoundPlayerという関数でwav再生ができるとのことだが、再生したいわけではない。メモだけ

C#でWAVE再生 - Qiita

あとMedi Control Interfaceというのも気になるな。これも再生などがメインのようだ。 MCI (Media Control Interface) を利用してWaveファイルを再生する : C# | iPentec

ixml部分に(多分)書かれている情報に従ってデータのバイト列を分割する

この前抽出したiXMLをここ見ながら分割する。これまでの情報によるとオブジェクトオーディオ以外に7.1.2chの各bedで再生されるwavも含まれているはず。それを狙う。

https://professionalsupport.dolby.com/s/article/Dolby-Atmos-ADM-Profile-specification?language=en_US

ただこの前試したlogicのサンプルプロジェクトは、オートメーション付きだからかiXMLだけで5MBとかあった。なので自分で簡易なサンプル曲を作らなければ。

support.apple.com

まあ試すだけなら簡単にできそうだな。ステムミックスを作ってからプロジェクト設定の空間オーディオをオンにすればOKっぽい。

分割したバイト列にファイルごとにヘッダ付けてwavとして書き出す

C#でWAVE再生 - Qiita