例如,有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,这些在列表中给出(数组,元组,字典?)。
我是否需要数组,元组或字典以及如何从此列表(Array
,Tuple
,...)的Lesson(i)中获取值(sec)/ status(j)将它们加在一起,计算持续时间并显示出来?
答案 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获取每个音频文件的持续时间。