Ich versuche, die URL, die in meinem Audio-Player ist zu einem AVAsset zu konvertieren, so dass ich in der Lage bin, die Audiospur nach meinem Geschmack zu manipulieren. (Ich möchte nur in der Lage sein, die Datei zu schneiden). Leider tritt ein Problem auf, bei dem das Asset nicht korrekt konvertiert wird. Wenn ich die Dauer der Audio-URL vor dem Konvertieren drucke, wird die Dauer korrekt ausgedruckt. Leider, wenn ich es in den AVAsset umwandle, heißt es, die Dauer ist 0. Was ist los? Jede Anleitung würde sehr geschätzt werden!Umwandlung der URL in AVAsset - Swift
func trimmingFunc() {
try? audioPlayer = AVAudioPlayer(contentsOf: audioURL!)
passingTime = audioPlayer.duration
audioPlayer.delegate = self
let currentDuration = audioPlayer.duration
print(currentDuration) //correctly prints duration
let filePath = URL(fileURLWithPath: (("\(String(describing: audioPlayer.url!))")))
print(filePath) //correctly prints filePath
let currentAsset = AVAsset(url: filePath)
print(CMTimeGetSeconds(currentAsset.duration) //This is printing 0
}
'Aufgrund der Art zeitgesteuerter audiovisueller Medien sind bei der erfolgreichen Initialisierung eines Assets einige oder alle Werte für seine Schlüssel möglicherweise nicht sofort verfügbar." (Https://developer.apple.com/documentation/avfoundation/ avasset) –
also heißt das, ich müsste die Dauer berechnen & meine Audiodatei im Completion-Handler trimmen/manipulieren? B/C was ich aus mehreren Beispielen gesehen habe (nicht dass sie für mich funktionieren) ist, dass sie die Informationen vor dem Beendigungshandler berechnen. – AndrewS
Sie können KVO verwenden ('[_currentAsset addObserver: self für KeyPath: @" duration "' + 'beobachten Sie ValueForKeyPath') –