回答
您可以使用音頻文件服務功能。有一個屬性應該給你預計的持續時間。代碼:
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. Android如何獲取音頻文件的持續時間
- 4. 獲取音頻文件的持續時間
- 5. 獲取音頻文件的持續時間
- 6. 如何提取音頻/視頻文件的持續時間?
- 7. 如何獲得音頻文件的持續時間?
- 8. 如何獲得當音頻暫停HTML5音頻持續時間
- 9. 獲取AVFoundation視頻的持續時間
- 10. 獲取視頻的持續時間
- 11. 如何獲取使用FFMPEG上傳後的音頻文件的持續時間
- 12. 在ffmpeg中獲取音頻的持續時間在php
- 13. 獲取mxf文件的持續時間
- 14. Android從存儲中獲取所選音頻文件的持續時間
- 15. 如何使用Jquery獲取當前音頻文件的持續時間
- 16. 通過Microsoft DLL或實用程序獲取音頻文件的持續時間
- 17. 獲取相機拍攝的視頻持續時間iphone sdk
- 18. 使用Dropzone.js獲取視頻文件的持續時間
- 19. ios中的音頻流持續時間
- 20. 無法在chrome中獲取音頻持續時間 - js
- 21. 從.wav文件獲取持續時間
- 22. Node-Webkit從avi文件路徑獲取視頻持續時間
- 23. 檢查命令行上音頻文件的持續時間
- 24. Cordova Media Capture - 查找音頻文件的持續時間
- 25. 使用ProgressBar四捨五入音頻文件的持續時間
- 26. PHP限制音頻文件的持續時間?
- 27. 確定音頻文件的持續時間和格式
- 28. MP3/wav音頻文件的持續時間
- 29. libav給音頻持續時間爲負
- 30. HTML5音頻持續時間問題
的可能的複製[如何獲得在iOS中的音頻文件的持續時間?](http://stackoverflow.com/questions/5219379/how-to-get-the-duration-of-an-audio-file-in-ios) – user471651 2016-04-21 01:06:26