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


 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM