【发布时间】:2015-01-04 23:11:00
【问题描述】:
我正在使用 EZAudio 并尝试将我的软件生成的一些样本写入此库 https://github.com/syedhali/EZAudio 提供的 AudioBuffer,如示例“手动覆盖播放”中所示。
我的代码看起来像这样...
// Completely override the output callback function
- (void)
output:(EZOutput *)output
callbackWithActionFlags:(AudioUnitRenderActionFlags *)ioActionFlags
inTimeStamp:(const AudioTimeStamp *)inTimeStamp
inBusNumber:(UInt32)inBusNumber
inNumberFrames:(UInt32)inNumberFrames
ioData:(AudioBufferList *)ioData {
//grab latest sample from sample queue
if (currentAudioPiece == nil || currentAudioPiece.duration >= currentAudioPieceIndex) {
self.currentAudioPiece = sampleQueue.dequeue;
}
AudioBuffer audioBuffer = ioData->mBuffers[0];
if (true) {
for (int i = 0; i < audioBuffer.mDataByteSize; i++) {
uint8_t rofl[2048];
arc4random_buf(&rofl, 2048);
audioBuffer.mData = rofl;
}
return;
}
//... more code that I'll debug later...'
基本上我无法进行健全性检查,即随机播放的一堆内存会产生一些噪音。我认为问题在于“audioBuffer.mData = rofl;”。我对在 void* 使用内存感到很困惑。
【问题讨论】:
-
你在设备上测试过吗?
-
假设一切设置正确(音频初始化等),我怀疑您对问题行的看法是正确的。不要创建自己的变量 (
rofl),然后尝试将其分配给 mData(很可能是问题),而是直接在audioBuffer.mData上调用arc4random_buf,如果 EZAudio 工作正常,它应该已经为您初始化与 iOS/OSX 中的普通 RemoteIO 相同。
标签: ios objective-c audio core-audio