読者です 読者をやめる 読者になる 読者になる

Natural Software

KinectなどのDepthセンサーを中心に活動しています

SoftKinetic の DepthSenseSDK で、音声を出力してみる

SoftKinetic

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