计算按顺序播放的多个音频文件的总持续时间/ Swift 3,4

时间:2018-11-19 13:56:02

标签: ios swift

例如,有40个音频文件(A1,A2,...,A40),其中不同的数字通过AVAudioPlayer调出并一个接一个地播放。例如,前5个(A1,A2,...,A5)。

var speechPlayer = AVAudioPlayer ()
var currentPlayingItems: [String] = []

fileprivate func prepareAudioItemsToPlay () {
var result: [String] = []

    if (introSwitch.isOn) {    
    result.append ( "Intro")
    }

result += audioFileNamesForCurrentLessonType

currentPlayingItems = result.flatMap ({Bundle.main.path (forResource: $ 0, ofType: "m4a")})
currentPlayingItemNumber = 0

fileprivate var audioFileNamesForCurrentLessonType: [String] {
    guard let type = selectedLessonType else {return []}
    switch type {

    case .lesson1:
    if (statusSelection.selectedSegmentIndex == 0) {
    return ["A1", "A2", "A3", "A4", "A5"]
    }
    else if (statusSelection.selectedSegmentIndex == 1) {
    return ["A1", "A6", "A3, "A7", "A8", "A9","A10"] 
    }
...
}

如何获取所选课程/状态中播放的所有音频文件的总运行时间?例如:第1课,第一个(运动)状态:
简介,A1,A2,A3,A4,A5(135秒,以下)。

我们简单地假设音频文件的持续时间(以秒为单位)如下:
A1 = 1,A2 = 2,A3 = 3,...,A40 = 40,前奏= 120,这些在列表中给出(数组,元组,字典?)。

我是否需要数组,元组或字典以及如何从此列表(ArrayTuple,...)的Lesson(i)中获取值(sec)/ status(j)将它们加在一起,计算持续时间并显示出来?

1 个答案:

答案 0 :(得分:1)

let durations:[String:Int] = ["A1": 1, "A2": 2, "A3": 3, "Intro": 120]
let fileNames:[String] = ["A1", "A3"]
let totalDuration = durations.filter{ fileNames.contains($0.key) }.values.reduce(0, +)

对于非唯一值:

let totalDuration = fileNames.compactMap{ durations[$0] }.reduce(0, +)

使用AVURLAsset获取每个音频文件的持续时间。