0

ARSCNView で ARKit 2.0 を実行します。iOS12 アプリケーションはマルチスレッドを使用しているため、これらの機能はメイン スレッドで実行されています (念のため)。また、メインスレッドでも関数を明示的に実行せずに試しましたが、役に立ちませんでした。

.aiff サウンド ファイルを使用していますが、.wav も試しました。喜びはありません。

ノード階層から audioNode_alarm を削除しようとしましたが、サウンドは引き続き再生されます。ビュー階層から ARSCNView を削除しても、サウンドは再生されます。FFS

私が見る限り、オーディオの再生を停止するために、私は想定どおりのことを行っています。何をやっても音声が止まりません。なぜだろう?

weak var audioNode_alarm: SCNNode!
weak var audioPlayer_alarm: SCNAudioPlayer?

func setupAudioNode() {

    let audioNode_alarm = SCNNode()
    addChildNode(audioNode_alarm)
    self.audioNode_alarm = audioNode_alarm

}

func playAlarm() {

    DispatchQueue.main.async { [unowned self] in

        self.audioNode_alarm.removeAllAudioPlayers()

        if let audioSource_alarm = SCNAudioSource(fileNamed: "PATH_TO_MY_ALARM_SOUND.aiff") {

            audioSource_alarm.loops = true
            audioSource_alarm.load()
            audioSource_alarm.isPositional = true
            let audioPlayer_alarm = SCNAudioPlayer(source: audioSource_alarm)
            self.audioNode_alarm.addAudioPlayer(audioPlayer_alarm)
            self.audioPlayer_alarm = audioPlayer_alarm

        }

    }

}

func stopAlarm() {

    DispatchQueue.main.async { [unowned self] in

        self.audioNode_alarm?.removeAudioPlayer(self.audioPlayer_alarm!)
        self.audioNode_alarm?.removeAllAudioPlayers()

    }

}
4

1 に答える 1

1

私がやったことは、音を止めてプレーヤーを削除することです

yourNode.audioPlayers.forEach { audioLocalPlayer in
  audioLocalPlayer.audioNode?.engine?.stop()
  yourNode.removeAudioPlayer(audioLocalPlayer)
}

ドキュメントによると、SCNAudioPlayerにはaudioNodeがあり、「再生中にボリュームやリバーブなどのパラメーターをリアルタイムで変更する」ために使用されることになっています。

audioNodeAVAudioNodeタイプなので、 engine prop とそのタイプ定義にジャンプすると、必要なすべてのコントロールが見つかります。

于 2019-07-09T03:48:45.637 に答える