zoukankan      html  css  js  c++  java
  • AVAudioplayer时error解决 创建失败 ERror creating player: Error Domain=NSOSStatusErrorDomain Code=2003334207 "(null)"

    AVAudioplayer 有两个初始化方法:

    1、[[AVAudioPlayer alloc] initWithData:musicData error&e];
    2、[[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error];
    第一种是使用将音频文件的data文件初始化,但是data必须是一个完整的文件。
    第二种是从url获取,但是这里的url是本地的file URL。
     
     所以AVAudioplayer无法直接从网络url上获取音频文件,所以可以用:
    data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://.../file.mp3"]];
    将网络上音频down下来,再用initWithData初始化player。但是这样down下来的文件有时是不完整的,所以出现创建失败问题,出现:
    Error Domain=NSOSStatusErrorDomain Code=1954115647
    解决这个问题的方法就是将data保存在本地,在通过initWithContentsOfURL,找到该文件,这样就可以成功创建了。
    整个流程为:
    NSData *audioData = [NSData dataWithContentsOfURL:someURL]; 
    NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *filePath = [NSString stringWithFormat:@"%@/%@.mp3", docDirPath , fileName];
    [audioData writeToFile:filePath atomically:YES]; 
    NSError *error; 
    NSURL *fileURL = [NSURL fileURLWithPath:filePath]; 
    player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error];
    if (player == nil) 
    { NSLog(@"AudioPlayer did not load properly: %@", [error description]); }
    else
    { [player play]; }



    局限性:recorder,player简单易用,但是有局限性。
    对我项目影响最大的是,多次录音时,并播放时,会出现文件错误。
    在继续利用recorder,player的前提下,就需要将每次录音完成的文件进行数据追加。

    if ([[NSFileManager defaultManager] fileExistsAtPath:临时音频路径) {
    
          NSData *tempAudioData = [[NSData alloc] initWithContentsOfFile:临时音频路径];
    
          if ([[NSFileManager defaultManager] fileExistsAtPath:音频路径]) {
              NSMutableData *newAudioData = [NSMutableData data];
              NSData *audioData = [[NSData alloc] initWithContentsOfFile:[self configureAudioRecordFilePath:self.currentFileName]];
              [newAudioData appendData:audioData];
              [newAudioData appendData:tempAudioData];
              PADebug(@"data length:%zd", [newAudioData length]);
              [newAudioData writeToFile:音频路径 atomically:YES];
          }else
          {
              [tempAudioData writeToFile:[self configureAudioRecordFilePath:self.currentFileName] atomically:YES];
          }
          [[NSFileManager defaultManager]removeItemAtPath:音频路径 error:nil];
      }


     
     
  • 相关阅读:
    PNG文件格式具体解释
    opencv2对读书笔记——使用均值漂移算法查找物体
    Jackson的Json转换
    Java实现 蓝桥杯VIP 算法训练 装箱问题
    Java实现 蓝桥杯VIP 算法训练 装箱问题
    Java实现 蓝桥杯VIP 算法训练 单词接龙
    Java实现 蓝桥杯VIP 算法训练 单词接龙
    Java实现 蓝桥杯VIP 算法训练 方格取数
    Java实现 蓝桥杯VIP 算法训练 方格取数
    Java实现 蓝桥杯VIP 算法训练 单词接龙
  • 原文地址:https://www.cnblogs.com/tangyuanby2/p/5676809.html
Copyright © 2011-2022 走看看