AVFoundationで音声ファイルの再生時間を取得する

音楽を再生するアプリや、録音アプリなどで音声ファイルの再生時間をUIに組み込むことがあると思いますが、Data型に変換したファイルをいじくり回して取ると思っていて少し悩みました。

AVFoundationを使うことで簡単に取得することができたのでメモとして残しておきます。

サンプルの音声ファイルはフリー素材『Hanavi』こちらの音声ファイルをお借りしてプロジェクト直下において検証を行いました。

if let audioPath = Bundle.main.path(forResource: "Hanabi", ofType:"mp3") {
    let audioUrl = URL(fileURLWithPath: audioPath)
    let audioPlayer: AVAudioPlayer = try! AVAudioPlayer(contentsOf: audioUrl)
    
    let duration = Int(audioPlayer.duration)
    let min = duration / 60
    let sec = duration % 60
    // 10以下の時0で穴埋め
    let minString = min >= 10 ? min.description : "0" + min.description
    let secString = sec >= 10 ? sec.description : "0" + sec.description
        
    let playbackTime: String = min > 60 ? "1時間以上" : minString + ":" + secString

    print("再生時間 \(playbackTime)秒")
}