回答
您可以使用音頻文件服務功能。有一個屬性應該給你預計的持續時間。代碼:
NSURL *afUrl = [NSURL fileURLWithPath:soundPath];
AudioFileID fileID;
OSStatus result = AudioFileOpenURL((CFURLRef)afUrl, kAudioFileReadPermission, 0, &fileID);
UInt64 outDataSize = 0;
UInt32 thePropSize = sizeof(UInt64);
result = AudioFileGetProperty(fileID, kAudioFilePropertyEstimatedDuration, &thePropSize, &outDataSize);
AudioFileClose(fileID);
您可以查看文檔here
謝謝,但我不明白,爲什麼我得到每一個outDataSize等於0的時間? – 2009-08-07 20:22:12
謝謝你的解決方案,我發現問題出在哪裏。 – 2009-08-07 20:27:30
嘿,這是不公平的,使用實際的知識來獲得支票,而不是模糊的關於你從來沒有用過的操作系統的猜測。 :) – MusiGenesis 2009-08-07 20:31:39
如果你知道有問題的音頻文件(採樣率,比特深度,通道數)的事,那是一個未壓縮格式(WAV/AIFF),那麼你可以計算從文件大小的/近似/時間:
length_in_seconds =(file_length-guess_100_bytes_for_header)/(samplerate *(bitdepth * channel_count/8))
標題爲100個字節?無論發生在規範44? :) – MusiGenesis 2009-08-07 20:02:42
任何數量的原因;)BWF元數據,AIFF頭? – 2009-08-07 20:15:18
14年後我應該知道更多,但就在上個月我花了半天的時間試圖找出我的聲音開始處的小點擊來自哪裏。我正在使用假定只有44字節標題的快速和骯髒的方法。我又一次吸取了教訓。 – MusiGenesis 2009-08-07 20:36:49
它取決於文件類型。如果是WAV文件,您可以找到文件的標題並確定播放時間。如果它是一種壓縮格式(* .mp3等),你最好堅持你提到的方法。
正確的代碼
NSURL *afUrl = [NSURL fileURLWithPath:soundPath];
AudioFileID fileID;
OSStatus result = AudioFileOpenURL((CFURLRef)afUrl, kAudioFileReadPermission, 0, &fileID);
Float64 outDataSize = 0;
UInt32 thePropSize = sizeof(Float64);
result = AudioFileGetProperty(fileID, kAudioFilePropertyEstimatedDuration, &thePropSize, &outDataSize);
AudioFileClose(fileID);
outDataSize應Float64不UINT64。
如果任何人登陸這裏尋找一種方式來獲得的音頻和視頻文件的時間,看看這個答案另一篇文章,這反而使用AVAsset
代替:
https://stackoverflow.com/a/7052147/381233
使用AudioFileGetProperty
(像其他兩個主要的答案在這裏),以獲得的A/V文件的時間爲我的設備上的幾個.MOV文件沒有工作(結果總是0),同時採用AVAsset
的解決方案得到了持續時間我的設備上的所有音頻和視頻文件。
(有趣的是,然而,從兩個解決方案的持續時間有時1秒以上,在實際AVAudioPlayer
的UI顯示。最有可能的AVAudioPlayer
使用爲顯示持續時間的非標準舍入程序。)
來自回答How to get the duration of an audio file in iOS?的示例代碼。這是最好的答案。
AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:audioFileURL options:nil]; CMTime audioDuration = audioAsset.duration; float audioDurationSeconds = CMTimeGetSeconds(audioDuration);
與斯威夫特結合AVAudioPlayer變得一樣簡單(我下面遷移境界表,但你的想法):
import AVFoundation
let resource = old!["filename"] as? String
let afUrl = NSBundle.mainBundle().URLForResource(resource, withExtension: nil)
let player = try! AVAudioPlayer(contentsOfURL: afUrl!)
new!["duration"] = Double(player.duration)
AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:mp3_url options:nil];
[audioAsset loadValuesAsynchronouslyForKeys:@[@"duration"] completionHandler:^{
CMTime audioDuration = audioAsset.duration;
float audioDurationSeconds = CMTimeGetSeconds(audioDuration);
NSLog(@"duration:%f",audioDurationSeconds);
}];
- 1. iPhone - 獲得線性PCM音頻文件的持續時間
- 2. AMR音頻文件的持續時間
- 3. 獲取音頻文件的持續時間
- 4. 獲取音頻文件的持續時間
- 5. 如何提取音頻/視頻文件的持續時間?
- 6. 獲取AVFoundation視頻的持續時間
- 7. 獲取視頻的持續時間
- 8. 如何獲取使用FFMPEG上傳後的音頻文件的持續時間
- 9. 在ffmpeg中獲取音頻的持續時間在php
- 10. 使用Dropzone.js獲取視頻文件的持續時間
- 11. Node-Webkit從avi文件路徑獲取視頻持續時間
- 12. MP3/wav音頻文件的持續時間
- 13. 使用ProgressBar四捨五入音頻文件的持續時間
- 14. 音頻持續時間返回0.0
- 15. HTML5音頻持續時間問題
- 16. libav給音頻持續時間爲負
- 17. 加入多個音軌時的音頻持續時間匹配
- 18. 源視頻和低頻音頻的持續時間不同
- 19. 如果視頻持續時間長於音頻持續時間,如何重複播放音軌
- 20. 如何使用C#獲得視頻文件的持續時間?
- 21. 如何獲得視頻閃存文件的持續時間?
- 22. 在Java/Android中提取3GP視頻文件的持續時間
- 23. 如何在iPhone中存儲捕獲的視頻的時間段(持續時間)?
- 24. iphone MPMoviePlayerViewController:提取總持續時間
- 25. 有沒有辦法使用ColdFusion獲取視頻文件的持續時間?
- 26. 如何獲取上傳的視頻的持續時間?
- 27. 如何使用API獲取視頻的持續時間Metacafe
- 28. angular2獲取上傳前的視頻持續時間
- 29. 獲取視頻的準確持續時間
- 30. 上傳後獲取視頻的持續時間
的可能的複製[如何獲得在iOS中的音頻文件的持續時間?](http://stackoverflow.com/questions/5219379/how-to-get-the-duration-of-an-audio-file-in-ios) – user471651 2016-04-21 01:06:26