SpeakHere示例不能播放从互联网加载的声音
我想播放从互联网加载的声音文件,所以我尝试从iPhone SDK SpeakHere示例开始。我录制了声音,然后保存并上传到互联网,我可以下载该文件并从声音工具中无问题地播放。但是当我尝试从SpeakHere播放该URL时,出现错误Program received signal: “EXC_BAD_ACCESS”
。SpeakHere示例不能播放从互联网加载的声音
经过跟踪后,我发现在-[AudioPlayer calculateSizesFor:]
,它将bufferByteSize
设置为一个巨大的数字806128768,这导致缓冲区分配失败。
而且,由于在
返回maxPacketSize
是806128768.
我想知道如何使AudioFileGetProperty
工作。
我使用这种方式设置在-[AudioViewController playOrStop]
方法的网址:
// AudioPlayer *thePlayer = [[AudioPlayer alloc] initWithURL: self.soundFileURL];
AudioPlayer *thePlayer = [[AudioPlayer alloc] initWithURL:
[NSURL URLWithString: @"http://chineseresume.com/localbiz/uploads/myfilename_7_Recording.caf"]];
任何建议是非常值得欢迎的。
是的,你需要使用Audio File Stream Services直接从互联网上玩。
我找到了“AudioFileStreamExample”的例子是有用的,它应安装在
/Developer/Examples/CoreAudio/Services/AudioFileStreamExample/
此外,马特·加拉格尔有一个名为“Streaming and playing an MP3 stream”的文章,其中包括iPhone示例代码。我没有仔细看过它,但似乎它可能对您有所帮助。
我想出了一个解决方法。即将互联网上的内容复制到本地文件,然后从该本地文件播放声音。并出现解决问题。
不完美,但只是工作。如果有人有真正的解决方案,请让我知道。
这里是从互联网复制到本地文件的代码。
-(CFURLRef)saveURL:(NSString *)urlString {
NSURL *url = (NSURL*)[[NSURL alloc] initWithString:urlString];
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
NSArray *filePaths = NSSearchPathForDirectoriesInDomains ( NSDocumentDirectory, NSUserDomainMask, YES );
NSString *recordingDirectory = [filePaths objectAtIndex: 0];
CFStringRef fileString = (CFStringRef) [NSString stringWithFormat: @"%@/BufferFile.caf", recordingDirectory];
NSLog(@"fileString = %@" , fileString);
// create the file URL that identifies the file that the recording audio queue object records into
CFURLRef fileURL = CFURLCreateWithFileSystemPath ( NULL, fileString, kCFURLPOSIXPathStyle, false);
SInt32 err = 0;
CFURLWriteDataAndPropertiesToResource (
fileURL, (CFDataRef)data, nil, &err);
return fileURL;
}
我认为主要的问题是,你正在使用涉及的AudioFile对象(在磁盘上的本地音频文件),但是当你的代码从您要使用AudioFileStream网络,它具有加载音频它自己的一组API调用使用诸如AudioFileStreamOpen
,等。