public void Consume(short[] input, int length) { // Special case, just pre-filling the buffer if (m_buffer_offset + length < m_frame_size) { Array.Copy(input, 0, m_buffer, m_buffer_offset, length); m_buffer_offset += length; return; } // Apply FFT on the available data CombinedBuffer combined_buffer = new CombinedBuffer(m_buffer, m_buffer_offset, input, length); while (combined_buffer.Size >= m_frame_size) { combined_buffer.Read(m_input, 0, m_frame_size); m_lib.ComputeFrame(m_input, m_frame.Data); m_consumer.Consume(m_frame); combined_buffer.Shift(m_increment); } // Copy the remaining input data to the internal buffer combined_buffer.Flush(m_buffer); m_buffer_offset = combined_buffer.Size; }
public void TestFlush() { short[] buffer1 = { 1, 2, 3, 4, 5 }; short[] buffer2 = { 6, 7, 8 }; short[] tmp = new short[10]; CombinedBuffer buffer = new CombinedBuffer(buffer1, 5, buffer2, 3); for (int i = 0; i < 10; i++) { Assert.AreEqual(0, tmp[i]); } buffer.Flush(tmp); Assert.AreEqual(0, buffer.Offset); for (int i = 0; i < 8; i++) { Assert.AreEqual(1 + i, tmp[i]); } for (int i = 8; i < 10; i++) { Assert.AreEqual(0, tmp[i]); } }