Ios 如何从NSData创建AVAudioPCMBuffer
我从流接收mp3并转换pcm数据。我尝试使用AVAudioEngine,但无法创建没有文件的AVAudioPCMBufferIos 如何从NSData创建AVAudioPCMBuffer,ios,avaudioengine,avaudiopcmbuffer,Ios,Avaudioengine,Avaudiopcmbuffer,我从流接收mp3并转换pcm数据。我尝试使用AVAudioEngine,但无法创建没有文件的AVAudioPCMBuffer - (void)playAudio:(NSNotification *)notification { self.runAudioThread = YES; dispatch_queue_t globalDispatchDefaultQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKG
- (void)playAudio:(NSNotification *)notification {
self.runAudioThread = YES;
dispatch_queue_t globalDispatchDefaultQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
[_player play];
dispatch_async(globalDispatchDefaultQueue, ^{
while (_runAudioThread) {
if (_rawDataArray.count > BUFFER_COUNT) {
NSMutableData *rawData = [[NSMutableData alloc] init];
NSArray *rawDataArray = _rawDataArray.copy;
@synchronized(_rawDataArray) {
[self.rawDataArray removeAllObjects];
}
for (AudioPacketInfo *audioPacketInfo in rawDataArray) {
[rawData appendData:audioPacketInfo.data];
}
NSData *mp3Data = [AudioUtil makeMP3Data:rawData];
if (mp3Data) {
NSData *pcmData = [AudioUtil convertToPCMWithData:mp3Data];
if (pcmData.length > 0) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = paths[0];
NSString *filePath = [documentsDirectory stringByAppendingString:@"/temp.mp3"];
[[NSFileManager defaultManager] createFileAtPath:filePath contents:mp3Data attributes:nil];
AVAudioFile *audioFile = [[AVAudioFile alloc] initForReading:[NSURL URLWithString:filePath] error:nil];
AVAudioPCMBuffer *buffer = [[AVAudioPCMBuffer alloc] initWithPCMFormat:audioFile.processingFormat frameCapacity:(AVAudioFrameCount)audioFile.length];
[audioFile readIntoBuffer:buffer error:nil];
[_player scheduleBuffer:buffer completionHandler:nil];
}
}
}
}
});
}
我该怎么做
您会遇到哪些错误?我们需要更多的信息,请尽可能多地发布信息,并在代码中发布您的信息,而不是链接到它。@Clayton更新我的问题。您会遇到什么错误,请更具体或更清楚?具体什么不起作用。我播放mp3或pcm数据时没有创建文件。@Clayton我尝试使用音频队列服务播放。谢谢你的建议。