最近使用tencent的IM由機器段向手機端傳輸音頻文件並在手機端播放該文件,由於我們項目中的機器錄音設備的錄音類型有mp3、wav這2種。在使用AVAudioPlayer播放時發現,當錄音類型為wav時可以順利播放、但是當錄音類型切換為mp3時,發現沒有聲音。
- 檢查log發現
-
1 NSError *error; 2 self.myPlay = [[AVAudioPlayer alloc] initWithData:vData error:&error];
error => Domain=NSOSStatusErrorDomain Code=1954115647
檢查發現,code=1954115647的原因是:跟文件的檢測有關、在下載文件時不完整,所以創建失敗了!解決方案如下:
- 可以現將文件存儲至本地再使用文件。如下:
-
1 NSData *audioData = [NSData dataWithContentsOfURL:someURL]; 2 NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0]; 3 NSString *filePath = [NSString stringWithFormat:@"%@/%@.mp3", docDirPath , fileName]; 4 [audioData writeToFile:filePath atomically:YES]; 5 NSError *error; 6 NSURL *fileURL = [NSURL fileURLWithPath:filePath]; 7 player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error]; 8 if (player == nil) 9 { NSLog(@"AudioPlayer did not load properly: %@", [error description]); } 10 else 11 { [player play]; }
- 有的時候可能並不需要保存文件至本地,播放完成即可。如下:
使用以下創建方法
-
1 NSError *error; 2 self.myPlay = [[AVAudioPlayer alloc] initWithData:vData fileTypeHint:AVFileTypeWAVE error:&error];//AVFileTypeWAVE 為音頻格式
替換
-
1 NSError *error; 2 self.myPlay = [[AVAudioPlayer alloc] initWithData:vData error:&error];
