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];
      }


     
     
  • 相关阅读:
    指令到底是什么?机器码又是什么?
    汇编基础最后一篇--机器语言指令
    剑指OFFER----面试题34. 二叉树中和为某一值的路径
    剑指OFFER----面试题33. 二叉搜索树的后序遍历序列
    剑指OFFER----面试题32
    剑指OFFER----面试题31. 栈的压入、弹出序列
    剑指OFFER----面试题30. 包含min函数的栈
    剑指OFFER----面试题29. 顺时针打印矩阵
    剑指OFFER----面试题28. 对称的二叉树
    剑指OFFER----面试题27. 二叉树的镜像
  • 原文地址:https://www.cnblogs.com/tangyuanby2/p/5676809.html
Copyright © 2011-2022 走看看