PR

オーディオ・キャプチャと、PCM形式での保存

2010年10月15日(金)
PROJECT KySS

プロジェクトの作成と画面レイアウト

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)」

MSDN ライブラリ「WAVEFORMATEX」

また、Silvelright 4でサポートされる形式の詳細については、Silvelright 4のヘルプの「サポートされるメディア形式、プロトコル、およびログ フィールド」を参照してください。

四国のSOHO。薬師寺国安(VBプログラマ)と、薬師寺聖(デザイナ、エンジニア)によるコラボレーション・ユニット。1997年6月、Dynamic HTMLとDirectAnimationの普及を目的として結成。共同開発やユニット名義での執筆活動を行う。XMLおよび.NETに関する著書や連載多数。最新刊は「Silverlight実践プログラミング」両名とも、Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。http://www.PROJECTKySS.NET/

連載バックナンバー

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

他にもこの記事が読まれています