앱에 포커스가 있지 않을 때 배경 오디오를 허용하고 싶습니다. 현재이 코드를 허용해야합니다 :Swift가 작동하지 않는 백그라운드 오디오 허용
do {
try AKSettings.setSession(category: .playback, with: .mixWithOthers)
} catch {
print("error")
}
AKSettings.playbackWhileMuted = true
기능 설정에서 '오디오, 에어 플레이 및 Picture in Picture'설정이 활성화되어 있습니다. 그러나 내 장치의 홈 단추를 누르면 오디오가 계속 재생되지 않습니다. 내가 도대체 뭘 잘못하고있는 겁니까? 그게 중요하다면 나는 소리를 내기 위해 AudioKit을 사용하고있다.
AudioPlayer.swift라는 AudioKit 구성 요소를 모두 포함하기 위해 싱글 톤을 사용하고 있습니다. 여기에 내 AudioPlayer.swift 싱글 파일에있는 것입니다 :
class AudioPlayer: NSObject {
var currentFrequency = String()
var soundIsPlaying = false
var leftOscillator = AKOscillator()
var rightOscillator = AKOscillator()
var rain = try! AKAudioFile()
var rainPlayer: AKAudioPlayer!
var envelope = AKAmplitudeEnvelope()
override init() {
super.init()
do {
try AKSettings.setSession(category: .playback, with: .mixWithOthers)
} catch {
print("error")
}
AKSettings.playbackWhileMuted = true
AudioKit.output = envelope
AudioKit.start()
}
func setupFrequency(left: AKOscillator, right: AKOscillator, frequency: String) {
currentFrequency = frequency
leftOscillator = left
rightOscillator = right
let leftPanner = AKPanner(leftOscillator)
leftPanner.pan = -1
let rightPanner = AKPanner(rightOscillator)
rightPanner.pan = 1
//Set up rain and rainPlayer
do {
rain = try AKAudioFile(readFileName: "rain.wav")
rainPlayer = try AKAudioPlayer(file: rain, looping: true, deferBuffering: false, completionHandler: nil)
} catch { print(error) }
let mixer = AKMixer(leftPanner, rightPanner, rainPlayer)
//Put mixer in sound envelope
envelope = AKAmplitudeEnvelope(mixer)
envelope.attackDuration = 2.0
envelope.decayDuration = 0
envelope.sustainLevel = 1
envelope.releaseDuration = 0.2
//Start AudioKit stuff
AudioKit.output = envelope
AudioKit.start()
leftOscillator.start()
rightOscillator.start()
rainPlayer.start()
envelope.start()
soundIsPlaying = true
}
}
를 그리고 여기에게 특정 주파수를 전송하는 AudioKit 싱글을 참조 내 음향 효과보기 컨트롤러 중 하나의 예이다 (나는 대해이 이러한 뷰 컨트롤러의 다스, 자신의 주파수 설정 각) :
class CalmView: UIViewController {
let leftOscillator = AKOscillator()
let rightOscillator = AKOscillator()
override func viewDidLoad() {
super.viewDidLoad()
leftOscillator.amplitude = 0.3
leftOscillator.frequency = 220
rightOscillator.amplitude = 0.3
rightOscillator.frequency = 230
}
@IBAction func playSound(_ sender: Any) {
if shared.soundIsPlaying == false {
AudioKit.stop()
shared.setupFrequency(left: leftOscillator, right: rightOscillator, frequency: "Calm")
} else if shared.soundIsPlaying == true && shared.currentFrequency != "Calm" {
AudioKit.stop()
shared.leftOscillator.stop()
shared.rightOscillator.stop()
shared.rainPlayer.stop()
shared.envelope.stop()
shared.setupFrequency(left: leftOscillator, right: rightOscillator, frequency: "Calm")
} else {
shared.soundIsPlaying = false
shared.envelope.stop()
}
}
}
내 ViewController.swift 파일에 AudioPlayer 싱글을 인스턴스화.
코드가 충분하고 지나치게 많은 것 사이에는 미세한 선이 있습니다. 질문하신 질문에 대한 답변이 아래에 있습니다. 당신은 물건을 올바르게 설치 한 것처럼 보입니다. AudioKit 예제 SongProcessor를 테스트하여 원하는대로 작동하는지 확인한 다음 코드를 비교하십시오. 간결하고 쉬운 솔루션은 없습니다. –