在iPhone上下载/播放静态音频文件
我有一个iPhone应用程序,可以从网上下载多个WAV文件,将生成的声音数据存储在手机上,以便在应用程序中播放。有时候这很好用,有时候我的声音有两个问题: 1) 下载的声音文件中有一些片段会以静态、损坏的噪音播放 2) 有时完整下载似乎没有发生,这意味着二进制数据无法识别为合法的声音文件,并阻塞了我的播放库(FMOD),导致崩溃 我正在使用一个NSURLConnection来通过附加从连接接收到的数据来建立数据,如苹果的文档中所述。我的问题是:如何编写下载代码以确保所有文件都能下载,并且下载时不会出现损坏/噪音 事实:在iPhone上下载/播放静态音频文件,iphone,Iphone,我有一个iPhone应用程序,可以从网上下载多个WAV文件,将生成的声音数据存储在手机上,以便在应用程序中播放。有时候这很好用,有时候我的声音有两个问题: 1) 下载的声音文件中有一些片段会以静态、损坏的噪音播放 2) 有时完整下载似乎没有发生,这意味着二进制数据无法识别为合法的声音文件,并阻塞了我的播放库(FMOD),导致崩溃 我正在使用一个NSURLConnection来通过附加从连接接收到的数据来建立数据,如苹果的文档中所述。我的问题是:如何编写下载代码以确保所有文件都能下载,并且下载时不
- 下载是从AmazonS3进行的李>
- 它们的最大大小约为半兆字节李>
- 它们在服务器上没有损坏——也就是说,即使在手机上出错,它们在浏览器中也能正常播放
- (void)downloadOutstandingFileSounds{
NSArray *theFiles = [File listOfDownloadableOpponentfiles];
if ([theFiles count] > 0) {
NSLog(@"Updating %d new files...", [theFiles count]);
for (File *file in theFiles) {
self.theFile = file;
NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:file.publicUrl]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
currentFileDataContainer = [[NSMutableData data] retain];
}else {
NSLog(@"failed attempt to download resource at: %@", file.publicUrl);
}
}
[[NSNotificationCenter defaultCenter] postNotificationName:@"OutstandingFileSoundsDownloaded" object:self];
}
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
[currentFileDataContainer setLength:0];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
[connection release];
[currentFileDataContainer release];
NSLog(@"Connection failed! Error - %@ %@",
[error localizedDescription],
[[error userInfo] objectForKey:NSErrorFailingURLStringKey]);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSMutableData *)data{
[currentFileDataContainer appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"Success! Received %d bytes of file data", [currentFileDataContainer length]);
self.theFile.fileSoundData = currentFileDataContainer;
[self.theFile save];
NSLog(@"Downloadable files count: %d", [[File listOfDownloadableOpponentfiles] count]);
self.theFile = nil;
[File clearCache];
}
我看不出你的方法有什么不对的地方,但看看AsiTRequest库,它可以用来排队下载并管理错误。我看不出你的方法有什么不对的地方,但是看看AsitpRequest库,它可以用来对大量下载进行排队并管理错误。Oh cool。我曾经使用过ASI,但从未需要它来解决这种情况下的问题。我喜欢ASI的操作队列方面,但我认为它的gzip支持可能是真正能够解决我这里的问题的东西——谢谢你让我回到它。顺便说一句,你似乎问了很多问题,但没有接受任何答案。你应该回顾你所问的,并接受正确的答案(假设有一个):这就是这个网站的内容!“回答你的问题”按钮就是这么做的吗?我正在寻找如何做到这一点(接受)。我会更仔细地看。:-)ASI为我解决了这个问题。我没有看过代码,但我怀疑它只是在传输过程中更好地挽救了错误。ASINetworkQueue类非常好。我肯定会更经常地使用这个图书馆。它甚至有一些对S3API的临时支持!哦,酷。我曾经使用过ASI,但从未需要它来解决这种情况下的问题。我喜欢ASI的操作队列方面,但我认为它的gzip支持可能是真正能够解决我这里的问题的东西——谢谢你让我回到它。顺便说一句,你似乎问了很多问题,但没有接受任何答案。你应该回顾你所问的,并接受正确的答案(假设有一个):这就是这个网站的内容!“回答你的问题”按钮就是这么做的吗?我正在寻找如何做到这一点(接受)。我会更仔细地看。:-)ASI为我解决了这个问题。我没有看过代码,但我怀疑它只是在传输过程中更好地挽救了错误。ASINetworkQueue类非常好。我肯定会更经常地使用这个图书馆。它甚至有一些对S3API的临时支持!