Пример #1
0
        //public OverlapAdd(int _n, int _nsample, int _nir)
        public OverlapAdd(Constant c)
        {
            Debug.Log($"samples:{c.blockSamples} size:{c.blockSize} ir:{c.impulseResponseSamples}");
            blockSize = c.blockSize;
            impulseResponseSamples = c.impulseResponseSamples;
            blockSamples           = c.blockSamples;
            Debug.Assert(blockSize == impulseResponseSamples - 1 + blockSamples);

            fft = new Fft(blockSize);
            frequencyResponseX = new float[blockSize];
            frequencyResponseY = new float[blockSize];
            overlap            = new float[impulseResponseSamples - 1];
            convolutionBuf1X   = new float[blockSize];
            convolutionBuf1Y   = new float[blockSize];
            convolutionBuf2X   = new float[blockSize];
            convolutionBuf2Y   = new float[blockSize];
            convolutionResult  = new float[blockSamples];
        }
Пример #2
0
        /// <summary>
        /// FFTテスト
        /// </summary>
        private void FftTest()
        {
            if (!fftTestFlg)
            {
                return;
            }

            debugButton.AddButton("FftTest", () =>
            {
                float[] x = new float[] { 1, 0, 0, 0 };
                float[] y = new float[] { 0, 0, 0, 0 };
                var t     = new Fft(4);
                t.Forward(x, y);
                t.Inverse(x, y);
                Debug.Log($"result =================================");
                for (int i = 0; i < x.Length; ++i)
                {
                    Debug.Log($"[{i}]:{x[i]:0.00} {y[i]:0.00}");
                }
            });
        }
Пример #3
0
        /// <summary>
        /// すべてのインパルス応答を読み込む
        /// </summary>
        public static void LoadAll(Constant c)
        {
            dictionary.Clear();

            Fft fft = new Fft(c.blockSize);

            for (int i = 0; i < 360; i += 5)
            {
                // Debug.Log($"Load angle:{i}");
                var ir     = new Data(c.blockSize);
                var clip_l = WaveAudioClip.CreateWavAudioClip($"Bytes/elev0/L0e{i:000}a.wav");
                Debug.Assert(clip_l.samples == c.impulseResponseSamples);
                clip_l.GetData(ir.channelLX, 0, c.impulseResponseSamples);
                fft.Forward(ir.channelLX, ir.channelLY);
                var clip_r = WaveAudioClip.CreateWavAudioClip($"Bytes/elev0/R0e{i:000}a.wav");
                Debug.Assert(clip_r.samples == c.impulseResponseSamples);
                clip_r.GetData(ir.channelRX, 0, c.impulseResponseSamples);
                fft.Forward(ir.channelRX, ir.channelRY);
                ir.angle      = i;
                dictionary[i] = ir;
            }
        }