Partho Biswas
Partho Biswas

Reputation: 2330

iOS: Changing sample rate dynamically in Audio Unit

Is it possible to change/set sample rate in the middle of a running AudioSession/AudioUnit without stopping/restarting the current AudioSession/AudioUnit (Just like audio route) ?

I have an active audio session whose sample rate is 44.1 KHz

AudioStreamBasicDescription.mSampleRate         = 44100

I want to change the sample rate to 8KHz without uninitializing [AudioUnitUninitialize(audioUnit)] or stopping [AudioOutputUnitStop(audioUnit)] or deactivating Audio Unit/Session.

This is my audio unit settings.

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


audioStreamBasicDescription.mSampleRate         = 44100;
audioStreamBasicDescription.mFormatID           = kAudioFormatLinearPCM;
audioStreamBasicDescription.mFormatFlags        =  kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
audioStreamBasicDescription.mFramesPerPacket    = 1;
audioStreamBasicDescription.mChannelsPerFrame   = 1;
audioStreamBasicDescription.mBitsPerChannel     = 16;
audioStreamBasicDescription.mBytesPerPacket     = 2;
audioStreamBasicDescription.mBytesPerFrame      = 2;

Any help is highly appreciated.

Upvotes: 1

Views: 1762

Answers (2)

Harman
Harman

Reputation: 446

Yes, you can do it dynamically with kAudioUnitSubType_SpatialMixer Audio Unit. In pseudocode:

AudioUnitSetParameter(mixerUnit, k3DMixerParam_PlaybackRate, kAudioUnitScope_Input, 0, sampleRateRatio(from 0.0 to 2.0), 0);

Upvotes: 0

hotpaw2
hotpaw2

Reputation: 70673

No, as each sample rate requires some startup time involving flushing samples at the previous rate from the Audio Unit buffers and sample rate converters.

Best bet, if you need to process another sample rate is to resample in software inside your own app.

Upvotes: 2

Related Questions