iOS 音频基础知识(一)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 音频基础知识(一)相关的知识,希望对你有一定的参考价值。

参考技术A ios系统通过使用音频会话(audio session ),在APP、APP之间和设备级别,来管理音频行为。

我们使用音频会话(audio session )来和系统进行通信,以说明我们打算如何在APP中使用音频。这个音频会话,就像是APP和操作系统(或者说底层音频硬件)之间的一个中介。我们可以使用它来告诉操作系统,APP的音频的性质,而不需要详细说明各种与音频硬件的必需交互和操作。而这些细节的管理委托给音频会话,可以确保对用户的音频体验进行最佳管理。

可以通过下面这个方法,使用AVAudioSession实例与APP的音频会话进行交互:

音频会话是APP和操作系统之间的中介。启动时,APP将自动提供单声道音频会话。我们可以通过配置来提供所需要的行为,并激活它以使行为生效。

音频行为是通过音频会话类别来进行区分的。通过设置类别,可以来告诉APP是否使用输入或输出路由,是否希望音乐与音频一起继续播放,等等。

AVFoundation定义了许多音频会话类别,以及一组覆盖和修改的方法,这样我们就可以根据APP来定制自定义的音频行为。这些类别支持播放、录制、带录制的播放。系统会根据APP所需的音频功能,来提供相应的对硬件资源的访问。系统还会确保设备上的其他音频以适合APP的方式运行,来达到我们期望的效果。

通过指定一个模式,我们还可以自定义某些类别。例如,当APP使用视频录制模式时,系统可能会选择与使用默认模式时不同的内置麦克风。该系统还可能针对视频录制对麦克风信号进行处理来调谐。

音频中断是指使APP的音频会话失活(激活的反义词),从而立即停止音频。当APP的一个竞争音频会话被激活,并且这个竞争音频会话没有按系统分类以与我们自己的会话混合时,就会发生中断。这时,我们的应用应该通过保存状态、更新用户界面等来响应中断。我们可以通过注册AVAudioSessionInterruptionNotification类型的通知,来在音频中断开始和结束时收到通知进行相应的处理。

当用户通过连接或断开设备、插入或拔出耳机来启动音频路由更改时,一般来说,用户对这些操作是有特殊的期望的。在iOS人机界面指南描述了这些期望,并提供了如何满足这些期望的指南。我们通过注册AVAudioSessionRouteChangeNotification类型的通知,来处理路由更改的事件的相应处理。

APP无法直接控制设备硬件,但音频会话为我们提供了请求首选硬件设备设置的接口。这个接口允许我们执行一些高级的音频设备配置,例如设置采样率、I/O缓冲区持续时间和音频通道数。

单独录制音频,或者与视频一起录制音频的APP,在允许录制之前需要明确的用户权限。在用户授予APP录制权限之前,应用程序只能录制静默。AVAudioSession提供了请求此权限和确定用户隐私设置的界面。

iOS:增加录制音频的音量

【中文标题】iOS:增加录制音频的音量【英文标题】:iOS: increase volume of recorded audio 【发布时间】:2016-06-14 21:18:08 【问题描述】:

是否可以处理音频并增加其基本音量?

请不要建议增加 .volume 属性。我正在寻找以编程方式增加已录制音频的音量并以大音量保存该音频的方法。

我正在从扬声器录音。

【问题讨论】:

你的问题不太清楚——你好像对audio的概念不太熟悉:(1)你是想在录音回调的时候处理信号还是处理已经录好的音频文件? (2) 什么是“基础体积”? (3) 如何从speaker 录音?扬声器不是用来捕捉声音的,而是用来重现声音的。 (4)标记“objective-c”和“swift”是什么意思?两者都不负责实时音频处理。请在asking a question之前尝试学习一些数字音频计算的基本概念。 【参考方案1】:

有几种方法可以做到这一点。标准化和压缩是我想到的两个。请参阅链接以获得更好的解释。

Audio Normalization - 计算文件中当前最响亮的样本,然后对每个样本应用相等的增益,使最响亮的样本现在处于最大音量。

Dynamic-range Compression - 当一个或一组样本超过阈值时降低其增益,然后将增益应用于整个文件以补偿这种降低。

iOS API 可能已经有办法做到这些,但我不确定。希望这能给你一些可以抓住的绳子。

【讨论】:

以上是关于iOS 音频基础知识(一)的主要内容,如果未能解决你的问题,请参考以下文章

Android音频开发:音频基础知识

Android音频开发:音频基础知识

Android音频开发:音频基础知识

iOS 音频系列之一:Core Audio简介

Android音频开发:如何采集一帧音频

Android音频开发:如何播放一帧音频