Re: How to set Sample Rate Conversion quality
Re: How to set Sample Rate Conversion quality
- Subject: Re: How to set Sample Rate Conversion quality
- From: tahome izwah <email@hidden>
- Date: Mon, 24 May 2010 11:32:10 +0200
Ok so I was able to find some references and come up with the
following code - is this the correct approach for setting the highest
possible SRC quality? I am setting this property on the output
(client) side - is this correct?
Thanks
--th
-----------------------------------------------------------------------------------
AudioConverterRef outConverter;
UInt32 size = sizeof(outConverter);
err = ExtAudioFileGetProperty(extAFRef,
kExtAudioFileProperty_AudioConverter, &size, &outConverter);
if (err) {DEBUGLOG(@"!!! Error in ExtAudioFileGetProperty /
kExtAudioFileProperty_AudioConverter, %d", err); return err;}
if (!err) {
UInt32 prop;
prop = kAudioConverterSampleRateConverterComplexity_Mastering;
AudioConverterSetProperty(outConverter,
kAudioConverterSampleRateConverterComplexity,
sizeof(prop), &prop);
prop = kAudioConverterQuality_Max;
AudioConverterSetProperty(outConverter,
kAudioConverterSampleRateConverterQuality,
sizeof(prop), &prop);
CFArrayRef config = NULL;
err = ExtAudioFileSetProperty(extAFRef,
kExtAudioFileProperty_ConverterConfig, sizeof(config), &config);
if (err) {DEBUGLOG(@"!!! Error in ExtAudioFileSetProperty /
kExtAudioFileProperty_ConverterConfig, %d", err); return err;}
}
-----------------------------------------------------------------------------------
2010/5/24 tahome izwah <email@hidden>:
> Hi all,
>
> I am using ExtAudioFile to read an AIFF file and convert it to the
> sample rate of my project. This works great, but the sample rate
> conversion quality is really bad. Is there a way to tell the
> conversion to use the highest possible SRC quality? If so, how? Via
> kExtAudioFileProperty_ConverterConfig perhaps? Is there any sample
> code for this?
>
> Thanks!
> --th
>
> Btw. This is how I set this up (sampleRate is my project sample rate)
>
> --------------------------------------------------------------------------------------
> err = AudioFileOpen(&theRef, fsRdPerm, 0, &mAfid);
> if (err) {DEBUGLOG(@"!!! Error in AudioFileOpen, %d", err); return err;}
>
> err = ExtAudioFileWrapAudioFileID(mAfid, false, &extAFRef);
> if (err) {DEBUGLOG(@"!!! Error in ExtAudioFileWrapAudioFileID, %d",
> err); return err;}
>
>
> AudioStreamBasicDescription fileFormat;
> propSize = sizeof(fileFormat);
> memset(&fileFormat, 0, sizeof(AudioStreamBasicDescription));
>
> err = ExtAudioFileGetProperty(extAFRef,
> kExtAudioFileProperty_FileDataFormat, &propSize, &fileFormat);
> if (err) {DEBUGLOG(@"!!! Error in ExtAudioFileGetProperty, %d",
> err); return err;}
>
> extAFRateRatio = sampleRate / fileFormat.mSampleRate;
> extAFSampleRate = fileFormat.mSampleRate;
> extAFFormatID = fileFormat.mFormatID;
> extAFWordlength = fileFormat.mBitsPerChannel;
> DEBUGLOG(@"Converting sample rate from %f to %f",
> fileFormat.mSampleRate, sampleRate);
>
> AudioStreamBasicDescription clientFormat;
> propSize = sizeof(clientFormat);
> memset(&clientFormat, 0, sizeof(AudioStreamBasicDescription));
> clientFormat.mFormatID = kAudioFormatLinearPCM;
> clientFormat.mSampleRate = sampleRate;
> clientFormat.mFormatFlags = kAudioFormatFlagIsFloat |
> kAudioFormatFlagIsPacked | kAudioFormatFlagsNativeEndian;
> clientFormat.mChannelsPerFrame = numChannels;
> clientFormat.mBitsPerChannel = sizeof(float) * 8;
> clientFormat.mFramesPerPacket = 1;
> clientFormat.mBytesPerFrame = clientFormat.mBitsPerChannel *
> clientFormat.mChannelsPerFrame / 8;
> clientFormat.mBytesPerPacket = clientFormat.mFramesPerPacket *
> clientFormat.mBytesPerFrame;
> clientFormat.mReserved = 0;
>
> err = ExtAudioFileSetProperty(extAFRef,
> kExtAudioFileProperty_ClientDataFormat, propSize, &clientFormat);
> if (err) {DEBUGLOG(@"!!! Error in ExtAudioFileSetProperty, %d",
> err); return err;}
>
> --------------------------------------------------------------------------------------
>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden