有人能向我指出说明不同iPhone版本的本地采样率的文档,以避免core-audio内部采样率的转换吗?
编辑:,您能告诉我如何以编程方式获得这些值的源代码示例吗?
编辑:这个苹果文件(第26页)指的是一种规范的音频格式,但只提到了示例类型(PCM)和位深度(16位)。它没有提到捕获硬件直接支持的任何本地采样率。这些就是我想要的价值。
发布于 2014-01-02 23:06:37
您需要做的是找到一种方法来检测硬件采样率,并使用您在后续代码中找到的任何内容。
有一个音频会话属性将为您提供以下内容: CurrentHardwareSampleRate
- (void) logSampleRate {
Float64 sampleRate;
UInt32 srSize = sizeof (sampleRate);
OSStatus error =
AudioSessionGetProperty(
kAudioSessionProperty_CurrentHardwareSampleRate,
&srSize,
&sampleRate);
if (error == noErr) {
NSLog (@"CurrentHardwareSampleRate = %f", sampleRate);
}
}iPhone 4S和iPhone 5S报告hardwareSampleRate = 44100.000000,但其他设备可能会有所不同。
编辑
在回答问题和阅读最新的文档时,我发现CurrentHardwareSampleRate在iOS6中是不可取的。真的,考虑到我自己的建议,我应该知道得更清楚。
事情是这样的:
1-不要使用这个过时和过时的C接口,使用AVAudioSession API
2-不要使用HardwareSampleRate,使用sampleRate。
这引起了人们的怀疑,即苹果想让我们(甚至)离金属更远。但我们应该放心。而sampleRate的文档只提供
目前有效的音频采样率(以赫兹为单位)。(只读)
值得注意的是,省略了单词hardware,我们还有这样的方法:
- (BOOL)setPreferredSampleRate:(double)sampleRate error:(NSError **)outError其中,sampleRate被充分描述为
要使用的硬件采样率。硬件采样率的可用范围取决于设备。它通常从8,000到48,000赫兹不等。
看来,我们应该使用的方式,是设置我们的首选速率,设备将设置一个(?)实际的费率,大概是尽可能接近首选的,基于硬件。因此,一旦设置了首选速率,就可以检查sampleRate (而不是preferredSampleRate)属性的值,以发现将要使用的实际示例速率。我们希望这是硬件取样。
这是现代的方式..。
- (void) logAudioFormatAV {
AVAudioSession* session = [AVAudioSession sharedInstance];
BOOL success;
NSError* error = nil;
double preferredSampleRate = 48000;
success = [session setPreferredSampleRate:preferredSampleRate error:&error];
if (success) {
NSLog (@"session.sampleRate = %f", session.sampleRate);
} else {
NSLog (@"error setting sample rate %@", error);
}
}我在4S和5S上尝试了各种不同的样品价格,并且总是得到44100。因此,这似乎是正确的事情,并报告了实际的硬件采样率。但这需要更广泛的测试,以获得更大的确定性。
我也想指出你的方向克里斯亚当森的出色的书学习核心音频,其中涉及这个主题在第10章,核心音频在iOS。
https://stackoverflow.com/questions/20889902
复制相似问题