Skip to main content

AVAudioPlayer - 曲の再生/停止

  • 可能なこと
    • 再生
    • 停止
    • 速度変更
  • 不可のこと
    • pitch 変更(音の高さ)
      • これをやるには AVAudioEngine / AVAudioUnitTimePitch というのを使う必要がありそう
        • その際、、
          • Hz は 2倍で1オクターブらしい
          • Hz -> セント? へ単位の変換が必要らしい

コード例

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()
})

}
}