获取NSURL到子目录中的文件
我正在集成用于语音消息的第三方SDK。它将音频文件保存到文档/音频/。我在我的测试设备上使用iFunBox浏览了这个软件包,发现这些文件的名字是这样的:“b3abwx78 ... wav”。没有文件扩展名,名称的末尾只是“wav”,而不是“.wav”,这可能会导致我的问题。我使用的SDK是专有的,不能控制文件的保存方式。获取NSURL到子目录中的文件
该文件由SDK为“elem.text”,它记录的是这样的引用:“音频:// a8c0cd0c4138d66cc32cbdfb3c213f3bwav”
所以,我想要做的就是简单地加载该文件放入AVAudioPlayer并播放它。这是我到目前为止所尝试的。 “路径”日志为空,因为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];
...
如果它们被存储在文档文件夹,您应该访问它们是这样的:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"filename"];
NSURL *url ....
编辑:如果您的网址不是null,那么问题在于,在PlayVoiceMail方法到达结束之后,AudioPalyer实例被释放。您应该创建一个如下所示的强大属性:
@property (nonatomic, strong) AVAudioPlayer *player;
...
self.player= [[AVAudioPlayer alloc] initWithContentsOfURL:URL
error: &error];
[self.player play];
...
谢谢,这绝对让我更接近。我现在似乎正在获取一个加载到播放器中的URL,但我仍然听不到任何声音(是的,我确定我的音量已经上升,手机也没有静音,哈哈)。我的音频播放器的url属性如下所示:“Player url:/ var/mobile/Applications/FF99CE15-E04E-4ADD-985F-F23B3038FFAE/Documents/audio/ae321148ba09f8991a7abdb51ab9b022wav” 这种看法合适吗?任何想法为什么它不玩?也许我需要使用NSFileManager自己添加.wav扩展名? –
我认为你的问题是ARC。 playVoiceMail完成后,AudioPlayer对象将被释放。你应该为你的audion player声明一个属性。 @property(非原子,强大)AVAudioPlayer * audioPlayer;并用它来播放音频。看到我的编辑 – samir
但我认为这不重要,因为每次调用该方法时都会重新创建播放器。如果玩家在完成游戏后发布,应该没问题。无论如何,我会给它一个镜头。谢谢! –
您究竟在哪里保存文件?对于模拟器,它应该是/ Users/petersegerblom/Library/Application Support/iPhone Simulator/7.0/Applications/2CF53DC0-5C06-4810-9C01-78D5F6855688/ProjectName.app,这将是您的软件包的路径。 –