Audio 之 Audio Session

2024-08-22 18:38
文章标签 session audio

本文主要是介绍Audio 之 Audio Session,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在iOS开发中,音视频最重要的framework就是AVFoundation Framework了。从本文开始,主要谈基于AVFoundation的音频使用与处理。要掌握音频的使用,首先要了解的就是Audio Session了。


1、什么是Audio Session?

先给出官方的英文解释:

An audio session is the intermediary between your application and iOS for configuring audio behavior. Upon launch, your application automatically gets a singleton audio session. You configure it to express your application’s audio intentions. 

我的理解就是一个应用最基本的音频配置,来设置基本的应用与系统之间的音频处理方式,比如:

1)应用里的音频播放时是否要和其他应用的音频实现混音?或者让其他音频静音?

2)当iOS的闹钟响时应用内的音频是否要暂停?

3)当用户插拔耳机时应用应该如何反应?拔出耳机时是否要停止音乐?

4)关闭屏幕后音频是否暂停?

以上这些问题就是Audio Session要设置的东西。可以说要使用AVFoundation播放音乐,第一步就是要设置Audio Session,它影响应用内所以相关音频的播放方式。


2、Audio Session的设置实践

1)设置的根本方式:更改Audio Session的Category类别。

一个Audio Session Category就是一个Key,来描述应用音频处理方式的一个种类。通过设置Audio Session 不同的Category来更改配置。

总体上,Category有以下4类:

(1)是否允许混音

(2)打开静音和关闭屏幕时是否要静音

(3)是否支持音频输入,比如要录制音频

(4)是否支持音频输出,比如要播放音频


2)默认的Audio Session是怎样的?

如果你的应用正好符号Audio Session的默认设置,那么你也就不用特地来设置它了。默认的Audio Session具有如下设置:

(1)允许播放Playback不允许录制;

(2)当用户打开静音时,就是设备侧边的那个静音开关,那么应用内正在播放的音频将静音;

(3)当用户锁定屏幕或屏幕自动变暗时,应用内的应用内正在播放的音频将静音;

(4)当你应用内的音频开始时,如果这个时候有其他应用比如iPod正在播放音乐,那么iPod将暂停播放。

以上这一系列方式已经被打包成一个类别,就是AVAudioSessionCategorySoloAmbient,默认的类别


3)Audio Session不起作用的情况

两种:

(1)应用内根本不使用音频。(这不是白说吗?)

(2)应用使用System Sound Services 或者UIKit 的playInputClick。

前一种在上一篇文章中有说,后一种就是设置点击键盘的键盘音。


