如何在 NSData 中存储 .flac 文件内容?
How to store .flac file content in NSData?
在我的应用程序中,我在我的资源文件夹中添加了一个 .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);
由于我没有向服务器发送任何数据,所以得到的响应是空的。
我已经测试了其他 3rd 方 api,如 openears、dragon、ispeech 等,但并不满意。
有人可以帮助我如何进行下一步。这是实现 google 语音识别功能的正确方法吗?任何帮助将不胜感激。
由于您将文件放在您的资源文件夹中,您将无法通过 NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
找到它。这就是 [NSData dataWithContentsOfURL:url]
返回 nil
的原因。
您的文件现在已放置在您的 Bundle 中,因此请尝试使用此加载文件的内容:
NSURL *url = [[NSBundle mainBundle] URLForResource:@"surround88" withExtension:@"flac"];
NSData *flacData = [NSData dataWithContentsOfURL:url];
编辑:基于下面的评论
确保该文件是您正在构建的目标的成员。换句话说:
- Select 你的 .flac 文件
- 确保选中您正在测试的目标的复选框
使用上面的测试项目,我能够从 .flac 文件成功创建一个 NSData 对象。
在我的应用程序中,我在我的资源文件夹中添加了一个 .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);
由于我没有向服务器发送任何数据,所以得到的响应是空的。
我已经测试了其他 3rd 方 api,如 openears、dragon、ispeech 等,但并不满意。
有人可以帮助我如何进行下一步。这是实现 google 语音识别功能的正确方法吗?任何帮助将不胜感激。
由于您将文件放在您的资源文件夹中,您将无法通过 NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
找到它。这就是 [NSData dataWithContentsOfURL:url]
返回 nil
的原因。
您的文件现在已放置在您的 Bundle 中,因此请尝试使用此加载文件的内容:
NSURL *url = [[NSBundle mainBundle] URLForResource:@"surround88" withExtension:@"flac"];
NSData *flacData = [NSData dataWithContentsOfURL:url];
编辑:基于下面的评论
确保该文件是您正在构建的目标的成员。换句话说:
- Select 你的 .flac 文件
- 确保选中您正在测试的目标的复选框
使用上面的测试项目,我能够从 .flac 文件成功创建一个 NSData 对象。