Bre*_*nan 8 core-audio avfoundation ios
我希望能够从AVAssetReader获取AudioBufferList,它有2个缓冲区,这样我就可以通过AudioUnit处理左右音频.我尝试使用下面的输出设置,但只要我指定由kAudioChannelLayoutTag_Stereo设置的立体声布局,它就不会读取.
AVAssetReader是否可以返回非交错结果?
如果没有,我将如何将其转换为非交错的AudioBufferList?我曾尝试使用音频转换器服务,但我不能让它接受AudioStreamBasicDescription的输入或输出值.(ASBD)如果我无法从AVAssetReader获取我想要的格式的数据,我想至少能够将其转换为我需要的格式.
任何提示都表示赞赏.
- (NSDictionary *) getOutputSettings {
AudioChannelLayout channelLayout;
memset(&channelLayout, 0, sizeof(AudioChannelLayout));
channelLayout.mChannelLayoutTag = kAudioChannelLayoutTag_Stereo;
NSDictionary *outputSettings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:kAudioFormatLinearPCM], AVFormatIDKey,
[NSNumber numberWithFloat:44100.0], AVSampleRateKey,
[NSNumber numberWithInt:2], AVNumberOfChannelsKey,
[NSData dataWithBytes:&channelLayout length:sizeof(AudioChannelLayout)], AVChannelLayoutKey,
[NSNumber numberWithInt:16], AVLinearPCMBitDepthKey,
[NSNumber numberWithBool:NO], AVLinearPCMIsNonInterleaved,
[NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,
[NSNumber numberWithBool:NO], AVLinearPCMIsBigEndianKey,
nil];
return outputSettings;
}
Run Code Online (Sandbox Code Playgroud)
我了解到我可以让 AVAssetReader 返回具有默认输出设置(nil)的结果,这将为我提供浮点值的交错结果。浮点值的缓冲区在缓冲区中从左到右交替。我可以使用 -1.0 到 1.0 范围内的这些值,但为了播放音频,有必要将这些值增加到短有符号整数的范围,因此我将它们乘以 SHRT_MAX 并确保值保持在 SHRT_MAX 和 SHRT_MIN 范围内,以便音频按预期播放。
由于交错缓冲区在同一缓冲区上返回 L 和 R 值,因此将其视为 1 个缓冲区上的 2 个通道,这反映在 AudioBufferList 中。以前我能够取回 2 个缓冲区,每个缓冲区有 1 个通道,但现在我了解了非常简单的交错格式,这并不是真正必要的。
| 归档时间: |
|
| 查看次数: |
2115 次 |
| 最近记录: |