- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
任何人都可以指出说明不同 iPhone 版本的 native 采样率以避免 core-audio
内部采样率转换的文档吗?
编辑:否则,能否请您指出一个源代码示例,说明如何以编程方式获取这些值?
编辑:这Apple document (page 26)指的是规范音频格式,但仅提及样本类型 (PCM) 和位深度(16 位)。它没有提到捕获硬件直接支持的任何 native 采样率。这些是我正在寻找的值。
最佳答案
您需要做的是找到一种检测硬件采样率的方法,并在后续代码中使用您找到的任何内容。
有一个 Audio Session 属性会给你这个: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 中已弃用。真的,鉴于 my own advice,我应该更清楚.
事情是这样的:
1 - 不要使用这个过时和弃用的 C 接口(interface),使用 AVAudioSession
API
2 - 不要使用HardwareSampleRate
,使用sampleRate
。
这让人怀疑苹果想要(甚至)远离金属。但我们应该放心。 sampleRate
的文档只提供
The audio sample rate, in hertz, that is currently in effect. (read-only)
特别是省略了hardware
这个词,我们还有这个方法:
- (BOOL)setPreferredSampleRate:(double)sampleRate error:(NSError **)outError
其中 sampleRate 被充分描述为
The hardware sample rate you want to use. The available range for hardware sample rate is device dependent. It typically ranges from 8,000 through 48,000 hertz.
似乎我们应该使用它的方式是设置我们的首选速率,设备将从中设置一个(?)实际速率根据硬件,大概会尽可能接近首选。因此,一旦您设置了首选速率,就可以检查 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 上的核心音频 中谈到了这个主题.
关于ios - 如何获得 native (硬件支持的)音频采样率以避免内部采样率转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20889902/
我刚刚意识到二进制编译器会将源代码转换为目标平台的二进制文件。有点明显...但如果编译器以这种方式工作,那么同一个编译器如何用于不同的系统,如 x86、ARM、MIPS 等? 难道他们不应该“知道”硬
在我的 SDL 游戏中,出于游戏玩法和性能原因,我希望保留固定的游戏区域分辨率。 我想做的是有一个小分辨率(例如 320 * 240),并且在调整窗口大小时/切换到全屏模式时让 SDL/显卡缩放每个像
我正在使用这些方法来激活 SurFaceView 上的触摸焦点 private SurfaceView surfaceiew; private CameraSource camSource; priv
您好,当我从硬件菜单更改设备时,我遇到了这个奇怪的问题,但我想我可能遗漏了一些简单的东西。 我的 View Controller 中有这段代码: - (void)touchesBegan:(NSSet
编写一个名为 weird() 的函数,它将三个字符串作为参数并向后打印最长的一个。 (在平局的情况下,应该选择较早的参数字符串。 函数调用: weird("I", "Love", "Python")
您好,我正在尝试设置 hadoop 环境。简而言之,我要解决的问题涉及数十亿个大小为几 MB 的 XML 文件,使用 HIVE 从中提取相关信息,并对这些信息进行一些分析工作。我知道这在 hadoop
我知道 Phidgets,但是,我正在寻找可以与 C# 接口(interface)的一些其他类型的硬件。 谁有好东西? 最佳答案 查看 Netduino .它基于 Arduino,但使用 .Net
说一个函数(例如模乘法、正弦函数)是在硬件而不是软件中实现是什么意思? 最佳答案 在硬件中实现意味着电路(通过逻辑门等)可以执行操作。 例如,在 ALU 中,处理器在物理上能够将一个字节加到另一个字节
我需要编写一个程序,在可能状态的大空间中执行并行搜索,在此过程中发现了新区域(并开始了他们的探索),并且由于在其他地方获得的中间结果消除了可能性,因此提前终止了对某些区域的探索在其中发现新的有用结果。
我们需要通过带有硬件 token 的 EV 代码对 InstallShield 2013 Express 的安装进行签名,但是无法导出私钥证书文件,因此唯一的方法是使用 DigiCertUtil 工具
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 2 年前。 Improve this ques
我考虑从库中丢弃处理大端情况的代码,如果平台不是小端,则在初始化期间简单地抛出一个异常。如果我们限制为,我无法想象会有任何大端硬件 托管任何网站的典型服务器硬件 服务器根据开放计算项目规范 所有常见的
我知道这可以做到,但找不到交换目标调试设备的地方。我现在正在使用模拟器,但想切换到设备,反之亦然。谁能指出我正确的方向? 谢谢。 最佳答案 像这样.. 右键单击 PROJECT--->Run As--
我正在尝试创建一个监听音量键事件的服务。 每当按下音量键时,服务应向号码发送短信,但我无法检测到音量键事件。 最佳答案 您可以使用 OnKeyListener可以检测按键事件(包括音量键)。您可以找到
谁能解释一下中断如何从最低层(硬件)传递到应用程序。 所以在下图中我知道处理器之后发生了什么。 但是我想要从键盘按下到处理器的中断过程在硬件中发生了什么,例如它如何传递扫描代码,中断 Controll
我的任务是构建一个应用程序,其中业务用户将定义一些数据操作和处理规则(例如,取一个数值并将其平均分配给根据中指定的条件选择的多个记录)规则)。 每月必须运行一个批处理应用程序,以便根据定义的规则处理大
所以这是我的愚蠢问题: PGP/GPGP可以用来对文本进行签名,其他的使用公钥来验证。 比方说,非对称密码算法处理空间。 有没有什么算法可以处理时间? 例如在 2011-10-10 10:10:10
使用 nvcc 编译 CUDA 程序是否需要安装支持 CUDA 的显卡(在 Linux 中)?或者可以在任何地方编译程序并且只能在这样的系统上运行? 最佳答案 不,编译不需要显卡。 您甚至不需要一个来
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我有一个奇怪的问题,但我对这个话题很感兴趣。 是否有可能直接访问当前基于 x64 的计算机的硬件,而无需使用某种 HAL(硬件抽象层)或其他操作系统(udev、upower 等)的附属物?我不是在谈论
我是一名优秀的程序员,十分优秀!