オーディオ・キャプチャと、PCM形式での保存
プロジェクトの作成と画面レイアウト
XAMLのレイアウトと、アウト・オブ・ブラウザの設定
では、音声保存のプログラムを作成していきましょう。
今回のサンプルは、Silverlight 4アプリケーションとして作成していきます。新規Silverlight 4プロジェクト(SL4_AudioCaptureプロジェクト)を作成し、依存関係を設定してください。この手順については、これまでの連載を参照してください。
XAMLデザイン画面を表示し、TextBlockを2個、レイアウトします。ひとつはタイトル表示用、もうひとつはメッセージ表示用です。また、Buttonを3個レイアウトします。それぞれ、録音、停止、保存のために用います(図4)。
図4:XAMLレイアウト画面(MainPage.xaml) |
レイアウトができたら、以前の連載を参照して、Trustedモードのアウト・オブ・ブラウザで実行できるよう、設定してください。以上の作業によって作成されたXAMLコード(MainPage.xaml)については、ダウンロード・ファイルを参照してください。
音声保存のプログラムを書く前に
生成するPCM形式データの内容
キャプチャした音声を保存するには、音声データを生成する必要があります。生成する音声データは、テキストではなく、バイナリです。プログラムを書く前に、その内容を見ておきましょう。
Silvelright 4では、リニアPCMがサポートされています。キャプチャしたデータは、WAV形式に相当する、8ビットまたは16ビットのリニアPCM形式で保存することができます。
PCM形式のデータは、RIFF、FORMAT、DATAの3つのチャンクから成ります。各チャンクのデータを識別する識別子は、それぞれ'RIFF', 'fmt ', 'data'です。それぞれのチャンクの内容は、表1のとおりです。これらのデータを順次生成して書き込む処理を記述するようになります。
表1:PCMフォーマットの内容
RIFF | チャンク内に格納されたデータを識別する FOURCC。ASCII Charactersの「RIFF」。 | RIFF | 12 | |
パッケージ全体の長さ。データを除くヘッダ長。36(RIFFチャンクとFORMATチャンクの小計)と、データ長(Length)の合計。 | ||||
特定のファイルの型を識別するFOURCC。ここではASCII Charactersの「WAVE」。 | WAVE | |||
FORMAT | チャンク内に格納されたデータを識別するFOURCC。fmt(半角スペース)固定。 | fmt(半角スペース) | 24 | |
ヘッダ長。フォーマットID以降のfmtチャンクのサイズ(単位はバイト)。リニアPCMでは24-8で16。 | ||||
オーディオのフォーマットタイプ。Microsoft PCM Audioの場合、フォーマットIDは1。 | ||||
チャンネル数。モノラルでは 1 つのチャンネル、ステレオでは 2 つのチャンネル。 | channels | |||
サンプリングレート(サンプリング周波数、1秒あたりのサンプル数。単位はHz) 。たとえば音楽CDの44.1kHzなら44100。 | samplingRate | |||
平均データ転送速度(Byte/sec)。サンプリングレート*量子化ビット数*チャンネル数を8で除算。 | ||||
ブロックサイズ(Byte)。PCM では、チャンネル数と量子化ビット数の積を 8 で除算した値。1は8ビットモノラル、2は8ビットステレオまたは16ビットモノラル、4は16ビットステレオ。 | ||||
量子化ビット数。PCMの場合、 8 または 16。 | samplingBitRate | |||
フォーマット情報の拡張部分。リニアPCMの場合は不要。 | ||||
DATA | チャンク内に格納されたデータを識別する FOURCC。ASCII Charactersの「data」。 | data | ||
波形データのデータ長。 | dataLength | |||
低レベルPCMデータの場合の、ゼロバイト以上の波形データ。 |
表1の中の、FORMATチャンクの「平均データ転送速度(Byte/sec)」については、サンプリングレート×量子化ビット数×チャンネル数/8で算出します。サンプリングレートは、周波数グラフの横軸を何分割してサンプルをとるかです。細かいほど、精度は高くなります。量子化ビット数は読み取りの精度で、周波数グラフの縦軸を何等分するかです。もし8bitなら、2の8乗の256分割、16bitなら2の16乗の65536分割になります。これも、値が大きいほど細かく分割することになります(図5)。
図5:サンプリングレートと量子化ビット数 |
なお、音声データの各チャンクの情報については、次のURLが参考になるでしょう。
MSDN ライブラリ「RIFF (Resource Interchange File Format)」
また、Silvelright 4でサポートされる形式の詳細については、Silvelright 4のヘルプの「サポートされるメディア形式、プロトコル、およびログ フィールド」を参照してください。