0

我目前正在做一个C#中的自定义媒体播放器,这个东西的主要目的是让用户播放自己的音乐文件。我已经有一个这种播放器(https://bitbucket.org/_Bruce/media-player),它工作正常,但只支持波形文件。这个限制让我很困扰,因为 mp3 是一种很小的格式(关于磁盘空间)。

我已经尝试过并且或多或少地通过使用该FromUri方法成功完成了这项任务,但有一个棘手的问题:如果机器的用户名包含空格,则编译器将不接受该字符串,我试图用Uri.EscapeUriString但是 Visual Studio 说 Dos 路径必须带有根目录,例如C:\.

我正在尝试的代码如下或此处的完整代码

    string[] SongsToRead = Directory.GetFiles(Environment.CurrentDirectory, "*.mp3");
    song song;
    protected override void Initialize()
    {
        var var1 = Uri.EscapeUriString(SongsToRead[0]);
        Song = Song.FromUri("Test", new Uri(var1));
        base.Initialize();
    }

我站在错误的一边吗?

谢谢!

4

1 回答 1

1

好吧,现在你有一些事情要处理了——

老实说,尽管我一直在 XNA 工作,但我什至不知道有一个Song.FromUri(...)——我从来没有用过它。

如果您要使用 XNA 的内置系统,只需使用常规Content.Load<Song>("mysong");方法 - 或尝试将其加载为 SoundEffect 使用SoundEffect.FromStream(new System.IO.FileStream("MyFile.mp3", System.IO.FileMode.Open));- 用于 .wav 声音,但应与其他 MS 认可的音频文件兼容。

如果您想避免这种情况,因为您认为 Content Pipeline 很烦人或 SoundEffect 不能正常工作,您必须首先意识到整个 XNA 音频设置也很差。

如果您想要动态控制和从无内容管道的文件加载音频,我建议您使用FMod-Ex 声音系统 (API) 。

(最初设置有点复杂,但是一旦你将 .dll 文件放在正确的位置并导入了 C# 包装器,它就会非常有用并且比较容易使用)

如果你真的想使用你当前的代码,我唯一注意到的是:

    var var1 = Uri.EscapeUriString(SongsToRead[0]);

不要那样做。例如,它转换为 ,myfolder\myfile.mp3用于myfolder%5Cmyfile.mp3HTTP 内容。这里不好。

于 2013-06-16T18:47:46.817 回答