在我的应用中,我在资源文件夹中添加了一个.flac
文件。我想将此.flac
文件发送给Google的语音识别服务......以下是我的代码:
NSURL* urlGoogle = [NSURL URLWithString:@"https://www.google.com/speech-api/v1/recognize"];
NSMutableURLRequest *urlGoogleRequest = [[NSMutableURLRequest alloc]initWithURL:urlGoogle];
[urlGoogleRequest setHTTPMethod:@"POST"];
[urlGoogleRequest addValue:@"audio/x-flac; rate=16000" forHTTPHeaderField:@"Content-Type"];
NSURLResponse* response = nil;
NSError* error = nil;
NSArray *docDirs = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [docDirs objectAtIndex:0];
NSString *path = [[docDir stringByAppendingPathComponent:@"surround88"]
stringByAppendingPathExtension:@"flac" ];
NSURL* url = [NSURL fileURLWithPath:path];
//Here I'm getting flacData value is nil
NSData *flacData = [NSData dataWithContentsOfURL:url]; //flacData = nil
[urlGoogleRequest setHTTPBody:flacData];
NSData* googleResponse = [NSURLConnection sendSynchronousRequest:urlGoogleRequest
returningResponse:&response
error:&error];
id jsonObject=[NSJSONSerialization JSONObjectWithData:googleResponse options:kNilOptions error:nil];
NSLog(@"Googles response is: %@",jsonObject);
由于我没有向服务器发送任何数据,因此我的回复为空。
我测试了其他第三方apis,如openears,dragon,ispeech等,并且不满意。
有人能帮助我如何进一步发展。这是实现谷歌语音识别功能的正确方法吗?任何帮助将不胜感激。
答案 0 :(得分:3)
由于您将文件放在资源文件夹中,因此您无法使用NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
找到该文件。这就是[NSData dataWithContentsOfURL:url]
返回nil
的原因。
您的文件现已放入Bundle中,因此请尝试使用以下文件加载文件内容:
NSURL *url = [[NSBundle mainBundle] URLForResource:@"surround88" withExtension:@"flac"];
NSData *flacData = [NSData dataWithContentsOfURL:url];
编辑:根据以下评论
确保该文件是您正在构建的目标的成员。换句话说:
使用上面的测试项目,我能够从.flac文件成功创建一个NSData对象。