유튜브 프리미엄 해지후 몇 달이 흘르고 흘러 밖으로 돌아다닐일이 생겼으나 나의 유튜브 뮤직은 더이상 사용할 수 없었다.
그렇다고 다시 결제하자니 초반 유튜브 레드 유저에게 약속했던 변하지않는 가격으로~~ 라는 광고 문구를 속인게 괴심하다 생각해 도저히 못하겠고
그냥 파일로 다운받아서 돌리자 생각했다
해서 백그라운드 재생 및 플레이 리스트가 있는게 필요한데 오랜만에 네이티브 만지는김에 필요한것만 만들어보려고 했고 깃허브에 업로드시켰다
아래는 일부분...
우선 음악을 담을 폴더 내부를 읽어서 url을 저장하는 부분...
do {
let directoryContents: [String] = try fileManager.contentsOfDirectory(atPath: filePath.path)
print(directoryContents)
if directoryContents.isEmpty {
urls = []
return
}
var _urls: [URL] = []
for item in directoryContents {
let fileURL = filePath.appendingPathComponent(item)
if fileURL.pathExtension != "mp3" {
continue
}
_urls.append(fileURL)
}
self.urls = _urls
} catch {
NSLog(error.localizedDescription)
}
다른앱이였다면 여러가지 확장자를 지원했겠지만 난 오로지 mp3파일만을 골랐다
그렇게 url을 싱글톤 클래스로 관리하고 따로 컨트롤바에서 플레이해주기로 결정
아래는 url을 플레이~
private func playUrl(url: URL) {
do {
avPlayer = try AVAudioPlayer(contentsOf: url)
avPlayer?.prepareToPlay()
avPlayer?.play()
} catch {
NSLog(error.localizedDescription)
}
}
테스트로 돌려봤는데 시뮬레이터에서는 재생이 되나 왠지 기기에서는 들리지않는다.
열심히 검색해보니 오디오 세션으로 플레이백 모드로 해줘야한다고 한다
해서 appdelegate에 해당 부분을 넣어줬다
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers])
try AVAudioSession.sharedInstance().setActive(true)
해당 부분의 설명은
https://wlaxhrl.tistory.com/92 를 봤다 감사할따름
일단 위글의 일부분을 가져와봤다
- mixWithOthers: 다른 앱의 소리와 우리 앱 소리가 함께 들릴 수 있게 하는 옵션.
- duckOthers: mixWithOthers 를 기본으로 채택하면서 +우리 앱에서 소리가 날 때는 다른 앱 소리를 살짝 죽이는 옵션.
- interruptSpokenAudioAndMixWithOthers: mixWithOthers를 기본으로 채택하면서 + 다른 앱에서 spokenAudio 가 출력될 때에만 interrupt 걸고 우리 앱이 소리를 독차지 (*라디오, 팟캐스트 등을 생각하면 됨)
뭔가 많으니 한번 읽어보면 좋을거같음
/---
읽다보니 인터럽트 부분도 생각해줘야하고
아예 잊고있었던 곡하나가 끝나면 다음곡으로 바로 재생되는것도 있고...
이 두부분은 우선 나중에 해줘야겠다
반응형
'iOS > swift' 카테고리의 다른 글
background audio play - 3 [제어센터에서의 컨트롤] (5) | 2024.11.10 |
---|---|
background audio play - 2 [AVAudioSession] (1) | 2024.09.15 |
앱이 열리면 뱃지 카운트 0으로 설정하기 (0) | 2024.04.28 |
SwiftUI Basic Components (0) | 2023.06.13 |
GIDSignIn.~.signIn(with: config ~) Type of expression is ambiguous without more context (0) | 2023.04.12 |