C#函数,用于播放base64编码的mp3文件

C#函数,用于播放base64编码的mp3文件,c#,audio,base64,mp3,.net-4.5,C#,Audio,Base64,Mp3,.net 4.5,我正在尝试创建一个函数PlaySoud,该函数接受mp3文件作为base64编码字符串,并使用System.Media.SoundPlayer播放它 static void Main(string[] args) { var audioBytes = File.ReadAllBytes(@"PATH-TO-FILE"); var base64String = Convert.ToBase64String(audioBytes); P

我正在尝试创建一个函数
PlaySoud
,该函数接受mp3文件作为base64编码字符串,并使用
System.Media.SoundPlayer
播放它

    static void Main(string[] args)
    {
        var audioBytes = File.ReadAllBytes(@"PATH-TO-FILE");
        var base64String = Convert.ToBase64String(audioBytes);
        PlaySoud(base64String);
    }

    static void PlaySoud(string base64String)
    {
        var audioBuffer = Convert.FromBase64String(base64String);
        using (var ms = new MemoryStream(audioBuffer))
        {
            var player = new System.Media.SoundPlayer(ms);
            player.Play();
        }
    }
我当前在
player.Play()
行上遇到一个异常,说明
波头已损坏
堆栈跟踪


位于System.Media.SoundPlayer.ValidateSoundData(字节[]数据)
在System.Media.SoundPlayer.LoadAndPlay(Int32标志)上
在System.Media.SoundPlayer.Play()中
在c:\Users\user\Documents\visualstudio 2013\Projects\POC\POC\Program.cs中的POC.Program.PlaySoud(字符串base64String)处:第21行
位于c:\Users\user\Documents\visualstudio 2013\Projects\POC\POC\Program.cs中的POC.Program.Main(字符串[]args):第12行
位于System.AppDomain.\u nExecuteAssembly(RuntimeAssembly程序集,字符串[]args)
位于System.AppDomain.ExecuteAssembly(字符串汇编文件、证据汇编安全性、字符串[]args)
在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()上
位于System.Threading.ThreadHelper.ThreadStart\u上下文(对象状态)
位于System.Threading.ExecutionContext.RunInternal(ExecutionContext ExecutionContext、ContextCallback回调、对象状态、布尔值preserveSyncCtx)
在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,对象状态,布尔保存SyncCTX)
在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,对象状态)
位于System.Threading.ThreadHelper.ThreadStart()处

MSDN关于此错误的大多数讨论都指向将流位置重置为
0
,但没有帮助


您能告诉我
PlaySound
功能有什么问题吗?我编码或解码mp3文件的方式是否有问题?

SoundPlayer类只能播放.wav文件。-

您可以在应用程序中使用WindowsMediaPlayer来播放.mp3文件以及许多其他格式。只要添加正确的参考资料,您就可以开始了


更新:如果需要从流播放mp3,请参阅。或者,您也可以创建一个临时文件并播放该文件。

您的代码没有立即出现任何问题-很可能是“wave头已损坏”-从播放非WAV文件(即MP3)的意义上讲。如果你真的尝试播放MP3(根据你的帖子,情况似乎是这样),那么当所有文章都有相反的建议时,你尝试使用
SoundPlayer
是非常奇怪的。编码/解码没有问题。SoundPlayer类只接受.wav文件我的坏!我确实在尝试使用
SoundPlayer
播放
*.mp3
文件(但是
WMPLib
是否支持从流播放(我不这么认为)?我实际上想播放
base64
编码的mp3文件?
WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
wplayer.URL = "My MP3 file.mp3";
wplayer.controls.play();