AV Foundation 的含义
用于处理基于时间的数据媒体数据的高级 Objective-C
框架。充分利用了多核硬件的优势并大量使用 block
和 GCD
机制将复杂的计算机进程党在后台线程进行。
AV Foundation 的适用范围
![](https://img.haomeiwen.com/i3512027/9be4d66ef889f09d.png)
-
Core Audio
处理所有音频事件的框架。 -
Core Video
针对数字视频所提供的管道模式。为相对应的Core Media
提供图片缓存和缓池支持,提供了一个能够对数字视频逐帧访问的接口。 -
Core Media
Core Media
是AV Foundation
所用到的低层级媒体管道的一部分。提供对音频样本和视频帧处理所需的低层级数据类型和接口。 -
Core Animation
提供具有美观、流畅的动画效果。
解析AV Foundation
AV Foundation
的核心功能:
-
音频播放和记录
AVAudioPlayer
和AVAudioRecorder
可以在应用程序中提供一种更简单的整合音频播放和记录的功能。 -
媒体文件检查
AV Foundation
提供检查正在使用的媒体文件的功能。可以查看媒体资源是否可以用于回放或被编辑和导出。还可以获取内容持续时间、创建日期或首选播放音量等。基于AVMetadataItem
类提供功能强大的元数据支持。 -
视频播放
AV Foundation
框架可以让你播放从本地或者远程流中获取的视频资源,并对视频播放和内容的展示进行控制。这部分的核心类是AVPlayer
和AVPlayerItem
。 -
媒体捕捉
摄像头捕捉的核心类是AVCaptureSession
,作为所有活动的汇集点来接收摄像头设备由各路流发过来的电影和图片。 -
媒体编辑
AV Foundation
框架允许创建可以将多个音频和视频资源进行组合的应用程序,允许修改和编辑独立的媒体片段、随时修改音频文件的参数以及添加动画标题和场景切换效果。 -
媒体处理
AVAssetReader
和AVAssetWriter
类提供直接访问视频帧和音频样本的功能。
了解数字媒体
-
数字媒体采样
一种是时间采样,即捕捉一个信号周期内的变化;一种是空间采样,用在图片数字化何其他可视化媒体内容数字化的过程中。 -
音频采样介绍
通过对信号的振幅(测量频率的相对强度),以及频率(信号频率)进行采样。
数字媒体压缩
-
视频编解码器
对于视频文件来说,主要可以归结为H.264
和Apple ProRes
。 -
音频编解码器
ACC
(高级音频编码)是H.264
标准相应的音频处理方式,目前已成为音频流和下载的音频资源中最主流的编码方式。
AV Foundation
和Core Audio
提供对MP3
数据解码的支持,但是不支持对其进行编码。
容器格式
容器格式被认为元文件格式。包含一种或更多种媒体类型,比如:.mov(视频)
、.m4v(视频)
、.mpg(动态图像专家组,可以是视频也可以是音频)
、.m4a(音频)
等。
初识AV Foundation
iOS开发中,运行下面的代码可以听见默认设置的声音读出“hello lily”
。
AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init];?//语音合成器
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:@"hello lily"];//将字符串合成为语音对象
[synthesizer speakUtterance:utterance];//生成音频
实现两个人的文本到语音的对话功能
Speaker.h
文件demo:
#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
@interface Speaker : NSObject
+ (instancetype)speaker;
- (void)begainConversation;
@end
Speaker.m
文件demo:
#import "Speaker.h"
@interface Speaker ()
@property (nonatomic, strong) AVSpeechSynthesizer *synthesizer;
@property (nonatomic, strong) NSArray *voicesArray;
@property (nonatomic, strong) NSArray *speechStringArr;
@end
@implementation Speaker
+ (instancetype)speaker
{
return [[self alloc] init];
}
- (id)init
{
self = [super init];
if (self) {
_synthesizer = [[AVSpeechSynthesizer alloc] init];
//设置语言类别
_voicesArray= @[[AVSpeechSynthesisVoice voiceWithLanguage:@"en-GB"],[AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"]];
_speechStringArr = [self buildConversation];
}
return self;
}
- (NSArray *)buildConversation
{
return @[@"hello i am Sam what's your name?",
@"i am lily",
@"how old are u?",
@"18 years old this year",
@"Really so young!",
@"Thank you, but I don't think so",
@"why?",
@"Because I haven't a boyfriend",
];
}
- (void)begainConversation
{
for (NSUInteger i = 0; i<self.speechStringArr.count; i++) {
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:self.speechStringArr[i]];
utterance.voice = self.voicesArray[i%2];
utterance.rate = 0.5f; //播放语音内容的速率([0.0-1.0]值区间)
utterance.pitchMultiplier = 0.9f;[0.5低音调-2.0高音调]//播放特定语句时改变声音的音调
utterance.postUtteranceDelay = 0.1f;//语音合成器在播放下一语句之间的暂停时间
[self.synthesizer speakUtterance:utterance];
}
}
在ViewController
中调用:
Speaker *speaker = [[Speaker alloc] init];
[speaker begainConversation];
网友评论