我一直在尋找並試圖解決以下問題,因爲一整天。沒有成功但在AudioUnit播放回調中播放來自AudioBuffer-> mdata的音頻
好了,我一直在使用蘋果的示例代碼項目名稱WiTap
使用NSInputStreams
和NSOutputStreams
我已經能夠將數據(音頻數據)B/W設備成功傳輸通信通過WiFi /黑白兩臺設備。
然而目的地設備我接收數據和在音頻緩衝器填寫上,如下所示:
bytesRead = [self.inputStream read:anAudioBuffer.mData maxLength:anAudioBuffer.mDataByteSize];
而anAudioBuffer
本身聲明如下
anAudioBuffer.mNumberChannels = 1;
anAudioBuffer.mDataByteSize = 512 * 2;
anAudioBuffer.mData = malloc(512 * 2);
現在我訪問此音頻緩衝器作爲someObject.anAudioBuffer
在AudioUnit中從Apple的示例代碼回調
其中如下
static OSStatus playbackCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData) {
// Notes: ioData contains buffers (may be more than one!)
// Fill them up as much as you can. Remember to set the size value in each buffer to match how
// much data is in the buffer.
for (int i=0; i < ioData->mNumberBuffers; i++) { // in practice we will only ever have 1 buffer, since audio format is mono
AudioBuffer buffer = ioData->mBuffers[i];
// copy temporary buffer data to output buffer
UInt32 size = min(buffer.mDataByteSize, someObject.anAudioBuffer.mDataByteSize); // dont copy more data then we have, or then fits
memcpy(buffer.mData, someObject.anAudioBuffer.mData, size);
buffer.mDataByteSize = size; // indicate how much data we wrote in the buffer
// uncomment to hear random noise
/*
UInt16 *frameBuffer = buffer.mData;
for (int j = 0; j < inNumberFrames; j++) {
frameBuffer[j] = arc4random();
}
*/
}
return noErr;
}
現在我想玩,我從someObject.anAudioBuffer
複製到一個局部變量中的字節buffer
我也注意到,該代碼的這一部分具有播放音頻
/*
UInt16 *frameBuffer = buffer.mData;
for (int j = 0; j < inNumberFrames; j++) {
frameBuffer[j] = arc4random();
}
*/
做
現在使用arc4random
播放靜態噪音。盡我的努力和搜索整個互聯網我無法弄清楚如何發揮自己的字節,也是這段代碼B/W /* */
例如,這條線的目的是什麼?
UInt16 *frameBuffer = buffer.mData;
以及如何填寫此frameBuffer
用我自己的數據發揮。
任何人都可以請指導我。我太多的時間都浪費在這個看似微不足道的問題上。
如果需要,我可以提供更多的細節。
在期待中等待......
我從源數據填充'someObject.anAudioBuffer'你能指導我如何完成任務填充填充,即在'FRAMEBUFFER [J]' – Umair
同你的方式在你的for循環中做了,除了使用來自someObject而不是rnd()的數據。 – hotpaw2
對不起,如果我聽起來太新手,但我收集,你建議在循環 'frameBuffer [j] = someObject.anAudioBuffer.mData' 如果是這樣的話,我仍然不成功 – Umair