在我的Silverlight应用程序中,我使用ZipInputStream从File读取音频数据,然后将其存储在MemoryStream中。这是我正在使用的代码:
byte[] buf = new byte[1024];
MemoryStream memoryStream = new MemoryStream();
int len;
while ((len = zipInputStream.Read(buffer, 0, buffer.Length)) > 0)
{
memoryStream.Write(buf, 0, len);
}
// Reset the position for reading.
memoryStream.Position = 0;
// Check how large the byte[] is.
textBox.Text = memoryStream.ToArray().Length.ToString();
MediaElement me = new MediaElement();
me.setSource(memoryStream);
me.Play();
此代码部分有效;输入文件中的歌曲开始播放。此外,byte []始终具有相同歌曲的相同长度。我认为这意味着每次都要完全阅读这首歌。
然而,我的问题是音频随机停止播放,每个点都在不同的点播放。这首歌还没有完全播放。我不确定为什么会这样。
如果有人知道,我想知道为什么会这样。我还想知道我的代码是否有问题,或者我应该采用不同的方式存储音频(不涉及在用户的计算机上存储文件)。
答案 0 :(得分:0)
我终于找到了解决方案。通过制作MediaElement和MemoryStream全局变量,每首歌都完全播放。我仍然不能100%确定导致此错误的原因,尽管我最好的猜测是问题是由垃圾收集器删除流引起的。