如果它尝试播放 mp3 文件,我的代码会崩溃,适用于 wav 文件

Posted

技术标签:

【中文标题】如果它尝试播放 mp3 文件,我的代码会崩溃,适用于 wav 文件【英文标题】:My code crashes if it tries to play a mp3 file, works fine for wav files 【发布时间】:2013-03-18 21:36:52 【问题描述】:

我所有的声音片段都是 mp3,所以我真的不想翻译它们 tp wav。 如果我尝试播放 mp3 文件,则会出现异常,但该代码适用于 .wav 文件。 我认为必须有一种播放 mp3 文件的方法。

Stream s = TitleContainer.OpenStream("sounds/bag.mp3");

// throws a exceptio if its a mp3 file
SoundEffect effect = SoundEffect.FromStream(s);
FrameworkDispatcher.Update();
effect.Play();

【问题讨论】:

【参考方案1】:

这是设计使然 - SoundEffect.FromStream 仅适用于波形文件。作为per MSDN:

Stream 对象必须指向有效 PCM 波形文件的头部。 此外,此波形文件必须为 RIFF 比特流格式。

音频格式有以下限制:

必须是 PCM 波形文件 只能是单声道或立体声 必须是 8 位或 16 位 采样率必须介于 8,000 赫兹和 48,000 赫兹之间

【讨论】:

你可以。例如,如果您使用 Silverlight+XNA,您可以使用MediaElement。或者,如果您从事 Windows Phone 8 项目,您可以使用本机代码通过 XAudio2 来完成。【参考方案2】:

尝试使用媒体元素..

MediaElement MyMedia = new MediaElement();
MyMedia.Source = new Uri("sounds/bag.mp3", UriKind.RelativeOrAbsolute);
MyMedia.Play();

【讨论】:

MediaElement 非常有问题,不适合这种用途。声音应采用受支持的格式,并应通过 XNA 库播放

以上是关于如果它尝试播放 mp3 文件,我的代码会崩溃,适用于 wav 文件的主要内容,如果未能解决你的问题,请参考以下文章

当 cordova-plugin-local-notification 尝试播放 mp3 文件时,Monaca Android 应用程序崩溃

基于 java 的音乐播放器仅识别 .wav 文件格式

如何异步使用playsound?

android - 如何在我的音乐播放器中从文件管理器播放 mp3 文件?

背景音乐导致 XCode 崩溃

iOS 内存崩溃上的 Web 音频 API