USE_AUDIO 定数を define してから NtKinect.h を include する と NtKinect の音声関係のメソッドや変数が有効になります。
setAudio() 関数を呼び出すことで音声が取得され、録音中ならば音声データがファイルに書き込まれます。 録音の開始はファイルのパスを指定して openAudioFile(string)関数を呼出、 録音の終了では closeAudioFile()を呼び出します。
返り値の型 | メソッド名 | 説明 |
---|---|---|
void | setAudio(bool flag = false) |
音声を取得し、録音中ならファイルに保存する。
|
void | drawAudioDirection(cv::Mat& image ) | 音声ビームの方向を image に描画する。 |
bool | isOpenedAudio() | 録音ファイルをopen中かどうかを返す。 |
void | openAudio(string path ) | path を録音用ファイルとしてオープンする。 |
void | closeAudio() | 録音用ファイルをクローズする。 |
型 | 変数名 | 説明 |
---|---|---|
float | beamAngle | 音声の方向(左右への角度) |
float | beamAngleConfidence | beamAngleの信頼度 (0.0 〜 1.0) |
UINT64 | audioTackingId | 発話者のskeletonTrackingId |
Microsoft が配布している AudioCaptureRaw-Console C++ Sample の WaveFile.h を少し変更したものをプロジェクトに加えます。
もしもプロジェクトに既存のファイル追加してもincludeできないというエラーが起きる場合は、追加したファイルを 一旦削除してから、「ソリューションエクスプトーラー」の「ヘッダーファイル」を右クリックして メニューの中から「追加」「新しい項目」「VisualC++のヘッダーファイル(.h)」で 「名前」に"WaveFile.h"を指定して下さい。 新たに作成されたファイルにダウンロードしたファイルの内容をコピーして下さい。
NtKinect.hをincludeする前に USE_AUDIO 定数をdefineします。 録音開始は openAudioFile()関数、録音終了は closeAudioFile()を呼び出します。 音声の取得は setAudio()関数で行いますが、録音中は自動的にファイルに保存されます。
下のプログラム例では、現在時刻を取得して、 それをファイル名(例 "2016-07-18_09-16-32.wav")とする wav ファイルを作成しています
main.cpp |
#include <iostream> #include <sstream> #define USE_AUDIO #include "NtKinect.h" using namespace std; #include <time.h> string now() { char s[1024]; time_t t = time(NULL); struct tm lnow; localtime_s(&lnow, &t); sprintf_s(s, "%04d-%02d-%02d_%02d-%02d-%02d", lnow.tm_year + 1900, lnow.tm_mon + 1, lnow.tm_mday, lnow.tm_hour, lnow.tm_min, lnow.tm_sec); return string(s); } void doJob() { NtKinect kinect; bool flag = false; while (1) { kinect.setRGB(); if (flag) kinect.setAudio(); cv::putText(kinect.rgbImage, flag ? "Recording" : "Stopped", cv::Point(50, 50), cv::FONT_HERSHEY_SIMPLEX, 1.2, cv::Scalar(0, 0, 255), 1, CV_AA); // rename CV_AA as cv::LINE_AA (in case of opencv3 and later) cv::imshow("rgb", kinect.rgbImage); auto key = cv::waitKey(1); if (key == 'q') break; else if (key == 'r') flag = true; else if (key == 's') flag = false; if (flag && !kinect.isOpenedAudio()) kinect.openAudio(now() + ".wav"); else if (!flag && kinect.isOpenedAudio()) kinect.closeAudio(); } cv::destroyAllWindows(); } int main(int argc, char** argv) { try { doJob(); } catch (exception &ex) { cout << ex.what() << endl; string s; cin >> s; } return 0; } |
'r'キーで録音開始、's'キーで録音停止です。 RGB画像の左上に録音状態が "Recording" または "Stopped" と表示されます。
上記のzipファイルには必ずしも最新の NtKinect.h が含まれていない場合があるので、 こちらから最新版をダウンロードして 差し替えてお使い下さい。