如何获取本机(硬件支持)音频采样率以避免内部采样率转换?

 落渊绝夜 发布于 2023-02-06 21:46

任何人都可以向我指出文档,说明不同iPhone版本的原生采样率,以避免core-audio内部采样率转换?

编辑: 否则,请您指点一个源代码示例,说明如何以编程方式获取这些值?

编辑: 此Apple文档(第26页)是指Canonical音频格式,但仅提及样本类型(PCM)和位深度(16位).它没有提到捕获硬件直接支持的任何本机采样率.这些是我正在寻找的价值观.

1 个回答
  • 您需要做的是找到一种方法来检测硬件采样率,并使用您在后续代码中找到的任何内容.

    有一个音频会话属性,它将为您提供: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接口,使用AVAudioSessionAPI

    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.所以这似乎做得对,并报告实际的 硬件采样率.但是,这需要更广泛的测试以获得更大的确定性.

    我还想向你指出Chris Adamson出色的书" 学习核心音频"的方向,该书在第10章"iOS上的核心音频 "中触及了这个主题.

    2023-02-06 21:53 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有