在 WP8 中将 ogg 文件解码为 wav

Posted

技术标签:

【中文标题】在 WP8 中将 ogg 文件解码为 wav【英文标题】:Decoding ogg files to wav in WP8 【发布时间】:2014-05-11 23:14:59 【问题描述】:

我想将 ogg 文件转换为 wav,然后在 wp8 设备上播放。 我已经检查了许多解决方案,但没有一个有效。这看起来很有希望,但有些东西不起作用:

string _audioPath = "/SomeProject;component/Sounds/a_dog.ogg";
var stream = Application.GetResourceStream(new Uri(_audioPath, UriKind.Relative)).Stream;
using (var vorbis = new NVorbis.VorbisReader(stream, true))
        
            float[] buf = new float[vorbis.TotalSamples];
            vorbis.ReadSamples(buf, 0, (int)vorbis.TotalSamples);
        

当我执行它时,我在 VorbisReader 构造中看到 FileNotFoundException。我还检查了流是否可读并且它是可读的。我能够使用 Read 方法获取文件内容。

您知道为什么它不起作用吗?也许您知道其他可以解码 ogg 文件的 wp8 库?

[编辑] 我下载了 NVorbis 的源代码并直接从我的项目中使用它,当我这样做时,我没有得到任何 FileNotFoundExceptions 并且一切似乎都正常。也许这个异常是由于缺少库引起的?我已经添加了 NVorbis 参考...

【问题讨论】:

【参考方案1】:

我认为您遇到了与this guy 相同的问题。简短版本:我相信您的 Pack URI 应该是“pack://application:,,,/SomeProject;Component/Sounds/a_dog.ogg”。 NVorbis 实际上并没有抛出异常本身,而是导致资源流这样做......

【讨论】:

不起作用。我尝试了这个 uri:@"pack://application:,,,/SomeProject;component/Sounds/a_dog.ogg",它在 GetResourceStream 处因 UriFormatException 而崩溃。我也尝试了静态资源,但它返回 byte[] 而不是流,所以我无法使用它。 Hrmm... 你可以将原始错误的堆栈跟踪发布到 pastebin 或其他东西吗?它几乎肯定与应用程序集中的 XAML 资源有关,但我不确定如何修复它... pastebin.com/krsWgwFf 所以打开我的 ogg 文件没有问题,但是一些系统库... 这可能是由于您所针对的框架版本... NVorbis 是使用 .Net 3.5SP1 构建的。您在项目中的目标是什么框架版本? 我找不到任何信息。我希望它出现在项目的属性中,但没有关于 .net 版本的内容。目标操作系统设置为 WP7.5,但我将其升级为 WP8 项目。

以上是关于在 WP8 中将 ogg 文件解码为 wav的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 或 C++ 中将压缩的 wav 文件转换为未压缩的 wav 文件的最简单方法是啥?

如何在 Windows 命令行中使用通配符解码多个文件 [关闭]

FFmpeg解码音频代码

如何解码 ogg vorbis 文件 java?

导入 Android NDK 项目(解码 OGG)

尽管列为可用格式,但将 ogg 转换为 wav 不起作用