2011-01-07 23 views
5

(Mục tiêu C) Chỉ cần sử dụng đơn giản AudioServicesPlaySystemSoundID và các đối tác của nó, nhưng tôi không thể tìm thấy trong tài liệu nếu đã có cách tìm chiều dài của tệp âm thanh .Cách tìm chiều dài của tệp âm thanh (tính bằng giây)

Tôi biết có AudioServicesGetPropertyInfo, nhưng điều đó dường như trả về một byte-bộ đệm - các tệp âm thanh có nhúng chiều dài của chúng vào bản thân và tôi có thể giải nén nó bằng cách này không?

Hoặc có thể có một công thức dựa trên tốc độ bit * fileSize để chuyển đổi thành thời lượng không?

mIL3S

www.milkdrinkingcow.com

Trả lời

14

Theo một tìm kiếm Google nhanh chóng, có một công thức:

length-of-time (duration in seconds) = fileSize (in bytes)/bit-rate (bits/secs)*8 

Có bất kỳ lý do cụ thể bạn đang sử dụng Dịch vụ Hệ thống âm thanh để chơi một âm thanh?

Nếu bạn sử dụng AVAudioPlayer để xử lý âm thanh của bạn, bạn có thể làm điều gì đó như:

AVAudioPlayer * sound = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil]; 
sound.delegate = self; 
sound.volume = 1; 
NSLog([NSString stringWithFormat:@"%f", sound.duration]); 
+0

Ya, tôi cho rằng tôi chỉ nên sử dụng AVAudioPlayer. Tôi đoán kể từ khi tôi chỉ chơi một vài âm thanh nhỏ, AudioServices vẫn ổn; bây giờ tôi cần thêm thông tin từ nó, tôi có lẽ nên chuyển qua. Cảm ơn cho công thức mặc dù! Tôi mặc dù có thể có một cái gì đó như thế. mIL3S –

11

mã mẫu từ nswer How to get the duration of an audio file in iOS?. Đây là câu trả lời hay nhất.

AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:audioFileURL options:nil]; CMTime audioDuration = audioAsset.duration; float audioDurationSeconds = CMTimeGetSeconds(audioDuration);

+0

Đây là cách tổng quát tốt nhất để đạt được IMO này. – theLastNightTrain

Các vấn đề liên quan