【问题标题】:Audio output from SilverlightSilverlight 的音频输出
【发布时间】:2009-02-25 12:51:41
【问题描述】:

我正在寻求开发一个 Silverlight 应用程序,该应用程序将从网络服务器获取数据流(不是音频流本身)。

然后将处理数据流以提供某种格式的音频(例如 G.711 a-Law),然后将其转换为 PCM,以便应用其他效果(例如提高音量)。

到目前为止,我还可以。我有我的数据,将 G.711 转换为 PCM,但我的问题是能够将此 PCM 音频输出到声卡。

我的解决方案基于一些用于 .Net 应用程序的 C# 代码,但在 Silverlight 中,尝试获取委托(函数指针)的副本时会出现问题,这将成为一个单独问题的主题制作了一个简单的代码示例。

所以,问题是...如何将我在 Silverlight 中的数据结构(当前为数组)中保存的 PCM 音频输出给用户? (请不要说将字节值写入文本框)

如果它是 MP3 或 WMA 文件,我会使用 MediaElement 播放它,但我不想将其制成文件,因为这会影响对音频应用动态效果。

我看到一些帖子说 Silverlight 中的低级音频支持很差/不存在,所以我愿意接受人们可能提出的任何建议/想法。

【问题讨论】:

    标签: c# silverlight audio pcm


    【解决方案1】:

    简单的答案是,版本 2 中的 Silverlight 不支持 PCM 播放。因此,除非您想编写一个完全托管的 PCM 到 MP3 转换器,否则您会被卡住。即使那样,我也不确定您是否可以让 MediaElement 从独立存储中播放。

    您是否有机会使用网络服务来执行转换?

    另请参阅此问题: Where's the sound API in Silverlight? Or, how do I write a music app to run in the browser?

    更新: Silverlight 3 支持您的自定义音频源。但是,它不允许您截取样本以对 WMA 或 MP3 执行效果,可能是出于 DRM 的原因,因此您仍然可能需要编写自己的解码器。

    【讨论】:

    • 马克,感谢您的回复。 Silverlight 看起来不会让我做我想做的事(但 - 也许有时会)所以现在我将注意力转向 WPF/XBAP。只需要整理部署一个完全受信任的应用程序,但如果我遇到困难,我会再提出一个问题。
    【解决方案2】:

    简短的回答是使用 MediaElement + MediaStreamSource

    看看这些:

    http://blogs.msdn.com/gillesk/archive/2009/03/23/playing-back-wave-files-in-silverlight.aspx

    http://code.msdn.microsoft.com/wavmss/Release/ProjectReleases.aspx?ReleaseId=2417

    基本上,在托管代码中编写一个解码器以将 G.711 a-Law 转换为 PCM,然后对原始值进行任何您想要的修改,然后将它们传递到 MediaStreamSource。

    【讨论】:

      【解决方案3】:

      看起来 Silverlight 3 现在支持直接 PCM 输出,或者将在发布时支持。我还没有在文档中看到有关原始 AV 管道的任何内容。

      【讨论】:

        【解决方案4】:

        Mark Heath 的回答是正确的 - 仅支持某些格式 - mp3 和某些风格的 WMA(不幸的是不是 WMA 无损,它会“更接近”PCM)。

        要在 Silverlight 中播放 PCM 数据,您可以执行以下操作:
        * 将 PCM 转换为 mp3 数据,并存储在内存中。
        * 使用ManagedMediaHelpers 介绍的技术播放 mp3 数据。这里的想法涉及一个名为 Mp3MediaStreamSource 的类(派生自 System.Windows.Media.MediaStreamSource),该类将 mp3 块提供给 MediaElement 以进行播放。这些块需要在流中,但当然可以使用内存流。

        我最初认为您可以通过 MediaStreamSource 提供 PCM 块,但这不起作用。真的很遗憾,因为它可以非常轻松地解决您的问题(以及我面临的问题 - 制作 Speex 音频文件播放器)!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多