Как найти длину аудиофайла (в секундах) - PullRequest
5 голосов
/ 07 января 2011

(Цель C) Просто с помощью простого AudioServicesPlaySystemSoundID и его аналогов, но я не могу найти в документации, если уже есть способ найти длину аудиофайла.

Я знаю, что есть AudioServicesGetPropertyInfo, но это, кажется, возвращает байтовый буфер - аудио-файлы встраивают свою длину в себя, и я могу просто извлечь это с этим?

Или, возможно, есть формула, основанная на битрейте * fileSize для преобразования впродолжительность времени?

mIL3S

www.milkdrinkingcow.com

Ответы [ 3 ]

16 голосов
/ 08 января 2011

Согласно быстрому поиску в Google, существует формула:

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

Есть ли какая-то особая причина, по которой вы используете System Sound Services для воспроизведения звука?

Если вы используете AVAudioPlayer для обработки ваших звуков, вы можете сделать что-то вроде:

AVAudioPlayer * sound = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil];
sound.delegate = self;
sound.volume = 1;
NSLog([NSString stringWithFormat:@"%f", sound.duration]);
11 голосов
/ 30 октября 2013

пример кода из ответа Как узнать длительность аудио файла в iOS? .Это лучший ответ.

AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:audioFileURL options:nil];
CMTime audioDuration = audioAsset.duration;
float audioDurationSeconds = CMTimeGetSeconds(audioDuration);
0 голосов
/ 15 декабря 2012

См .:

Float64 fileDuration = PrepareFileAU (fileAU, fileFormat, audioFile);

См. Образец АЦП по адресу: http://developer.apple.com/library/mac/#samplecode/PlayFile/Introduction/Intro.html

без использования AVPlayer ...

...