我正在使用vpio音频单元在Mac OS X上进行捕获和播放。 一切顺利,直到我在vpio单元上设置了输入/输出格式。 我想要的格式是这样的: 我可以在vpio的(输入总线/输出范围)上设置此格式,但是无法在vpio的(输出总线/输入范围)上设置它,这样我会得到错误代码(kA ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在尝试使用Core Audio手动播放音乐,作为练习与CoreAudio一起学习。 因为我的目的是学习,所以我想了解为什么以下方法不起作用。
当我简单地创建这两个单元而不将它们连接在一起(手动或使用AUGraph)时,一切工作正常:
相反,我在outputAU上配置了一个渲染回调,以便在内部可以调用以手动填充ioData。
var err = AudioUnitRender(outputAU,&flags,&ts,inBusNumber,inNumberFrames,&ioData!.pointee)
我的outputUnit可以播放歌曲,效果很好。
但是,如果我将outputUnit的格式更改为以下格式,它将停止工作:
var format = AudioStreamBasicDescription(mSampleRate: 44100,
mFormatID: kAudioFormatLinearPCM,
mFormatFlags: kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked,
mBytesPerPacket: bytePerSample, // bytePerSample = 2
mFramesPerPacket: 1,
mBytesPerFrame: bytePerSample,
mChannelsPerFrame: 1,
mBitsPerChannel: 8 * bytePerSample,
mReserved: 0)
我在输出和输入范围都设置了这种格式,如下所示:
error = AudioUnitSetProperty(outputAU,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Output,
input,
&format,
UInt32(MemoryLayout<AudioStreamBasicDescription>.size))
guard error == noErr else {
print("An error occured \(error)")
return
}
error = AudioUnitSetProperty(outputAU,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Input,
output,
&format,
UInt32(MemoryLayout<AudioStreamBasicDescription>.size))
guard error == noErr else {
print("An error occured \(error)")
return
}
我的AudioUnitRender通话现在不断返回-50。 而且我无法填充缓冲区。 我有兴趣了解那里的情况以及如何解决此问题。
谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.