2019独角兽企业重金招聘Python工程师标准>>>

如摘要上的情形,我们需要动态自动修改音量。这个过程AVFoundation给我们提供了相关方法。调节音量很简单的两个方法,但其中涉及到音频轨道的知识。此例中是两首歌,两首歌分别占用一个轨道。我们获取到对应轨道上音频声音控制的属性,使用对应的调节方法设置音量变化,然后通过专门的类赋给播放器(AVPlayerItem)的对应属性,完成整个操作。

一、相关类和方法的介绍

a、AVAudioMix

AVMutableAudioMix是AVAudioMix的子类,这个类控制着音频文件播放时的声音大小设置。通常来说,一个音频文件它的音量信息是固定的,如果我们要调节它的声音信息,就需要创建一个可变的声音信息类,也就是AVMutableAudioMix。

b、AVMutableAudioMixInputParameters

它实例出来的对象是AVAudioMix的一个属性,对声音的设置,根本上就是设置它。它有两个方法可以让我们动态的设置声音变化。

从工程中获取资源到更改声音

- (void)automaticAidouVolume {//得到资源NSURL *url1  = [[NSBundle mainBundle] URLForResource:@"song" withExtension:@"mp3"];NSURL *url2  = [[NSBundle mainBundle] URLForResource:@"song2" withExtension:@"mp3"];NSArray *key = @[@"tracks",@"duration",@"commonMetadata"];NSDictionary *dic = @{AVURLAssetPreferPreciseDurationAndTimingKey:@YES};self.asset1  = [AVURLAsset URLAssetWithURL:url1 options:dic];self.asset2  = [AVURLAsset URLAssetWithURL:url2 options:dic];__block CMTime endTime1;__block CMTime endTime2;//在资源加载的时候,通知框架加载一些key数组里面包含的信息[self.asset1 loadValuesAsynchronouslyForKeys:key completionHandler:^{endTime1 = _asset1.duration;}];[self.asset2 loadValuesAsynchronouslyForKeys:key completionHandler:^{endTime2 = _asset2.duration;
//        NSLog(@"%@")CMTimeShow(endTime2);}];CMTimeRange timeRange1 = CMTimeRangeMake(kCMTimeZero, endTime1);CMTimeRange timeRange2 = CMTimeRangeMake(kCMTimeZero, _asset2.duration);AVAssetTrack *assetTrack;//创建轨道容器,并加入两个轨道self.compositon = [[AVMutableComposition alloc]init];self.track1 = [self.compositon addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];self.track2 = [self.compositon addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];assetTrack  = [[self.asset1 tracksWithMediaType:AVMediaTypeAudio] firstObject];[self.track1 insertTimeRange:timeRange1 ofTrack:assetTrack atTime:kCMTimeZero error:nil];assetTrack  = [[self.asset2 tracksWithMediaType:AVMediaTypeAudio] firstObject];[self.track2 insertTimeRange:timeRange2 ofTrack:assetTrack atTime:kCMTimeZero error:nil];//音频变化时间的一些信息设置CMTime audio1 = CMTimeMake(3, 1);CMTime audio2 = CMTimeMake(10, 1);CMTime audio3 = CMTimeMake(20, 1);CMTimeRange range = CMTimeRangeMake(audio2, audio3);//得到对应轨道中的音频声音信息,并更改AVMutableAudioMixInputParameters *parameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:self.track1];[parameters setVolume:0.2 atTime:audio1];    //从audio1开始让声音变为0.2[parameters setVolumeRampFromStartVolume:0.2 toEndVolume:0.8 timeRange:range];  //在range这个时间段让声音音量平滑的从02变为0.8//赋给对应的类self.audioMix = [AVMutableAudioMix audioMix];self.audioMix.inputParameters = @[parameters];//配置到播放器中self.item = [AVPlayerItem playerItemWithAsset:[self.compositon copy]];self.item.audioMix = self.audioMix;self.player = [AVPlayer playerWithPlayerItem:self.item];[self.player play];
}

全部代码

转载于:https://my.oschina.net/zhengjianhua/blog/697661

