【问题标题】:Is 5.1 channel positional audio output in Sprite Kit possible?Sprite Kit 中是否可以输出 5.1 声道位置音频?
【发布时间】:2016-12-08 08:56:07
【问题描述】:

我正在尝试使用 Sprite Kit 中的前后声道播放定位音频,并在 Apple TV 设备上进行测试。

我正在使用以下代码:

    let musicURL = NSBundle.mainBundle().URLForResource("music", withExtension: "m4a")
    let music = SKAudioNode(URL: musicURL!)

    addChild(music)

    music.positional = true
    music.position = CGPoint(x: 0, y: 0)

    let moveForward = SKAction.moveToY(1024, duration: 2)
    let moveBack = SKAction.moveToY(-1024, duration: 2)


    let sequence = SKAction.sequence([moveForward, moveBack])
    let repeatForever = SKAction.repeatActionForever(sequence)

    music.runAction(repeatForever)

我想要实现的是从前声道到后声道的声音,但 Sprite Kit 似乎只使用 2 声道立体声输出。

如果我使用 moveToX 而不是 moveToY,我会听到从左向右平移的声音。

我肯定缺少一些初始化代码来表示我想要 5.1 声音输出,但我不确定 SKAudioNode 位置功能是否仅适用于 2 声道立体声输出。

在 Sprite Kit 中是否可以实现具有 2 个以上通道的位置音频,或者我应该求助于 AVFoundation 甚至 OpenAL 来实现这一点?

我用 SceneKit 尝试过类似的代码,它似乎也只使用 2 个通道来处理位置音频。

【问题讨论】:

  • 从我在文档中阅读的内容来看,原因可能是底层 AVAudioEnvironmentNode 未配置正确的音频通道布局。

标签: ios audio sprite-kit apple-tv


【解决方案1】:

无法使用 SceneKit 在 3D 空间中定位声音。您不应该使用 SKAudioNode 而是直接使用 AVFoundation 来播放声音。

首先您必须设置音频会话以使用 5.1 声道输出布局:

let session = AVAudioSession.sharedInstance()  
session.setCategory(AVAudioSessionCategoryPlayback)  
session.setActive(true)  
session.setPreferredOutputNumberOfChannels(6)

然后连接一个 AVAudioEnvironmentNode 设置以输出 6 个输出通道。

可以在这个现有答案中找到一个起点:

https://stackoverflow.com/a/35657416/563802

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多