Ios 如何从NSData创建AVAudioPCMBuffer

Ios 如何从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

我从流接收mp3并转换pcm数据。我尝试使用AVAudioEngine,但无法创建没有文件的AVAudioPCMBuffer

- (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我尝试使用音频队列服务播放。谢谢你的建议。