J'ai écrit détecteur de souffle basé sur l'application de l'exemple aurio Touch de pomme. Mais je ne peux pas comprendre comment régler l'unité audio ou la session audio pour ne pas jouer les sons de l'entrée audio. Maintenant, en soufflant dans le micro, je peux entendre le souffle du haut-parleur iPhone. Comment éviter cela?Comment couper la sortie dans l'application Apple aurio Touch (exemple audio sessioin)?
Voici le code d'initialisation de la session audio Apple:
XThrowIfError(AudioSessionInitialize(NULL, NULL, rioInterruptionListener, self), "couldn't initialize audio session");
XThrowIfError(AudioSessionSetActive(true), "couldn't set audio session active\n");
UInt32 audioCategory = kAudioSessionCategory_RecordAudio;
XThrowIfError(AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory), "couldn't set audio category");
XThrowIfError(AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, propListener, self), "couldn't set property listener");
Float32 preferredBufferSize = .005;
XThrowIfError(AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(preferredBufferSize), &preferredBufferSize), "couldn't set i/o buffer duration");
UInt32 size = sizeof(hwSampleRate);
XThrowIfError(AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareSampleRate, &size, &hwSampleRate), "couldn't get hw sample rate");
XThrowIfError(SetupRemoteIO(rioUnit, inputProc, thruFormat), "couldn't setup remote i/o unit");
dcFilter = new DCRejectionFilter[thruFormat.NumberChannels()];
UInt32 maxFPS;
size = sizeof(maxFPS);
XThrowIfError(AudioUnitGetProperty(rioUnit, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 0, &maxFPS, &size), "couldn't get the remote I/O unit's max frames per slice");
fftBufferManager = new FFTBufferManager(maxFPS);
l_fftData = new int32_t[maxFPS/2];
XThrowIfError(AudioOutputUnitStart(rioUnit), "couldn't start remote i/o unit");
size = sizeof(thruFormat);
XThrowIfError(AudioUnitGetProperty(rioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 1, &thruFormat, &size), "couldn't get the remote I/O unit's output client format");
Avez-vous obtenu ce travail? – DesperateLearner
@DesperateLearner checkout ma propre réponse. Travaille pour moi. – flagman
donc je suppose u appelé: void SilenceData (AudioBufferList * InData) { \t pour (UInt32 i = 0; i < inData-> mNumberBuffers; i ++) \t \t memset (inData-> mBuffers [i] .mData, 0, InData -> mBuffers [i] .mDataByteSize); } – DesperateLearner