0

私の 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();

このコードは部分的に機能します。入力ファイルの曲が再生を開始します。また、バイト[]は、同じ曲では常に同じ長さです。私はこれを、その曲が毎回完全に読まれていることを意味すると考えています。

ただし、私の問題は、オーディオが実行ごとに異なるポイントでランダムに再生を停止することです。曲もまだ完全に再生されていません。なぜこれが起こるのか正確にはわかりません。

知っている人がいたら、どうしてこうなったのか知りたいです。また、コードに問題があるかどうか、またはオーディオを保存する別の方法があるかどうかも知りたいです (ユーザーのコンピューターにファイルを保存する必要はありません)。

4

1 に答える 1

0

私は最終的に解決策を見つけることができました。MediaElement と MemoryStream をグローバル変数にすることで、曲は毎回完全に再生されました。このエラーの原因はまだ 100% わかりませんが、ガベージ コレクターがストリームを削除したことが原因であると推測されます。

于 2013-09-23T22:18:49.647 に答える