当我点击按钮时,每次都会加载音频。如果音频已经上传,如何立即播放音频?
- (void) song{
if (_index1 == 0) {
NSString *stringURL = @"https://drive.google.com/uc?export=download&id=0B6zMam2kAK39UjJuTHB5QWRuRU0";
NSURL *url = [NSURL URLWithString:stringURL];
NSData *urlData = [NSData dataWithContentsOfURL:url];
if ( urlData )
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"music.mp3"];
[urlData writeToFile:filePath atomically:YES];
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:filePath] error:nil];
}
}
}
答案 0 :(得分:0)
您的代码始终保存到文档目录中的“music.mp3”文件中。
(你应该使用NSString方法来处理路径而不是stringWithFormat。看看stringByAppendingPathComponent
。它处理为你构建路径字符串的细节。)
我认为你只处理一个声音文件呢?
如果要检查文件是否存在,则需要创建NSFileManager
的实例并使用其中一种fileExists
方法,例如fileExistsAtPath
。如果该文件存在,请跳过下载并只需加载并播放该文件。
请注意,您不应使用dataWithContentsOfURL从Web下载文件。这是一个同步调用,会阻止UI直到下载完成。您应该使用NSURLSession
代替。您可以创建NSURLDownloadTask
并将文件直接下载到磁盘,然后在下载完成后调用一段代码。
查看NSURLSession
sharedSession
和downloadTaskWithURL
方法。
Ray Wenderlich有一个关于使用NSURLSession
和NSURLSessionDownloadTask
: