Ios 使用远程音频单元噪音很大

Ios 使用远程音频单元噪音很大,ios,iphone-5,Ios,Iphone 5,最近我开发了一个远程IOUnit项目,但我遇到了一个奇怪的问题,在iphone5ios7上声音总是很吵。我无法理解,因为它在iPodios6上运行良好。iphone5的扬声器总是会产生噪音,而它在耳机中工作得很好。 请找个人来帮我 这是代码 AVAudioSession *audioSession = [AVAudioSession sharedInstance]; [audioSession setCategory:AVAudioSessionCategoryPlayAndRec

最近我开发了一个远程IOUnit项目,但我遇到了一个奇怪的问题,在iphone5ios7上声音总是很吵。我无法理解,因为它在iPodios6上运行良好。iphone5的扬声器总是会产生噪音,而它在耳机中工作得很好。 请找个人来帮我

这是代码

    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
   [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord
                  withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker
                        error:nil];
  success = [[AVAudioSession sharedInstance] setActive:YES
                                     error:&error];
if (!success) {
    [self checkError:error];
}
==============

AudioComponentDescription audioDesc;
audioDesc.componentType = kAudioUnitType_Output;
audioDesc.componentSubType = kAudioUnitSubType_VoiceProcessingIO;
audioDesc.componentFlags = 0;
audioDesc.componentFlagsMask = 0;
audioDesc.componentManufacturer = kAudioUnitManufacturer_Apple;

OSStatus status = noErr;
AudioComponent inputComponent = AudioComponentFindNext(NULL, &audioDesc);
status = AudioComponentInstanceNew(inputComponent, &_audioUnit);
checkstatus(status);
if (status) {
    return NO;
}

UInt32 flag = 1;
// Enable IO for recording
status = AudioUnitSetProperty(_audioUnit,
                              kAudioOutputUnitProperty_EnableIO,
                              kAudioUnitScope_Input,
                              kInputBus,
                              &flag,
                              sizeof(flag));
checkstatus(status);

// Enable IO for playback
status = AudioUnitSetProperty(_audioUnit,
                              kAudioOutputUnitProperty_EnableIO,
                              kAudioUnitScope_Output,
                              kOutputBus,
                              &flag,
                              sizeof(flag));
checkstatus(status);

// Describe format
audioFormat.mSampleRate         = 8000;
audioFormat.mFormatID           = kAudioFormatLinearPCM;
audioFormat.mFormatFlags        = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
audioFormat.mFramesPerPacket    = 1;
audioFormat.mChannelsPerFrame   = 1;
audioFormat.mBitsPerChannel     = 16;//short
audioFormat.mBytesPerPacket     = 2;
audioFormat.mBytesPerFrame      = 2;


// Apply format

status = AudioUnitSetProperty(_audioUnit,
                              kAudioUnitProperty_StreamFormat,
                              kAudioUnitScope_Output,
                              kInputBus,
                              &audioFormat,
                              sizeof(audioFormat));
checkstatus(status);

status = AudioUnitSetProperty(_audioUnit,
                              kAudioUnitProperty_StreamFormat,
                              kAudioUnitScope_Input,
                              kOutputBus,
                              &audioFormat,
                              sizeof(audioFormat));
checkstatus(status);


// Set input callback
AURenderCallbackStruct callbackStruct;
callbackStruct.inputProc = recordingCallback;
callbackStruct.inputProcRefCon = (__bridge void *)(self);
status = AudioUnitSetProperty(_audioUnit,
                              kAudioOutputUnitProperty_SetInputCallback,
                              kAudioUnitScope_Input,
                              kInputBus,
                              &callbackStruct,
                              sizeof(callbackStruct));

// Set output callback
callbackStruct.inputProc = playbackCallback;
callbackStruct.inputProcRefCon = (__bridge void *)(self);
status = AudioUnitSetProperty(_audioUnit,
                              kAudioUnitProperty_SetRenderCallback,
                              kAudioUnitScope_Output,
                              kOutputBus,
                              &callbackStruct,
                              sizeof(callbackStruct));
checkstatus(status);

// Disable buffer allocation for the recorder (optional - do this if we want to pass in our own)
flag = 0;
status = AudioUnitSetProperty(_audioUnit,
                              kAudioUnitProperty_ShouldAllocateBuffer,
                              kAudioUnitScope_Output,
                              kInputBus,
                              &flag,
                              sizeof(flag));
checkstatus(status);

if (status) {
    return NO;
}

_m_inBufferList = (AudioBufferList *)malloc(sizeof(AudioBufferList) + sizeof(AudioBuffer));
_m_inBufferList->mNumberBuffers = 1;
_m_inBufferList->mBuffers[0].mNumberChannels = 1;
_m_inBufferList->mBuffers[0].mDataByteSize = 320 * 2;
_m_inBufferList->mBuffers[0].mData = malloc( 320 * 2 );

请尝试kAudioUnitSubType\u RemoteIO,而不是kAudioUnitSubType\u VoiceProcessingIO