将音频数据<from file =“”>转换为音频缓冲区<pcm data =“”>并使用AudioQueue进行播放

时间:2016-04-14 08:15:05

标签: ios audio-streaming pcm audioqueueservices

对于我的特殊情况,我想读一个音频文件&lt; MP3,AAC ...&gt;通过缓冲区,如每个缓冲区为512Kb,并将此缓冲区转换为PCM数据并传递给AudioQueue的播放回调。 就像录制时一样,我们有这样的回调:

static OSStatus recordingCallback(void *inRefCon,
                                  AudioUnitRenderActionFlags *ioActionFlags,
                                  const AudioTimeStamp *inTimeStamp,
                                  UInt32 inBusNumber,
                                  UInt32 inNumberFrames,
                                  AudioBufferList *ioData)

我们可以使用AudioBufferList * ioData播放, 如何将上面的缓冲区转换为此类型? 非常感谢。

编辑: 我有一个获取音频缓冲区的方法:

-(NSData *) readAudioFile:(NSString *)filePath fromOffset:(long long) offset readSize:(long)readSize {
    NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];

    NSNumber *fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
    long long fileSize = [fileSizeNumber longLongValue];
    if(offset >= fileSize)
        return nil;

    NSFileHandle *fReadHandle = [NSFileHandle fileHandleForReadingAtPath:filePath];
    [fReadHandle seekToFileOffset:offset];
    NSData *data = [fReadHandle readDataOfLength:readSize];
[fReadHandle closeFile];
    return data;
}

和N SData *audioData = [self readAudioFile:@"aa.mp3" fromOffset:0 readSize:512 * 1024]; 现在我有缓冲区:audioData,如何将此缓冲区传递给AudioQueue或其他服务来播放它。

0 个答案:

没有答案