4)开始设置Audio Session(前提:在Xcode中加入AVFoundation.framework

(1)获取Audio Session对象


AVAudioSession *session = [AVAudioSession sharedInstance];


(2)基本设置

使用setCategory:error:或setCategory:option:error: 方法来实现

比如:

[session setCategory:kAudioSessionCategoryPlayback error:nil];


(3)Category介绍

// 下面这个类别用于音频比较次要的应用,应用的音频会和其他应用的音频实现混音

// 然后关闭屏幕或者静音开关打开时音频将静音。

NSString *const AVAudioSessionCategoryAmbient; 


// 默认类别

NSString *const AVAudioSessionCategorySoloAmbient; 


// 下面这个类别应用侧重音频播放,使用这个类别时,关闭屏幕或静音开关打开

// 时音频将继续播放,与其他应用音频不混音。要使应用能后台继续需要相关设置。

NSString *const AVAudioSessionCategoryPlayback; 


// 下面这个类别应用将侧重录音。将使播放的音频静音,屏幕关闭时录制音频将继续。

// 要使应用能后台继续需要相关设置。

NSString *const AVAudioSessionCategoryRecord;


// 下面这个类别应用允许音频播放和录制,比如用于VOIP语音通话应用。播放和录音

// 可以同时进行,关闭屏幕将可以继续。要使应用能后台继续需要相关设置。

 NSString *const AVAudioSessionCategoryPlayAndRecord; 


// 下面这个类别用于音频处理,详细见开发文档

NSString *const AVAudioSessionCategoryAudioProcessing; 


// 下面这个类别可以实现同时多个输出,详细见开发文档

NSString *const AVAudioSessionCategoryMultiRoute; 


4、总结

以上只是Audio Session最基本的设置,在开发文档中可以看到还有很多设置的内容。如果要开发高级的音频应用,可以再去看开发文档。

这篇关于Audio 之 Audio Session的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1097081

相关文章

Apple quietly slips WebRTC audio, video into Safari's WebKit spec

转自:http://www.zdnet.com/article/apple-quietly-slips-webrtc-audio-video-into-safaris-webkit-spec/?from=timeline&isappinstalled=0 http://www.zdnet.com/article/apple-quietly-slips-webrtc-audio-video-

LLM系列 | 38:解读阿里开源语音多模态模型Qwen2-Audio

引言 模型概述 模型架构 训练方法 性能评估 实战演示 总结 引言 金山挂月窥禅径,沙鸟听经恋法门。 小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖铁观音的小男孩,今天这篇小作文主要是介绍阿里巴巴的语音多模态大模型Qwen2-Audio。近日,阿里巴巴Qwen团队发布了最新的大规模音频-语言模型Qwen2-Audio及其技术报告。该模型在音频理解和多模态交互

Usb Audio Device Descriptor(10) Hid Device

对于 Standard Interface Descriptor, 当 bInterfaceClass=0x03时,即为HID设备。Standard Interface Descriptor如下 struct usb_standard_interface_descriptor{U8 bLength; /*Size of this descriptor in bytes*/U8 bDescrip

Android rk3399 UAC(USB Audio)开发笔记

一、UAC有1.0和2.0,因Windows对2.0支持不好,我使用的是UAC1.0驱动 内核配置:CONFIG_USB_CONFIGFS_F_UAC1          ---这个宏配置无需物理codec,使用虚拟 alsa codec  驱动路径:"kernel\drivers\usb\gadget\function\f_uac1.c" 内核配置:CONFIG_USB_CONFIGFS_

SIGMOD-24概览Part7: Industry Session (Graph Data Management)

👇BG3: A Cost Effective and I/O Efficient Graph Database in ByteDance 🏛机构:字节 ➡️领域: Information systems → Data management systemsStorage management 📚摘要:介绍了字节新提出的ByteGraph 3.0(BG3)模型,用来处理大规模图结构数据 背景

flask-login 生成 cookie,session

flask-login 生成 cookie,session Flask-Login login_user() 显示来自 Set-Cookie 标头的加密 cookie # 模拟一个用户类class User(UserMixin):def __init__(self, id):self.id = id@app.route('/login')def login():# 模拟用户登录过程user

Session用法详解

本文引用http://www.accdb.net/article.asp?id=1115 阅读本文章之前的准备   阅读本文章前,需要读者对以下知识有所了解。否则,阅读过程中会在相应的内容上遇到不同程度的问题。   懂得ASP/ASP.NET编程    了解ASP/ASP.NET的Session模型    了解ASP.NET Web应用程序模型    了解ASP.N

报错:Reached the max session limit(DM8 达梦数据库)

报错:Reached the max session limit - - DM8 达梦数据库 1 环境介绍2 数据库启动SYSTEM IS READY后面日志3 数据库刚启动日志4 达梦数据库学习使用列表 1 环境介绍 某项目无法连接数据库,报错:超过最大会话数限制 , 检查 dmdba ulimit -a openfiles 已改检查 dm.ini 其中 MAX_SESSION

Requests库对session的支持

场景:如何获取登录时响应消息中的sessionid,以及如何在后续请求中把sessionid添到cookie中 Requests库提供了一个Session类,通过requests库中的session对象,requests库会自动帮我们保存服务端返回的cookie数据(set-cookie里的内容),也会在HTTP发出请求时自动在消息头中放入cookie数据。 用py模拟客户端接收响应消息:

Flask-Session扩展,使用Redis存储会话数据

深入理解Flask-session扩展Redis Flask 应用中使用 flask-session 扩展将 session 数据存储在 Redis 中是一种高效且可扩展的方法,特别是在需要处理大量用户或需要分布式部署的应用中。以下是如何在 Flask 应用中配置 flask-session 以使用 Redis 存储 session 的步骤: 1. 安装必要的库 首先,你需要安装 Flask