Ejemplo n.º 1
0
 /// <summary>
 /// 近接センサ用音声データを送信する。
 /// </summary>
 /// <param name="position">最新バッファ位置</param>
 private void SendFftData(int position)
 {
     try
     {
         int index = GetSendDataPosition(position);
         if (index == -1)
         {
             soundControl.SendAll(
                 new SoundData(timeBuffer[position], new double[0], soundControl.ID));
         }
         else
         {
             double[] fftData = UseFFT.GetPower(GetData(index, fftPacketCount));
             soundControl.SendAll(
                 new SoundData(timeBuffer[index], fftData, soundControl.ID));
         }
     }
     catch (Exception e)
     {
         SoundControl.WriteErrorLog(e.ToString());
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 近接センサ用音声データを比較する。
        /// </summary>
        /// <param name="soundData">受信した音声データ</param>
        /// <returns>比較結果(類似度)</returns>
        public double Compair(SoundData soundData)
        {
            try
            {
                if (soundData.Data.Length > 1)
                {
                    // データ時刻が最も近いブロックを探す
                    int index = SeekPosition(currentPosition, 100);
                    while (index != currentPosition)
                    {
                        // 簡単に相手のデータ時刻を越えた瞬間とする
                        if (timeBuffer[index] > soundData.Time)
                        {
                            break;
                        }
                        if (++index == RingBufferLength)
                        {
                            index = 0;
                        }
                    }

                    // 対応する自分の音声バッファが有声区間であるか確認
                    bool[] localTalkingFlag = GetTalkFlags(index, fftPacketCount);
                    if (CountBool(localTalkingFlag) > SilentDataThreshold)
                    {
                        // 音声データの比較
                        short[]  data           = GetData(index, fftPacketCount);
                        double[] localFrequency = UseFFT.GetPower(data);
                        return(UseFFT.Compair(localFrequency, soundData.Data));
                    }
                }
            }
            catch (Exception e)
            {
                SoundControl.WriteErrorLog(e.ToString());
            }
            return(0);
        }