オーディオ ファイルは分離ストレージに保存されますが、クリックしても再生されません。ここにコードを表示するだけです。コードは実際に xap コンテンツからオーディオ ファイルを取得し、分離ストレージに格納します。示されているように読み取りますが、期待どおりに再生されません。
読み返し方
using (var ISF = IsolatedStorageFile.GetUserStoreForApplication())
{
if (ISF.FileExists(MusicFileToPlay))
{
using (var FS = ISF.OpenFile(MusicFileToPlay, FileMode.Open, FileAccess.Read))
{
mediaelement.Stop();
mediaelement.SetSource(FS);
mediaelement.Position = System.TimeSpan.FromSeconds(0);
mediaelement.Volume = 20;
mediaelement.Play();
StatusTextBlock.Text = "Playing....";
//MediaPlayer.Play(
}
}
else
{
StatusTextBlock.Text = "No file present to play....";
}
}
隔離保管庫への保管方法
private void SaveSoundsToStorage()
{
foreach (string music in fileNames)
{
string filename = String.Format("Sounds/{0}.mp3", music);
SaveHelper(filename, music + ".mp3");
}
}
private void SaveHelper(string filename, string savename)
{
using (var appStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
if (appStorage.FileExists(savename))
{
//MessageBox.Show("File already exists");
return;
}
StreamResourceInfo SRI = Application.GetResourceStream(new Uri(filename, UriKind.Relative));
using (IsolatedStorageFileStream FS = new IsolatedStorageFileStream(savename, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None, appStorage))
{
try
{
using (BinaryWriter BW = new BinaryWriter(FS))
{
long lg = 0;
Stream s;
try
{
if (SRI != null)
{
s = SRI.Stream;
lg = s.Length;
}
}
catch (Exception error)
{
MessageBox.Show("Stream resource exception: "+error.Message);
}
try
{
if (lg > appStorage.AvailableFreeSpace)
{
//No space available.Request more space
Int64 spaceToAdd = lg;
Int64 curAvail = appStorage.AvailableFreeSpace;
// Request more quota space.
if (!appStorage.IncreaseQuotaTo(appStorage.Quota + spaceToAdd))
{
// The user clicked NO to the
// host's prompt to approve the quota increase.
return;
}
else
{
// The user clicked YES to the
// host's prompt to approve the quota increase.
}
}
}
catch (Exception)
{
MessageBox.Show("quota increase problem.");
}
byte[] buff = new byte[32];
int count = 0;
try
{
using (BinaryReader br = new BinaryReader(SRI.Stream))
{
while (count < lg)
{
int actual = br.Read(buff, 0, buff.Length);
count += actual;
BW.Write(buff, 0, actual);
BW.Flush();
}
}
}
catch (Exception)
{
MessageBox.Show("Error at binary reader.");
}
}
}
catch (Exception)
{
MessageBox.Show("Binarywriter exception.");
}
//MessageBox.Show(filename + " saved successfully.");
StatusTextBlock.Text = savename + " saved succesfully";
}
}
}
メディア要素の XAML コードは
<MediaElement Name="mediaelement" Height="120" Width="160" AutoPlay="True" MediaFailed="mediaelement_MediaFailed_1"/>
前もって感謝します。