我有一个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]
的块为单位处理所有数据。