我想通過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,沒有任何實際流的變化。 –