SoftKineticにはマイクもついているので、音声入力を行うことができます。今回は、入力された音声を、スピーカーから出力してみます。
注意
音声を出力する際に、出力した音声をマイクが拾って、変な音が出る場合があります。ノイズキャンセルなどの処理はしていません。PCの音量に十分注意してください。
音声出力部分のコード
「Kinect for Windows SDK プログラミング C++編 」で使用した音声出力のコードを利用します。
このファイルをプロジェクトに追加します。
音声出力の実装
StreamingWavePlayer をグローバル変数として宣言します。
StreamingWavePlayer g_player;
次に出力音声の設定を行います。StreamingWavePlayer::open() は サンプリングレート、サンプルあたりのビット数、チャネルを要求します。これらはAudioNode::Configuration に定義されているので、それぞれ設定します。
void configureAudioNode(){
g_anode.newSampleReceivedEvent().connect(&onNewAudioSample);
AudioNode::Configuration config = g_anode.getConfiguration();
config.sampleRate = 44100;
g_player.open( config.sampleRate, config.bitsPerSample, config.channels );
...
}
音声データが更新されると、onNewAudioSample() が呼ばれるので、データ列をstd::vector に変換して出力します。
void onNewAudioSample(AudioNode node, AudioNode::NewSampleReceivedData data){
printf("A#%u: %d\n",g_aFrames,data.audioData.size());
g_aFrames++;
const uint8_t* audioData = data.audioData;
std::vector< BYTE > buffer( audioData, audioData + data.audioData.size() );
g_player.output( buffer );
}
くどいですが、実行時のスピーカーには気を付けてくださいw