(Objective C) 只使用簡單的AudioServicesPlaySystemSoundID及其對應物,但在文檔中找不到已存在的方法來查找音頻文件的長度。如何查找音頻文件的長度(以秒爲單位)
我知道有AudioServicesGetPropertyInfo,但似乎返回一個字節緩衝區 - 做音頻文件嵌入自己的長度,我可以提取它與此?
或者有可能是一個公式基於比特率* fileSize轉換爲長度的時間?
mIL3S
www.milkdrinkingcow.com
(Objective C) 只使用簡單的AudioServicesPlaySystemSoundID及其對應物,但在文檔中找不到已存在的方法來查找音頻文件的長度。如何查找音頻文件的長度(以秒爲單位)
我知道有AudioServicesGetPropertyInfo,但似乎返回一個字節緩衝區 - 做音頻文件嵌入自己的長度,我可以提取它與此?
或者有可能是一個公式基於比特率* fileSize轉換爲長度的時間?
mIL3S
www.milkdrinkingcow.com
根據快速谷歌搜索,有一個公式:
length-of-time (duration in seconds) = fileSize (in bytes)/bit-rate (bits/secs)*8
有你使用系統聲音服務於任何特別的理由播放聲音?
如果使用AVAudioPlayer來處理你的聲音,你可以這樣做:
AVAudioPlayer * sound = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil];
sound.delegate = self;
sound.volume = 1;
NSLog([NSString stringWithFormat:@"%f", sound.duration]);
看到:
Float64 fileDuration = PrepareFileAU (fileAU, fileFormat, audioFile);
看到ADC採樣: http://developer.apple.com/library/mac/#samplecode/PlayFile/Introduction/Intro.html
不使用AVPlayer。 ..
但是,這不僅適用於Mac OS X?問題用iPhone標記。 – newenglander 2013-07-03 13:40:08
來自a的示例代碼請撥打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);
這是實現這個IMO的最佳通用方法。 – theLastNightTrain 2014-06-23 15:13:51
雅,我想我應該只使用AVAudioPlayer。我想因爲我只是在播放一些小聲音,所以AudioServices還好;現在我需要更多的信息,我應該切換。儘管感謝您的公式!我雖然可能有這樣的事情。 mIL3S – 2011-01-07 23:04:43