块大小的进程缓冲区

时间:2015-04-28 10:38:56

标签: c#

我有一个IRandomAccessStream来存储WindowsPhone 8.1上的数据,我想在某个BLOCKSIZE中处理数据。

这是代码

在捕获函数中:

await this.mediaCapture.StartRecordToStreamAsync(recordProfile, this.message);

在停止功能中,完成后我停止:

await this.mediaCapture.StopRecordAsync();

using (var dataReader = new DataReader(message.GetInputStreamAt(0)))
{
    dataReader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
    dataReader.ByteOrder = Windows.Storage.Streams.ByteOrder.LittleEndian;

    //  await dataReader.LoadAsync((uint)message.Size);
    await dataReader.LoadAsync(((uint)message.Size + (int)FREQUENCY) * 10);
    byte[] buffer = new byte[((int)message.Size + (int)FREQUENCY) * 10];

    dataReader.ReadBytes(buffer);

    short[] signal = new short[BLOCKSIZE];
    int bufferReadResult = 0;

    while (bufferReadResult != buffer.Length) 
    {
        for (int index = 0; index < BLOCKSIZE; index += 2, bufferReadResult++)
        {
            signal[bufferReadResult] = BitConverter.ToInt16(buffer, index);

        }

        // .....process the signal[] in BLOCKSIZE,
        // keep processing BLOCKSIZE until end of buffer
        // so process [BLOCKSIZE][BLOCKSIZE]..............buffer end
    }
}

问题是当bufferReadResult达到BLOCKSIZE时就是这样。它不会继续使用新的块单元缓冲区结束。

最好的方法是什么?我有一个缓冲区或IRandomAccessStream,我希望以short[BLOCKSIZE]的块为单位处理所有数据。

0 个答案:

没有答案