オーディオ・キャプチャと、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 Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

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