iPhone: Holen Sie sich die Dauer einer audio-Datei
Was ist der einfachste Weg, um eine Dauer einer audio-Datei?
Konnte ich erstellen ein Objekt der AVAudioPlayer, initialisieren Sie es mit der URL und als die Dauer, aber dieser Weg ist zu lang. Gibt es einen einfacheren Weg?
Dank.
- Mögliche Duplikate von Wie man die Dauer eines audio-Datei in iOS?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Audio-Datei-Services-Funktionen. Es gibt eine Eigenschaft zu bekommen, das sollte Ihnen die geschätzte Dauer. Code:
Können Sie die docs hier
Richtige code
outDataSize sollte Float64 nicht UInt64.
Wenn Sie wissen nichts über die audio-Datei in Frage (samplerate, bitdepth, Kanalzahl), und es ist in einem unkomprimierten format (WAV/AIFF), dann können Sie berechnen /approximieren/Dauer sich aus der Dateigröße:
length_in_seconds = (file_length-guess_100_bytes_for_header) /(samplerate*(bitdepth*channel_count/8))
SInt64 dataOffset = 0; UInt32 dataOffsetSize = sizeof(dataOffset); AudioFileStreamGetProperty(inAudioFileStream, kAudioFileStreamProperty_DataOffset, &dataOffsetSize, &dataOffset);
Hängt es von der Art der Datei. Wenn es eine WAV-Datei können Sie die Datei-header und bestimmen Sie die Dauer der Wiedergabe, die Art und Weise. Wenn es ein komprimiertes format (*.mp3 etc.) du bist besser dran, das festhalten an der Methode, die Sie erwähnt.
Kombination AVAudioPlayer mit Swift wird so einfach wie (ich bin der Migration ein Reich der Tabelle unten, aber Sie bekommen die Idee):
Falls jemand landet auf der Suche nach einem Weg, um die Dauer für beide audio-und video-Dateien, haben Sie einen Blick auf diese Antwort zu einem anderen Beitrag, die stattdessen verwendet
AVAsset
statt:https://stackoverflow.com/a/7052147/381233
Mit
AudioFileGetProperty
(wie die beiden anderen wichtigsten Antworten hier), um die Dauer der A/V-Dateien nicht funktioniert hat für ein paar .mov Dateien auf meinem Gerät (Ergebnis war immer 0), während die Lösung mitAVAsset
habe die Dauer für alle audio-und video-Dateien auf meinem Gerät.(Interessanterweise, aber die Dauer ist von beiden Lösungen wurde manchmal 1 Sekunde mehr als die in der Benutzeroberfläche angezeigt von einer tatsächlichen
AVAudioPlayer
. Wahrscheinlich dieAVAudioPlayer
verwendet einen nicht-standard-Rundung routine für die angezeigte Dauer.)Beispiel-code aus Antwort Wie man die Länge einer audio-Datei in iOS?. Dies ist die beste Antwort.
AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:audioFileURL options:nil]; CMTime audioDuration = audioAsset.duration; float audioDurationSeconds = CMTimeGetSeconds(audioDuration);