1

我有一个文件夹,里面有许多 .wav 文件。我需要动态计算这些文件,以便以随机方式生成声音。我需要这个动态,所以我不需要每次用另一个声音更新声音文件夹时更新代码。我搜索了如何做到这一点,但只能找到 Windows 的示例。这是我想出的代码:

string path = string.Format("/Sound/{0}", sourceSound);
return Directory.GetFiles(path, ".wav").Length;

我尝试运行它,但 VS 给了我错误:

“无法踏步。代码目前不可用。”

有什么我做错了,或者任何其他情况我们如何计算文件夹中的文件数?

谢谢。

4

2 回答 2

0

尝试

using (var myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
        {
            var i = myIsolatedStorage.GetFileNames("*.wav").Length;
        }
于 2013-10-22T20:49:37.193 回答
0

由于某种原因,我无法制作 Vitalii 给我的示例。我永远无法获得我在 volder 中的文件数。浏览互联网,我偶然发现了这个链接:

对资源和 GetManifestResourceNames() 感到困惑

Zack 在这个线程上给出的答案,给出了我需要让我的应用程序工作的洞察力。

我使用 Embedded Resource 来查找我需要的所有文件数,然后使用 SoundEffectInstance 播放。以下链接对此有所帮助:

http://matthiasshapiro.com/2011/01/10/embedding-a-sound-file-in-windows-phone-7-app-silverlight/

这是我设法使它工作的方法:

soundCount = GetSoundCount();

private int GetSoundCount()
        {
            return Assembly.GetExecutingAssembly().GetManifestResourceNames().Where(name => name.Contains(sourceImg)).Count();
        }

通过这几行,我设法获得了我的应用程序中文件的确切数量。

为了播放声音,我以第二个链接为例,并生成了以下代码:

if(soundInstance != null)
soundInstance.Stop();
this.soundInstance = SetNextSource();
soundInstance.Play();


private SoundEffectInstance SetNextSource()
        {
            Random random = new Random();
            Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
            Stream stream = assembly.GetManifestResourceStream(string.Format("Assembly Name.Folder.{0}.{1}.wav", SubFolder, FileName + random.Next(soundCount)));
            SoundEffect se = SoundEffect.FromStream(stream);
            return se.CreateInstance();
        }

几天后,研究终于成功了。希望这个帖子可以帮助遇到我遇到同样问题的人。

谢谢。

于 2013-10-25T00:56:43.703 回答