1

オーディオ ファイルは分離ストレージに保存されますが、クリックしても再生されません。ここにコードを表示するだけです。コードは実際に 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"/>

前もって感謝します。

4

0 に答える 0