gpt4 book ai didi

ios - 获取 NSURL 到子目录中的文件

转载 作者:行者123 更新时间:2023-11-28 22:24:05 26 4
gpt4 key购买 nike

我正在集成用于语音消息传递的第三方 SDK。它将音频文件保存到 Documents/audio/。我使用 iFunBox 在我的测试设备上查看了 bundle ,发现这些文件的名称如下:“b3abwx78...wav”。没有文件扩展名,名称的末尾只是“wav”,而不是“.wav”,这可能会导致我的问题。我使用的 SDK 是专有的,无法让我控制文件的保存方式。

该文件被 SDK 引用为“elem.text”,其记录如下:“audio://a8c0cd0c4138d66cc32cbdfb3c213f3bwav”

所以,我要做的就是将该文件加载到 AVAudioPlayer 中并播放它。到目前为止,这是我正在尝试的。 “path”记录为 null,URL 也是,所以显然我做错了什么:

-(void)playVoiceMail:(NSString *)filename
{
NSError *error;
NSString *escapedFilename = [filename stringByReplacingCharactersInRange:NSMakeRange(0, 8) withString:@""];
NSLog(@"escaped filename: %@", escapedFilename);

NSString *path = [[NSBundle mainBundle] pathForResource:escapedFilename
ofType:nil
inDirectory:@"Documents/audio"];

NSLog(@"path: %@", path);

NSURL *URL = [NSURL URLWithString:path];

NSLog(@"URL: %@", URL);


AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:URL
error: &error];

NSLog(@"Player url: %@", player.url);

if (error)
NSLog(@"ERROR: %@", error.localizedDescription);

if (!player.playing)
if (![player play])
NSLog(@"ERROR playing");
}

最佳答案

您是否存储了音频文件?如果它们存储在您的应用程序包中,请尝试这样的代码:

...
NSString *path = [[NSBundle mainBundle] pathForResource:escapedFilename
ofType:nil];
...

如果它们存储在 Documents 文件夹中,您应该像这样访问它们:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"filename"];
NSURL *url ....

编辑:如果您的 url 不为空,则问题是使用 ARC,AudioPalyer 实例在 playVoiceMail 方法结束后被释放。你应该像这样创建一个强大的属性:

@property (nonatomic, strong) AVAudioPlayer *player;

...
self.player= [[AVAudioPlayer alloc] initWithContentsOfURL:URL
error: &error];

[self.player play];
...

关于ios - 获取 NSURL 到子目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19480890/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com