AVAudioPlayer - 曲の再生/停止
- 可能なこと
- 再生
- 停止
- 速度変更
- 不可のこと
- pitch 変更(音の高さ)
- これをやるには AVAudioEngine / AVAudioUnitTimePitch というのを使う必要がありそう
- その際、、
- Hz は 2倍で1オクターブらしい
- Hz -> セント? へ単位の変換が必要らしい
- その際、、
- これをやるには AVAudioEngine / AVAudioUnitTimePitch というのを使う必要がありそう
- pitch 変更(音の高さ)
コード例
swift
struct ContentView: View {
@State private var player: AVAudioPlayer!
...
func playSound(from startTime: Double, to endTime: Double, speed: Float = 1.0) {
// item: MPMediaItem から取得する場合
// guard let url = item.assetURL else {
// return
// }
let url = URL(string: "ipod-library://item/item.m4a?id=164367142636426548")! // so-what
if player != nil {
player.stop()
player = nil
}
do {
player = try AVAudioPlayer(contentsOf: url)
// ここを関数ローカルの変数にしちゃうと、すぐ終了してしまうので、
// クラスのメンバ変数に入れている
} catch {
print("### Error")
}
player.enableRate = true
player.rate = speed
player.currentTime = TimeInterval(startTime)
player.play()
Timer.scheduledTimer(withTimeInterval: (endTime - startTime) / Double(speed), repeats: false, block: { _ in
player.stop()
})
}
}