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文件的方式有问题吗?
SoundPlayer
类只能播放。wav文件。——MSDN
你可以在你的应用程序中使用WindowsMediaPlayer来播放。mp3文件以及许多其他格式。只要添加正确的参考资料,就可以了。(帮助):
WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
wplayer.URL = "My MP3 file.mp3";
wplayer.controls.play();
Update:如果你需要从流中播放mp3,请参见使用c#从流中播放音频。或者你也可以创建一个临时文件并播放。