Я пытаюсь установить различные частоты дискретизации (например, 32 кГц, 24 кГц и т. Д.) Во входной поток аудиоустройства удаленного ввода-вывода. Но выход всегда воспроизводится при одной из этих частот дискретизации - 22,05 кГц, 33,1 кГц, 11,0 кГц, независимо от того, что я установил. И удивительно, когда я звоню AudioUnitGetProperty
на kAudioUnitScope_Output
для kAudioUnitProperty_SampleRate
, он всегда возвращает 44,1Возможные значения частоты дискретизации в аудио единицах
- (void)startToneUnit
{
AudioComponentDescription defaultOutputDescription;
defaultOutputDescription.componentType = kAudioUnitType_Output;
defaultOutputDescription.componentSubType = kAudioUnitSubType_RemoteIO;
defaultOutputDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
defaultOutputDescription.componentFlags = 0;
defaultOutputDescription.componentFlagsMask = 0;
// Get the default playback output unit
AudioComponent defaultOutput = AudioComponentFindNext(NULL, &defaultOutputDescription);
NSAssert(defaultOutput, @"Can't find default output");
// Create a new unit based on this that we'll use for output
OSErr err = AudioComponentInstanceNew(defaultOutput, &toneUnit);
NSAssert1(toneUnit, @"Error creating unit: %hd", err);
// Set our tone rendering function on the unit
AURenderCallbackStruct input;
input.inputProc = RenderTone;
input.inputProcRefCon = (__bridge void *)(self);
err = AudioUnitSetProperty(toneUnit,
kAudioUnitProperty_SetRenderCallback,
kAudioUnitScope_Input,
0,
&input,
sizeof(input));
NSAssert1(err == noErr, @"Error setting callback: %hd", err);
// Set the format to 32 bit, single channel, floating point, linear PCM
const int four_bytes_per_float = 4;
const int eight_bits_per_byte = 8;
AudioStreamBasicDescription streamFormat;
streamFormat.mSampleRate = SAMPLE_RATE;
streamFormat.mFormatID = kAudioFormatLinearPCM;
streamFormat.mFormatFlags =
kAudioFormatFlagsNativeFloatPacked;
streamFormat.mBytesPerPacket = four_bytes_per_float;
streamFormat.mFramesPerPacket = 1;
streamFormat.mBytesPerFrame = four_bytes_per_float;
streamFormat.mChannelsPerFrame = 1;
streamFormat.mBitsPerChannel = four_bytes_per_float * eight_bits_per_byte;
err = AudioUnitSetProperty (toneUnit,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Input,
0,
&streamFormat,
sizeof(AudioStreamBasicDescription));
NSAssert1(err == noErr, @"Error setting stream format: %hd", err);
// Stop changing parameters on the unit
err = AudioUnitInitialize(toneUnit);
NSAssert1(err == noErr, @"Error initializing unit: %hd", err);
// Start playback
err = AudioOutputUnitStart(toneUnit);
NSAssert1(err == noErr, @"Error starting unit: %hd", err);
Float64 outSampleRate = 0.0;
UInt32 size = sizeof(Float64);
AudioUnitGetProperty (toneUnit,
kAudioUnitProperty_SampleRate,
kAudioUnitScope_Output,
0,
&outSampleRate,
&size);
NSLog(@"Output sample rate is now at %f Hz", outSampleRate);
}
Что поддерживаются все возможные частоты дискретизации вывода для Audio Units? Любая ссылка на документацию от Apple на это будет очень полезно
Благодарности
Спасибо !!! Но вызов «AudioUnitGetProperty» для частоты дискретизации всегда возвращает 44,1 кГц, даже если звук воспроизводится на другой частоте, например, 22,05 кГц или 33,1 кГц или 11 кГц (они нашли эти частоты, разделив общие сэмплы, полученные продолжительностью воспроизведения звука). Что-то не так с моим кодом? – srinivas
Деталь --- вы знаете, когда вы устанавливаете свойства ввода RemoteIO, вы должны адресовать их на шину '1', правильно? Когда вы делаете все эти «SetProperty» с помощью «kAudioUnitScope_Input», но «0», они не устанавливают свойства в правильной сущности. – iluvcapra