使用Web Audio API无法获得5.1 /环绕声

时间:2015-08-24 20:33:21

标签: javascript firefox web-audio

我看到的任何地方都表明5.1 /环绕声支持应该在现代的Web Audio API中,但我没有做任何事情可以在Firefox 40或Chrome上运行(不确定Chrome版本,但它应该是最近的/最新的,并且它在任一浏览器中都不起作用的事实告诉我,它不是特定于Chrome的问题。)

我的设置

Creative Sound Blaster Omni 5.1连接到典型的5.1桌面式扬声器。 Windows 10.我可以通过环绕声道成功播放MP4音频。同样,基于DirectX的环绕声游戏似乎也有效。

我在尝试

编写基于Crafty的JS游戏,主要在Firefox上开发。我目前有一个小型的2-D世界,有一系列的panner节点在低端附近打破冲浪。在立体声中,我可以在这个世界中移动并听到断路器在我转动和移动时改变位置。连接我的5.1扬声器后,没有任何变化。也就是说,尽管我在其他情况下遇到环绕声,但行为与立体声一样。

audioContext.destination.maxChannelCount为6,因此Firefox似乎正确检测到了我的频道。我已尝试在我能做的一切事情上明确设置channelCount,除了平移器之外,这样做没有错误,这使得操作不受支持"错误。我想知道这可能是我的问题,但我不知道为什么它会在其他地方工作,所以我想知道我是否在分配频道时过于热心。

无论如何,这里有一些用于初始化声音的Crafty组件。他们使用的是LiveScript,但希望很容易理解:

_initContext: ->
  return @_context if @_context?
  audioContext = window.AudioContext||window.webkitAudioContext
  if audioContext?
    @_context = new audioContext()
    @_context.destination.channelCount = if@_context.destination.maxChannelCount >= 6
      6
    else
      2
    @_context.destination.channelCountMode = "explicit"
    @_masterGain = @_context.createGain()
    @_masterGain.channelCount = @_context.destination.channelCount
    @_masterGain.channelCountMode = "explicit"
    @_masterGain.connect(@_context.destination)
    @_context
...
context = Crafty.sound._initContext()
return unless context?
@_gain = context.createGain()
@_gain.channelCount = context.destination.channelCount
@_gain.channelCountMode = "explicit"
@_gain.connect(Crafty.sound._masterGain)
@_panner = context.createPanner()
@_panner.channelCount = context.destination.channelCount # Fails
@_panner.connect(@_gain)

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

想出来。看起来PannerNode仅限于立体声输出,考虑到此API中的所有3-D /空间功能,这会让人感到困惑。同样不明显的是PannerNode的2声道限制会导致目的地只有2个频道(也就是说它可能以某种方式处理每个频道最多2个频道,但将它们定位在6个频道I& #39; d在目的地分配。)显然,它可以输出多个通道,但不能输出这些接口。也许使用自定义API ...

如何分解。