【问题标题】:Can't load audio using "AudioFileResource.load(named:)" type method无法使用“AudioFileResource.load(named:)”类型方法加载音频
【发布时间】:2020-07-28 12:25:16
【问题描述】:

我可以使用 RealityKit 的 load(contentsOf: withName: inputMode: loadingStrategy: shouldLoop:) 类型方法轻松加载 .mp3.aiff 音频文件。

static func load(contentsOf url: URL, 
          withName resourceName: String? = nil, 
                      inputMode: AudioResource.InputMode = .spatial, 
                loadingStrategy: AudioFileResource.LoadingStrategy = .preload, 
                     shouldLoop: Bool = false) throws -> AudioFileResource

这是带有Bundle.main.url() 方法的代码:

Bundle.main.url() 适用于 load(contentsOf:)。

import RealityKit
import ARKit

class ViewController: UIViewController {

    @IBOutlet var arView: ARView!
    let entity = Entity()
    let anchor = AnchorEntity()
    var audioController: AudioPlaybackController? = nil

    override func viewDidLoad() {
        super.viewDidLoad()
        self.loadAudio()
    }
}

extension ViewController {

    fileprivate func loadAudio() {
        
        let audioURL: URL = Bundle.main.url(forResource: "MonoAudio", 
                                          withExtension: "mp3")!         
        do {
            let audioResource = try AudioFileResource.load(contentsOf: audioURL)
            self.audioController = entity.prepareAudio(audioResource)
            self.audioController?.fade(to: .infinity, duration: 5)
            self.audioController?.speed = 2.0
            self.audioController?.gain = 30
            self.audioController?.play()
        } catch {
            print("Get Error while loading audio file...")
        }
        self.anchor.addChild(entity)
        self.arView.scene.anchors.append(anchor)
    }
}


但我无法使用load(named: in: inputMode: loadingStrategy: shouldLoop:) 类型的方法加载音频文件。

static func load(named name: String, 
                  in bundle: Bundle? = nil, 
                  inputMode: AudioResource.InputMode = .spatial, 
            loadingStrategy: AudioFileResource.LoadingStrategy = .preload, 
                 shouldLoop: Bool = false) throws -> AudioFileResource

这是一个带有Bundle.main.path() 方法的代码:

Bundle.main.path() 不适用于负载(命名:)。

extension ViewController {
    
    fileprivate func loadAudio() {

        let audioPath: String = Bundle.main.path(forResource: "MonoAudio",
                                                      ofType: "mp3")!
        do {
            let audioResource = try AudioFileResource.load(named: audioPath)
            self.audioController = entity.prepareAudio(audioResource)
            self.audioController?.fade(to: .infinity, duration: 5)
            self.audioController?.speed = 2.0
            self.audioController?.gain = 30
            self.audioController?.play()
        } catch {
            print("Get Error while loading audio file...")
        }
        
        self.anchor.addChild(entity)
        self.arView.scene.anchors.append(anchor)
    }
}

我错过了什么?我该怎么做?

【问题讨论】:

    标签: swift augmented-reality arkit realitykit


    【解决方案1】:

    这里不需要使用Bundle.main.path(forResource:ofType:) 方法。我需要做的就是为字符串参数named 分配一个文件名。下面是它的样子:

    let audioResource = try AudioFileResource.load(named: "MonoAudio.mp3",
                                                      in: nil,
                                               inputMode: .spatial,
                                         loadingStrategy: .preload,
                                              shouldLoop: true)
    
    self.audioController = entity.prepareAudio(audioResource)
    
    self.audioController?.play()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 2021-07-16
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-11
      相关资源
      最近更新 更多