NSSocket を介して、iPhone のマイクからリアルタイムで録音をストリーミングしようとしています。
録音と再生のためのコールバックがあります。次のコードを使用して、バッファから直接読み取ろうとしています:
SInt16 *intFromBuffer;
intFromBuffer = audioBufferList->mBuffers[0].mData;
私がしようとしているとき:
NSLog(@"0x%X", intFromBuffer);
たとえば、次のようになります: 0xA182E00
そして今、重要な部分 - 再生コールバック:
static OSStatus playbackCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData) {
/**
This is the reference to the object who owns the callback.
*/
AudioProcessor *audioProcessor = (__bridge AudioProcessor*) inRefCon;
// iterate over incoming stream an copy to output stream
for (int i=0; i < ioData->mNumberBuffers; i++) {
AudioBuffer buffer = ioData->mBuffers[i];
// find minimum size
UInt32 size = min(buffer.mDataByteSize, [audioProcessor audioBuffer].mDataByteSize);
intFromBuffer = (SInt16)([NSString stringWithFormat:@"0x%@", data.output]);
memcpy(buffer.mData, intFromBuffer, size); //this works fine!
}
return noErr;
}
しかし今、この intFromBuffer を NSStream で動作させるにはどうすればよいですか?
NSString として直接送信し、NSString として送り返し、解析して SInt16 に戻そうとすると、ノイズだけが返されます。
何か案は?アイデアが尽きた…