将音频文件保存到NSURL

3

我希望保存TTS SDK生成的音频文件。 我不确定使用NSURL路径的正确方法。

以下是代码,但结果显示“NO”。 如果我不尝试保存音频文件,MyAcaTTS表现良好。

NSString *FileNamePath = [[NSBundle mainBundle] pathForResource:@"testAudio" ofType:@"aiff"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appSettingsPath = [documentsDirectory stringByAppendingPathComponent:FileNamePath];
NSURL *url=[[NSURL alloc]initWithString:appSettingsPath];

BOOL result =  [MyAcaTTS_ startSpeakingString:@"testing" toURL:url];

Acapela iPhone SDK 文档。

6.2.3. startSpeakingString:toURL:

  • (BOOL)startSpeakingString:(NSString *)string toURL:url;

描述

开始将字符串合成为声音(AIFF)文件。 当字符串合成正常完成或被停止时,消息 speechSynthesizer:didFinishSpeaking: 会发送给委托。 参数 string 要合成的文本。当为空或者为nil时,不进行合成。 url 输出声音文件在文件系统中的位置。 返回值 成功开始合成返回YES,否则返回NO。

http://www.ecometrixem.com/cms-assets/documents/44729-919017.acapela-for-iphone.pdf

1个回答

2
在您的代码中,有两个需要考虑的问题:
  1. 这行代码:NSString *FileNamePath = [[NSBundle mainBundle] pathForResource:@"testAudio" ofType:@"aiff"]; 不是必要的,因为它返回文件的完整路径,而您只需要最后一部分:"testAudio.aiff"

  2. 您使用了构造函数来构建URL对象,该构造函数接受具有有效协议前缀(如“http://”或“ftp://”)的字符串,但您需要另一个名为initFileURLWithPath:的构造函数。

所以,结合上述内容,您的代码可能如下所示:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appSettingsPath = [documentsDirectory stringByAppendingPathComponent:@"testAudio.aiff"];
NSURL *url=[[NSURL alloc]initFileURLWithPath:appSettingsPath];

BOOL result =  [MyAcaTTS_ startSpeakingString:@"testing" toURL:url];

谢谢!它终于创建了一个文件,但仍然没有声音,只是一个空的AIFF文件。BOOL结果出现错误。也许我需要使用另一种文件类型... - Umeumeume
1
实际上,这是因为MyAcaTTS在代码之前正在朗读另一段文本,现在它已经正常工作了,非常感谢! - Umeumeume
如果我们有两个语句调用 [self.MyAcaTTS startSpeakingString:text];,其中第二个语句写入文件,则它不起作用,否则,该文件将被创建并包含音频内容。 NSURL 的构建似乎不是问题所在。 [self.MyAcaTTS startSpeakingString:phrase toURL:[NSURL fileURLWithPath:filePath]]; - Thiru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接