繁体   English   中英

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

[英]Can't get 5.1/surround sound working with Web Audio API

我所看到的每个地方都表明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 ,除了panners之外,这样可以正常工作,这会产生“不支持操作”错误。 我想知道这可能是我的问题,但我不知道为什么它会在其他地方工作,所以我想知道我是否在分配频道时过于热心。

无论如何,这里有一些用于初始化声音的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)

谢谢你的帮助。

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

如何分解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM