2014-09-26 15 views
7

Sto cercando di ottenere la durata dei file audio per il taglio di loro, io sto usando il codice qui sotto,AVURLAsset ritorna durata come 0

audioAsset = [AVURLAsset assetWithURL:itemURL]; 

CMTime assetTime = [audioAsset duration]; 
Float64 duration = CMTimeGetSeconds(assetTime); 

quando fornisco itemURL di qualsiasi file audio della libreria multimediale, ho ottenere la durata corretta, e quindi sono in grado di tagliare il file audio. Quindi salvi il file audio ritagliato nella directory dei documenti. Ma quando provo a tagliare il file già ritagliato lo stesso codice mi restituisce 0 come durata. Tuttavia, sono in grado di riprodurre il file tagliato e ottenere la durata utilizzando AVAudioPlayer, ma qual è il problema con AVURLAsset non riesco a capire.

Qualcuno può aiutare? Ho già provato quasi tutte le risposte di tale domanda in StackOverflow.

risposta

0

Prova come seguire .....

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *getAudioPath = [documentsDirectory stringByAppendingPathComponent:@"song.mp3"]; 
NSURL *finalUrl=[[NSURL alloc]initFileURLWithPath:getAudioPath]; 
NSLog(@"finalUrl===%@",finalUrl); 
AVURLAsset *asset = [AVURLAsset assetWithURL: finalUrl]; 
duration = CMTimeGetSeconds(asset.duration); 
NSLog(@"duration==%f",duration); 
+0

Sì, la La stessa cosa che sto provando la prima parte del tuo codice è in un altro metodo nel mio caso e lì sto ricevendo l'URL proprio come hai fatto tu, quindi non è il prblem. –

+0

ho implementato quel codice..e ho ottenuto la durata di mp3 nel registro .... – Bhoomi

-1

Prova questa ....

AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:Yoururl options:nil]; 
CMTime time = asset.duration; 
double durationInSeconds = CMTimeGetSeconds(time); 
int minutes = floor(durationInSeconds/60); 
int seconds = round(durationInSeconds - (minutes * 60)); 
NSString * duration = [NSString stringWithFormat:@"%i:%i",minutes,seconds]; 
NSLog(@"Duration : %@", duration); 
+0

Hai letto anche la domanda? Ha detto che la durata era 0. La formattazione in minuti e secondi non fa assolutamente alcuna differenza. – JRod

10

Probabilmente avete utilizzato

NSURL *itemPathURL = [NSURL URLWithString:outPath]; 

invece di

NSURL *itemPathURL = [NSURL fileURLWithPath:outPath]; 
+0

grazie! Solo ... grazie. – mark

0

Penso che AVURLAsset abbia bisogno di conoscere l'estensione di tipo del file per calcolarne la durata. Probabilmente stai archiviando il tuo file come {fileName} e non come {fileName}.{extension}.

Se si esegue il seguente codice con yourFileName senza estensione si ottiene *** Could not find format reader for URL, e valore di ritorno 0.

import AVFoundation 

let fileName = *yourFileName* 
let url = NSURL(fileURLWithPath: fileName) 
let asset = AVURLAsset(URL: url, options: nil) 
println(asset.duration.value.description) 
1

per SWIFT 3.0 e versioni successive

importazione AVFoundation

let asset = AVAsset(url: URL(fileURLWithPath: ("Your File Path here")!)) 
    let totalSeconds = Int(CMTimeGetSeconds(asset.duration)) 
    let minutes = totalSeconds/60 
    let seconds = totalSeconds % 60 
    let mediaDuration = String(format:"%02i:%02i",minutes, seconds) 
+0

È inoltre possibile utilizzare asset.duration.seconds –

0

per il mio caso, il nome del file è extensi su devono essere riconosciuti, come ".mp3". in caso contrario, verrà restituito 0.

... diamo asset = AVURLAsset (url: URL (fileURLWithPath: filefullname), opzioni: nil) ... asset.duration ...

Problemi correlati