Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iPhone上下载/播放静态音频文件_Iphone - Fatal编程技术网

在iPhone上下载/播放静态音频文件

在iPhone上下载/播放静态音频文件,iphone,Iphone,我有一个iPhone应用程序,可以从网上下载多个WAV文件,将生成的声音数据存储在手机上,以便在应用程序中播放。有时候这很好用,有时候我的声音有两个问题: 1) 下载的声音文件中有一些片段会以静态、损坏的噪音播放 2) 有时完整下载似乎没有发生,这意味着二进制数据无法识别为合法的声音文件,并阻塞了我的播放库(FMOD),导致崩溃 我正在使用一个NSURLConnection来通过附加从连接接收到的数据来建立数据,如苹果的文档中所述。我的问题是:如何编写下载代码以确保所有文件都能下载,并且下载时不

我有一个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的临时支持!