首页 文章

Sprite Kit中的5.1声道位置音频输出可能吗?

提问于
浏览
0

我正在尝试使用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个通道来定位音频 .

1 回答

  • 0

    使用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

相关问题