// 初期化 void initialize() { // デフォルトのKinectを取得する ERROR_CHECK( ::GetDefaultKinectSensor( &kinect ) ); ERROR_CHECK( kinect->Open() ); // オーディオを開く CComPtr<IAudioSource> audioSource; ERROR_CHECK( kinect->get_AudioSource( &audioSource ) ); // オーディオビームリーダーを開く ERROR_CHECK( audioSource->OpenReader( &audioBeamFrameReader ) ); // データバッファを作成する UINT subFrameLength = 0; ERROR_CHECK( audioSource->get_SubFrameLengthInBytes( &subFrameLength ) ); audioBuffer.resize( subFrameLength ); // Waveファイルを設定する audioFile.Open( "KinectAudio.wav" ); }
// Create BOOL AudioStream::Create (LPSTR pszFilename, AudioStreamServices * pass) { BOOL fRtn = SUCCESS; // assume success Assert(pszFilename); Assert(pass); m_pass = pass; Init_Data(); if (pszFilename && m_pass) { // Create a new WaveFile object m_pwavefile = (WaveFile *)malloc(sizeof(WaveFile)); Assert(m_pwavefile); if (m_pwavefile) { // Call constructor m_pwavefile->Init(); // Open given file m_pwavefile->m_bits_per_sample_uncompressed = m_bits_per_sample_uncompressed; if (m_pwavefile->Open (pszFilename)) { // Calculate sound buffer size in bytes // Buffer size is average data rate times length of buffer // No need for buffer to be larger than wave data though m_cbBufSize = (m_pwavefile->GetUncompressedAvgDataRate () * m_nBufLength) / 1000; nprintf(("SOUND", "SOUND => Stream buffer created using %d bytes\n", m_cbBufSize)); // m_cbBufSize = (m_cbBufSize > m_pwavefile->GetDataSize ()) ? m_pwavefile->GetDataSize () : m_cbBufSize; //nprintf(("Sound", "SOUND => average data rate = %d\n\r", m_pwavefile->GetUncompressedAvgDataRate ())); //nprintf(("Sound", "SOUND => m_cbBufSize = %d\n\r", m_cbBufSize)); // Create sound buffer HRESULT hr; memset (&m_dsbd, 0, sizeof (DSBUFFERDESC)); m_dsbd.dwSize = sizeof (DSBUFFERDESC); m_dsbd.dwBufferBytes = m_cbBufSize; m_dsbd.lpwfxFormat = &m_pwavefile->m_wfmt; m_dsbd.dwFlags = DSBCAPS_STATIC | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_LOCSOFTWARE; hr = (m_pass->GetPDS ())->CreateSoundBuffer (&m_dsbd, &m_pdsb, NULL); if (hr == DS_OK) { // Cue for playback Cue (); Snd_sram += m_cbBufSize; } else { // Error, unable to create DirectSound buffer nprintf(("Sound", "SOUND => Error, unable to create DirectSound buffer\n\r")); if (hr == DSERR_BADFORMAT) { nprintf(("Sound", "SOUND => Bad format (probably ADPCM)\n\r")); } fRtn = FAILURE; } } else { // Error opening file nprintf(("SOUND", "SOUND => Failed to open wave file: %s\n\r", pszFilename)); m_pwavefile->Close(); free(m_pwavefile); m_pwavefile = NULL; fRtn = FAILURE; } } else { // Error, unable to create WaveFile object nprintf(("Sound", "SOUND => Failed to create WaveFile object %s\n\r", pszFilename)); fRtn = FAILURE; } } else { // Error, passed invalid parms fRtn = FAILURE; } return (fRtn); }