c#函数播放base64编码的mp3文件

本文关键字:mp3 文件 编码 base64 函数 播放 | 更新日期: 2023-09-27 18:19:06

我试图创建一个函数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()行遇到异常,说明The wave header is corrupt具有堆栈跟踪

at System.Media.SoundPlayer.ValidateSoundData(Byte[] data) at System.Media.SoundPlayer.LoadAndPlay(Int32 flags) at System.Media.SoundPlayer.Play() at POC.Program.PlaySoud(String base64String) in c:'Users'user'Documents'Visual Studio 2013'Projects'POC'POC'Program.cs:line 21 at POC.Program.Main(String[] args) in c:'Users'user'Documents'Visual Studio 2013'Projects'POC'POC'Program.cs:line 12 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()

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

你能告诉我PlaySound函数有什么问题吗?我编码或解码mp3文件的方式有问题吗?

c#函数播放base64编码的mp3文件

SoundPlayer类只能播放。wav文件。——MSDN

你可以在你的应用程序中使用WindowsMediaPlayer来播放。mp3文件以及许多其他格式。只要添加正确的参考资料,就可以了。(帮助):

WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
wplayer.URL = "My MP3 file.mp3";
wplayer.controls.play();

Update:如果你需要从流中播放mp3,请参见使用c#从流中播放音频。或者你也可以创建一个临时文件并播放。