Wie lässt sich die Dauer einer Audiodatei am einfachsten erreichen?
Ich könnte ein Objekt von AVAudioPlayer erstellen, es mit URL initialisieren und dann die Dauer abrufen, aber dieser Weg ist zu lang. Gibt es einen einfacheren Weg?
Danke.
Korrekter Code ist
%Vor%outDataSize sollte Float64 nicht UInt64 sein.
Wenn Sie etwas über die fragliche Audiodatei (Samplerate, Bittiefe, Kanalanzahl) wissen und es sich um ein unkomprimiertes Format (WAV / AIFF) handelt, können Sie die / approximate / duration aus der Dateigröße berechnen:
length_in_seconds = (file_length-guess_100_bytes_for_header) / (Abtastrate * (bitdepth * channel_count / 8))
Das hängt vom Dateityp ab. Wenn es sich um eine WAV-Datei handelt, können Sie den Header der Datei suchen und die Wiedergabedauer bestimmen. Wenn es ein komprimiertes Format ist (* .mp3 usw.), bleiben Sie besser bei der Methode, die Sie erwähnt haben.
Falls jemand hier landet und nach einer Möglichkeit sucht, die Dauer für Audio- und Videodateien zu erhalten, werfen Sie einen Blick auf diese Antwort auf einen anderen Beitrag, der stattdessen AVAsset
verwendet:
Die Verwendung von AudioFileGetProperty
(wie die anderen beiden Hauptantworten hier), um die Dauer von A / V-Dateien zu erhalten, funktionierte nicht für einige .mov Dateien auf meinem Gerät (das Ergebnis war immer 0) ), während die Lösung mit AVAsset
die Dauer für alle Audio- und Videodateien auf meinem Gerät hat.
(Interessanterweise war jedoch die Dauer beider Lösungen manchmal 1 Sekunde länger als die, die in der Benutzeroberfläche eines tatsächlichen AVAudioPlayer
angezeigt wurde. Am wahrscheinlichsten verwendet AVAudioPlayer
eine nicht standardmäßige Rundungsroutine für die angezeigte Dauer. )
Beispielcode aus der Antwort Wie kommt man hin? die Dauer einer Audiodatei in iOS? . Dies ist die beste Antwort.
AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:audioFileURL options:nil]; CMTime audioDuration = audioAsset.duration; float audioDurationSeconds = CMTimeGetSeconds(audioDuration);
Tags und Links iphone cocoa-touch