获取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"); 
} 
+0

您究竟在哪里保存文件?对于模拟器,它应该是/ Users/petersegerblom/Library/Application Support/iPhone Simulator/7.0/Applications/2CF53DC0-5C06-4810-9C01-78D5F6855688/ProjectName.app,这将是您的软件包的路径。 –

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

... 
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]; 
... 
+0

谢谢,这绝对让我更接近。我现在似乎正在获取一个加载到播放器中的URL,但我仍然听不到任何声音(是的,我确定我的音量已经上升,手机也没有静音,哈哈)。我的音频播放器的url属性如下所示:“Player url:/ var/mobile/Applications/FF99CE15-E04E-4ADD-985F-F23B3038FFAE/Documents/audio/ae321148ba09f8991a7abdb51ab9b022wav” 这种看法合适吗?任何想法为什么它不玩?也许我需要使用NSFileManager自己添加.wav扩展名? –

+1

我认为你的问题是ARC。 playVoiceMail完成后,AudioPlayer对象将被释放。你应该为你的audion player声明一个属性。 @property(非原子,强大)AVAudioPlayer * audioPlayer;并用它来播放音频。看到我的编辑 – samir

+0

但我认为这不重要,因为每次调用该方法时都会重新创建播放器。如果玩家在完成游戏后发布,应该没问题。无论如何,我会给它一个镜头。谢谢! –