像6S这样的新型IOS设备仅支持本机48kHz回放。由于标准CoreAudio图形重新采样很好,因此没有什么问题。问题是,如果您使用语音处理单元进行VOIP类型的应用,则无法将手机设置为44.1kHz;它创造了一个不错的Darth-Vader,就像体验一样!以前,我用来检查设备的型号,并简单地说'如果它是6S或更高版本,那么我必须重新采样44.1到48kHz),并且这工作得很好。我不喜欢这种修复,所以我尝试了下面的代码:如何判断IOS设备是否仅在硬件中支持48kHz
session = [AVAudioSession sharedInstance];
[session setActive:YES error:&nsError];
if (systemSampleRate == 44100) // We may need to resample if it's a phone that only supports 48kHz like the 6S or 6SPlus
{
[session setCategory:AVAudioSessionCategoryPlayback
withOptions:0
error:&nsError];
result = [session setPreferredSampleRate:systemSampleRate error:&nsError];
hardwareSampleRate = [session sampleRate];
NSLog (@"Phone reports sample rate of %f", hardwareSampleRate);
if (hardwareSampleRate != (double)systemSampleRate) // We can't set it!!!!
needsResampling = YES;
else
{
[session setCategory:AVAudioSessionCategoryRecord
withOptions:AVAudioSessionCategoryOptionAllowBluetooth
error:&nsError];
result = [session setPreferredSampleRate:systemSampleRate error:&nsError];
hardwareSampleRate = [session sampleRate];
if (hardwareSampleRate != (double)systemSampleRate) // We can't set it!!!!
needsResampling = YES;
else
needsResampling = NO;
}
}
大部分时间,这个工程。 6S设备将报告48kHz,其他所有设备将报告44.1kHz。但是,如果它已经绑定到仅支持8kHz麦克风音频和44.1kHz播放的蓝牙耳机类型的系统,则第一个硬件采样率值报告44.1 !!!!所以我继续认为设备原生支持44.1并且一切都已经结束。
所以问题是:我如何知道IOS上的本机回放设备物理上只支持48kHz,还是可以同时支持44.1和48kHz?苹果关于此的公开文件是毫无价值的,它只是假设一个设备支持而不告诉你如何解决这个问题,因此对人们提出了严厉的批评。
你从哪里得到systemSampleRate? – dave234
啊,应该提到。这是系统“想要”运行的期望采样率。它只是通过这个例程并在其他地方定义。它只有44100或48000的值。 – chuckd
它在哪里定义? – dave234