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


 
 

AVAudioplayer时error解决 创建失败 ERror creating player: Error Domain=NSOSStatusErrorDomain Code=2003334207 "(null)"的更多相关文章

  1. AVAudioPlayer init 报错: Error Domain=NSOSStatusErrorDomain Code=1937337955

    Error Domain=NSOSStatusErrorDomain Code=1937337955 原因: 音频文件的格式不规范导致 对于iOS7以上的系统(含iOS7),在确定文件格式的情况下可以 ...

  2. 根据经纬度反向地理编译出地址信息(如果报错:Error Domain=kCLErrorDomain Code=8 "(null)")

    注意:Error Domain=kCLErrorDomain Code=8 "(null)" 如果出现这个错误  一定是 经纬度有问题   一定是 经纬度有问题 一定是 经纬度有问 ...

  3. Domain=NSOSStatusErrorDomain Code=1937337955 关于iOS录音AVAudioRecorder与音频播放AVAudioPlayer真机调试录音不能播放的问题

    error:Domain=NSOSStatusErrorDomain Code=1937337955 ,这个错误很常见, 原因是因为我们需要调用另外一个AVAudioPlayer 的初始化方法,来确定 ...

  4. Error Domain=NSOSStatusErrorDomain Code=1718449215 "The operation couldn’t be completed. (OSStatus error 1718449215.)"

    是在录音时,recoreder的录音格式不对.

  5. mysql主从同步失败Last_IO_Error: Got fatal error 1236 from master解决方法

    mysql教程主从同步失败Last_IO_Error: Got fatal error 1236 from master解决方法 遇到这样的错误如:“Last_IO_Error: Got fatal ...

  6. MySQL主从失败 错误Got fatal error 1236解决方法

    --MySQL主从失败 错误Got fatal error 1236解决方法 ----------------------------------------------------2014/05/1 ...

  7. redis启动出错 Creating Server TCP listening socket 127.0.0.1:6379: bind: No error解决办法

    windows下安装Redis第一次启动报错: [2368] 21 Apr 02:57:05.611 # Creating Server TCP listening socket 127.0.0.1: ...

  8. Jmeter+ant+Jenkins构建接口自动化测试时构建失败 提示:Fatal Error! 字符引用 "&#原因

    Jmeter+ant+Jenkins构建接口自动化测试时构建失败 提示:Fatal Error! 字符引用 "&#原因:接口响应数据中有&#

  9. 发布到远程存储库时遇到错误: Git failed with a fatal error.

    正在推送 master发布到远程存储库时遇到错误: Git failed with a fatal error.Authentication failed for 'http://1212121xxx ...

随机推荐

  1. oracle 时间格式修改

    1.临时修改时间格式第一种方式 :select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;第二种方式:alter session set n ...

  2. javascript设计模式学习之十六——状态模式

    一.状态模式的定义 状态模式的关键是区分事务内部和外部的状态,事务内部状态改变往往会带来事务的行为改变. 状态模式中有意思的一点是,一般我们谈到封装,都是优先封装对象的行为,而非对象的状态.但在状态模 ...

  3. 查看docker中container的ip

    使用命令 docker inspect 容器ID 然后过虑出 IPAddress 即可查看 Docker 的 IP docker inspect 容器ID | grep IPAddress

  4. Redo丢失场景和处理方法

    Redo丢失场景和处理方法 Type of Failure Status Column of V$LOG Action One member failed in multiplexed group N ...

  5. CPU boot up过程

    1.   CPU0 BOOT CPU1 BOOT 通过IPC互相通信 2.   CPU1 BOOT 完后,loop,等待IPC from CPU0 3.   cpu0 写IPC通知CPU1,cpu1 ...

  6. !!常见的上穿突破M20方式——突破还是试探的判断

    1和2相似之处在于M5<M20, 最大的区别是M20和M5之间的间距在放大还是缩小,如果是放大,大盘会先试探一下.如果越缩越小,大盘必须选择方向 但是必须注意的是,即使是夹角缩小,选在方向不一定 ...

  7. 多文件 定义全局变量的使用 extern

    extern 申明变量在其他文件中定义了.如果变量放在*.h头文件,其它cpp文件加载*.h头文件就会出现变量定义重复. 头文件 DHeah.h #include <iostream> u ...

  8. eclipse jsp 加载服务器tomcat

    1.window->Preferences

  9. 01分数规划POJ2976(简单模板题)

    Dropping tests Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7276   Accepted: 2523 De ...

  10. ORA-12154的原因

    一个很难想到的引起ORA-12154的原因         使用OracleClient.OracleConnection时(我连的是Oracle 9i,其他版本未知),如果你的执行目录太长或者有括号 ...