ios混合音频、设置渐变音量、画外音音量相关推荐

  1. 全网最详细的自定义设置 iPhone 充电提示音教程!除了音频,视频也可以!

    iOS 14 正式版出来后,热点不断,App 资源库.苹果小程序.屏幕小组件热点不断,不过这两天最火的莫过于 iPhone充电提示音,网上教程很多,但是大多数都是提供一些现成的铃声和快捷指令供你使用, ...

  2. iOS 9音频应用播放音频之音量设置与声道设置

    iOS 9音频应用播放音频之音量设置与声道设置 iOS 9音频应用音量设置 音量又称响度.音强,是指人耳对所听到的声音大小强弱的主观感受,其客观评价尺度是声音的振幅大小.在iOS 9音频应用的应用中, ...

  3. multipartfile 获取音频时长_抖音音频下载捷径:一键提取音频,安卓+ios全通用,完全免费...

    本文相关:抖音音频提取.抖音音频快捷指令.捷径怎么获取抖音音乐- 昨天有抖友分享了一个抖音短视频链接,告诉我,她很喜欢这个视频里的歌曲,但是在很多歌曲app上面却找不到相同的版本,然后就问我,有没有什 ...

  4. AVAudioPlayer 本地音频设置第三弹:后台播放音频

    AVAudioPlayer 本地音频设置第三弹:后台播放音频 设备/引擎:Mac(11.6)/cocos 开发工具:Xcode(13.0) 开发语言:Objective-c/c++ 开发需求:满足后台 ...

  5. Pr 入门教程如何录制画外音?

    欢迎观看 Premiere Pro  教程,小编带大家学习  Pr 的基本编辑技巧,了解如何录制画外音.Premiere Pro 允许您在序列播放时将画外音直接录制到序列中. 在本文中,我要使用的是 ...

  6. Pr 入门教程:如何录制画外音?

    欢迎观看 Premiere Pro 教程,小编带大家学习 Pr 的基本编辑技巧,了解如何录制画外音.Premiere Pro 允许您在序列播放时将画外音直接录制到序列中. 在本文中,我要使用的是 Pr ...

  7. iOS 播放音频的几种方法

    Phone OS 主要提供以下了几种播放音频的方法: System Sound Services AVAudioPlayer 类 Audio Queue Services OpenAL 1. Syst ...

  8. android音频系统(4):AudioService之音量管理

    前言:AudioService这个系统服务包含或者使用了几乎所有与音频有关的内容,AudioService是音频系统在java层的大本营: android音频系统,分为两个部分:数据流和策略: 数据流 ...

  9. 获取与设置windows系统下音频设备音量

    一.获取设备音量 不同系统获取音量的方法是有差别的,比如vista和win7获取音量的方式就是不同的,因此,我们应该首先获取系统的信息,然后根据系统信息,用其对应的方法获取音量. 1.OSVERSIO ...

最新文章

  1. Http环境下的保持连接方式
  2. 科学研究发现,盲人用时间感知空间
  3. SQL数据库面试题以及答案
  4. nginx基本配置与参数说明
  5. html页面懒加载灰度图片大小,小程序初级指南--图片及其优化
  6. android入门--环境搭建
  7. 《Python Cookbook 3rd》笔记(4.8):跳过可迭代对象的开始部分
  8. 渡劫飞升的伪原创工具
  9. PB开发境界 多个DW进行update
  10. Oracle 11g Release 1 (11.1) Oracle 本文索引的四种类型
  11. Tuple和 ValueTuple
  12. 阿里巴巴字体库的下载以及三种用法
  13. 计算机表演赛安徽,全国青少年科技创新活动服务平台
  14. HTML知识点学习(二)
  15. 数据挖掘算法和实践(四):支持向量机(iris鸢尾花数据集)
  16. 如何实现电脑时间与北京时间同步
  17. 在matlab内绘制函数图像
  18. mysql extendedstatus_mysqladmin的extended-status指令查看 mysql各状态
  19. 2022下半年CV计算机视觉领域可投稿国际会议列表(含录用率)
  20. 解决com.mchange.v2.c3p0.DriverManagerDataSource. Could not load driverClass com.mysql.cj.jdbc.Driver报错

热门文章

  1. 自动档汽车的驾驶技巧(ZT)
  2. 不能将iMovie 剪辑安装在“未命名”上,因为需要macOS v10.15.6或更高版本。
  3. Android 获取实时天气数据
  4. mysql geo 函数_地理位置geo处理之mysql函数
  5. CentOS-6.5-x86_64 安装 jdk-7u79-linux-x64.gz
  6. online域名价值_使用online
  7. 打印选课学生名单 (25 分)
  8. logstash启动失败的问题追查
  9. 分布式通信:发布订阅
  10. 荷兰通过严格网络中立法案 禁止“零费率”服务