音に関する一覧
WPFで利用可能な標準のクラス
Fig.1 音に関連したクラス
クラス |
System.Windows.Controls |
X |
X |
X |
・UIコントロール
・URIのみ再生 |
- <Window x:Class="wpf_audio_test1.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- Title="MainWindow" Height="350" Width="525">
- <Grid Loaded="Grid_Loaded">
- <MediaElement Source="file:///c:/codesamples/nf092004.wav"/>
- </Grid>
- </Window>
|
System.Windows.Media |
X |
X |
X |
・UIコントロールではない
・URIのみ再生 |
- private void Grid_Loaded(object sender, RoutedEventArgs e)
- {
- MediaPlayer mp = new MediaPlayer();
- mp.Open(new Uri("file:///c:/codesamples/nf092004.wav"));
- mp.Play();
- }
|
System.Media |
X |
X |
X |
「テーマ」で設定されている警報音の短いWAVファイルを再生する機能 |
- private void Grid_Loaded(object sender, RoutedEventArgs e)
- {
- System.Media.SystemSounds.Asterisk.Play();
- //System.Media.SystemSounds.Beep.Play();
- //System.Media.SystemSounds.Exclamation.Play();
- //System.Media.SystemSounds.Hand.Play();
- //System.Media.SystemSounds.Question.Play();
- }
|
System.Media |
X |
O |
X |
Streamが入力に指定できるので音を作って渡せる |
「System.Media (Sound)」にサンプル |
|
|
|
|
|
|
|
|
|
|
|
Silverlightの音
互換性の点で気になるので確認しておく。
-
MediaElementにSetSource()があって、Streamをソースにできる。
現状は確認していないが、PCMが入出力できなかった。これは、Action Scriptも同様で、おそらく著作権保護が理由だと考えられる。
一部の圧縮形式が再生可能。mp3はOK。
-
AudioSinkクラスでPCMの入出力ができる。
Silverlightは、Linuxでも、IE以外のブラウザでも、動作するもので、Silverlightが用意する以外の方法では入出力できない。
何かのサウンドAPIを呼び出すと言ったことはできない。
マイク入力
マイクだけでなく、音声の入力機能を持った標準的なクラスは無いようだ。
扱うデータによる分類
- データそのものが必要。周波数分析をするなど音声データそのものが必要。
- 単に、圧縮などのためにデータをメモリに格納する。音声加工ができるなら、データ値そのものに関心はない。
- リアルタイム性のためにバッファリングする。データ値そのものに関心はない。
---
- PCM
- 圧縮音声
---
- ネットワーク上のストリーミングデータの入出力
- ファイルを入出力
- メモリ上のデータを入出力
音声を扱う方法
今のところ、標準的な方法では実現できないものは以下の通り。
- マイク入力
- マイク以外のキャプチャ
- リアルタイム再生
- 圧縮音声
これらは、何かしらのAPIを使って実現することになる。
大半は、今まで通り winmm.dll を呼び出せば実現できる。
しかし、winmm.dll は 32ビット版のみが存在し、過去のものとして扱われているようだ。
特に問題なく動作する。問題があるのは、プログラミング時だけ。
64ビットWindowsの上で、そのままビルドすると実行時にエラーが起きる。エラー表示も、直ちに原因が推測できるものではない。
中間コード方式の C# で、64/32ビットが何の関係があるのか私にはわからない。
64ビットOS上でビルドするなら、プラットフォームをAnyCPUからx86に変える必要がある。
Core Audio はどうか。
|