XNA游戏的动态音频播放器

时间:2013-06-15 20:12:38

标签: c# xna mp3

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

我已经通过使用FromUri方法尝试了或多或少成功完成此任务,但是存在一个棘手的问题:如果计算机的用户名包含空格,编译器将不接受该字符串,我试图用Uri.EscapeUriString来解决这个问题,但Visual Studio说Dos路径必须是C:\之类的根。

我正在尝试的代码位于Full code here

之下
    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();
    }

我是站在错误的一边吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

现在你有事可以使用 -

老实说,尽管我在XNA工作的所有时间,我甚至都不知道有Song.FromUri(...) - 我从来没有用过它。

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

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

如果你想要音频的动态控制和加载文件,没有内容 - pipline,我建议使用FMod-Ex Sound System (API)

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

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

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

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