我目前正在使用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();
}
我是站在错误的一边吗?
谢谢!
答案 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内容。这里不好。