我想通过NSSocket在iPhone中实时传输麦克风中的某些录音。从AudioUnit编码录制通过iOS中的NSOutputStream发送
我有记录和回放的回调。我尝试使用下面的代码从缓冲区直接读取:当我试图
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时,我所得到的只是噪音。
任何想法?我用尽想法...
你在做什么不会奏效 - 你正在接受一个NSString *指针并用SInt16覆盖它的内存。你甚至不确定NSString *是否为你的数据分配了足够的内存。这不是正确的方法。你有没有看看[NSData](https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html)类? – Mar0ux
谢谢,它帮助了很多。我会解码数据时遇到问题。我的服务器用类似这样的方式接收数据:<12345678 12345678 ...>具有适当的值和东西的Ofcourse。它发回它到我的应用程序,我试图将此字符串转换为NSData,但它所得到的仍然是噪声。 –
一般来说 - 我需要将传入的字符串,实际上是以前发送的NSData,NSData,没有任何实际流的变化。 –