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

最佳答案

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

首先,您必须将音频 session 设置为使用5.1声道输出布局:

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

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

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

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

10-08 16:58