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

iOS 9音频应用音量设置

音量又称响度、音强,是指人耳对所听到的声音大小强弱的主观感受,其客观评价尺度是声音的振幅大小。在iOS 9音频应用的应用中,经常会出现播放的音乐音量过大或者过小。此时iOS 9音频应用开发者可以使用AVAudioPlayer类中的volume属性对音频文件的音量进行设置。其语法形式如下:

  • var volume: Float

其中,该属性设置的值是浮点类型,范围在0.0到1.0之间。当设置的值为0.0时,表示静音;当设置的为为1.0时,表示最大音量。

注意:如果开发者想要让耳机系统发挥出最佳状态,谨记把音量调到最合适的水平,如果你对现场真实的音量不熟悉,那么就多找机会去听现场!

【示例2-4】以下将以第一个实例为基础,实现音量的调节。具体的操作步骤如下:

1.显示更多设置项

(1)将主视图中的Bar Button Item控件与动作showMoreSettingsView进行关联。

(2)打开ViewController.swift文件,编写代码,实现显示更多设置项,代码如下:

  • @IBAction func showMoreSettingsView(sender: AnyObject) {
  • UIView.beginAnimations("", context: nil)
  • UIView.setAnimationDuration(2)
  • moreSettingsView.hidden=false
  • UIView.commitAnimations()
  • }

2.ios9设置音量

(1)将主视图中的Volume Slider与插座变量volumeSlider进行关联。

(2)将主视图中的Volume Slider与动作setVolume进行关联。

(3)打开ViewController.swift文件,编写代码,首先需要在viewDidLoad()方法中添加一行代码,实现对音量的设置,这个音量是初始音量,代码如下:

  • override func viewDidLoad() {
  • super.viewDidLoad()
  • // Do any additional setup after loading the view, typically from a nib.
  • moreSettingsView.hidden=true
  • let path=NSBundle.mainBundle().pathForResource("Liekkas", ofType: "mp3")
  • ……
  • audioEffect?.prepareToPlay()
  • audioEffect?.volume=volumeSlider.value                                               //设置音量大小
  • }

(4)在ViewController.swift文件中的setVolume()动作编写代码,实现通过滑块调节音频大小的功能。代码如下:

  • @IBAction func setVolume(sender: AnyObject) {
  • audioEffect?.volume=volumeSlider.value
  • self.performSelector(("hideMoreSettingsView"), withObject: self, afterDelay: 3)
  • }
  • //隐藏更多设置项界面
  • func hideMoreSettingsView(){
  • moreSettingsView.hidden=true
  • }

此时运行程序,在模拟器界面中轻拍播放按钮,此时音频文件就会开始播放,当开发者轻拍导航栏中的更多按钮后,会弹出更多设置项的界面,如图2.26所示。当开发者可以滑动滑块来控件音量的大小。

图2.26  设置音量

iOS 9音频应用声道设置

为了让声音可以还原真实的效果,所以有了声道的产生。声道是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号。通过声道,开发人员可以调整声音的强弱以及延迟模拟各种真实的声音效果。一般情况下声音在录制时采用设备的不同,可以分为单声道、立体声、3D环绕声、四声环绕、5.1声道和7.1声道。

1.单声道

所谓的单声道,就是声音只由一只音箱产生,听众可以很明显地听出声音的来源就是音箱所摆放的位置,其本身的表现力较为平淡;当通过两个扬声器回放单声道信息的时候,我们可以明显感觉到声音是从两个音箱正中间传递到我们耳朵里的。这种缺乏位置感的录制方式用现在的眼光看自然是很落后的,但在声卡刚刚起步时,已经是非常先进的技术了。

2.立体声

单声道缺乏对声音的位置定位,而立体声技术则彻底改变了这一状况。它利用了两个独立声道进行录音,整个过程不加任何的声音处理。立体声系统的再现需要一对音箱来完成,它通过调整系统中两只音箱发出声音的大小,让我们误认为声源来自两只音箱之间直线段中的任意位置。特别是当使用耳机的时候,由于左右两边的声音串音情况很少发生,所以声音的定位比较准确;再加上比较真实的音场感觉,它的表现力比单声道真实得多。立体声虽然可以改变单声道缺乏对声音的位置定位功能,但是它的不足也是很明显的。例如,对音箱的位置摆放要求较高,摆位的不好会直接影响声音的表达。

3.3D环绕声

3D 环绕声有时也称作3D增强立体声(3D Enhancement)。它是一种模拟环绕声系统。左、右声道的立体声信号,经过数字信号处理后,通过左、右两路音箱,产生三维的环绕声场效果。

4.四声环绕

四声道环绕规定了4个发音点,分别为前左、前右,后左、后右。听众则被包围在这中间。同时还建议增加一个低音音箱,以加强对低频信号的回放处理。这也就是如今4.1声道音箱系统广泛流行的原因。就整体效果而言,四声道系统可以为听众带来来自多个不同方向的声音环绕,可以获得身临其境的听觉感受,给用户以全新的体验。如今四声道技术已经广泛融入于各类中高档声卡的设计中,成为未来发展的主流趋势。

5.5.1声道

5.1声道已广泛运用于各类传统影院和家庭影院中。一些比较知名的声音录制压缩格式,譬如杜比AC-3(Dolby Digital)、DTS等都是以5.1声音系统为技术蓝本的。其中“.1”声道,则是一个专门设计的超低音声道,这一声道可以产生频响范围20~120Hz的超低音。其实5.1声音系统来源于4.1环绕,不同之处在于它增加了一个中置单元。这个中置单元负责传送低于80Hz的声音信号,在欣赏影片时有利于加强人声,把对话集中在整个声场的中部,以增加整体效果。

6.7.1声道

7.1声道系统的作用简单来说就是在听者的周围建立起一套前后声场相对平衡的声场。

通过不同声道模式采集的声音(录音的声音)在播放时由于选择的播放声道的模式不同,会产生不一样的播放效果。声音在播放时的声道模式有3种,分别为左声道、右声道以及左右混合。以下就是对这3种在播放时声道模式的介绍。

  • q  左声道:电子设备中模拟人类左耳的听觉范围产生的声音输出。
  • q  右声道:电子设备中模拟人类右耳的听觉范围产生的声音输出。
  • q  左右混合:电子设备中模拟人类左右耳的听觉范围产生的声音输出。

在iOS中对于声音在播放时的声道模式是可以进行设置的,此时需要使用到pan属性,其语法形式如下:

  • var pan: Float

其中,该属性设置的值可以为-1.0、0.0以及1.0。这3个值的说明如下:

  • q  -1.0:表示左声道。
  • q  0.0:表示左右混合。
  • q  1.0:表示右声道。

【示例2-5】以下将以第一个实例为基础,实现声道模式的设置。具体的操作步骤如下:

(1)将主视图中的Pan Segmented Control与插座变量panSegmentedControl进行关联。

(2)将主视图中的Pan Segmented Control与动作setPan进行关联。

(3)打开ViewController.swift文件,编写代码,首先需要在viewDidLoad()方法中添加一行代码,实现对声道模式的设置,这个声道是初始声道。代码如下:

  • override func viewDidLoad() {
  • super.viewDidLoad()
  • // Do any additional setup after loading the view, typically from a nib.
  • moreSettingsView.hidden=true
  • let path=NSBundle.mainBundle().pathForResource("Liekkas", ofType: "mp3")
  • ……
  • audioEffect?.volume=volumeSlider.value
  • audioEffect?.pan = -1.0                                                                      //将声道设置为左声道
  • }

(4)在ViewController.swift文件中的setPan动作编写代码,实现通过声道模式的设置。代码如下:

  • @IBAction func setPan(sender: AnyObject) {
  • let index=panSegmentedControl.selectedSegmentIndex
  • if(index==0){
  • audioEffect?.pan = -1.0                                                              //将声道设置为左声道
  • hideMoreSettingsView()
  • }else if(index==1){
  • audioEffect?.pan = 0.0                                                               //将声道设置为左右混合
  • hideMoreSettingsView()
  • }else if(index==2){
  • audioEffect?.pan = 1.0                                                               //将声道设置为右声道
  • hideMoreSettingsView()
  • }
  • }

此时运行程序,在模拟器界面中轻拍播放按钮,音频文件就会开始播放,此时听到的声音是来自左声道的;当开发者轻拍导航栏中的更多按钮后,会弹出更多设置项的界面。在声道这一项中开发者可以选择声音进行播放时所使用的声道模式。

本文选自:iOS 9音频应用开发基础教程大学霸内部资料,转载请注明出处,尊重技术尊重IT人!

iOS 9音频应用播放音频之音量设置与声道设置的更多相关文章

  1. iOS 9音频应用播放音频之iOS 9音频播放进度

    iOS 9音频应用播放音频之iOS 9音频播放进度 iOS 9音频应用开发播放进度 音频文件在播放后经过了多久以及还有多久才可以播放完毕,想必是用户所关注的问题.为了解决这一问题,在很多的音乐播放器中 ...

  2. iOS 9音频应用播放音频之控制播放速度

    iOS 9音频应用播放音频之控制播放速度 iOS 9音频控制播放速度 iOS9音频文件在播放时是以一定的速度进行的.这个速度是可以进行更改的,从而实现iOS9音频文件的快速播放和慢速播放功能.要实现i ...

  3. iOS 9音频应用播放音频之播放控制暂停停止前进后退的设置

    iOS 9音频应用播放音频之播放控制暂停停止前进后退的设置 ios9音频应用播放控制 在“iOS 9音频应用播放音频之ios9音频基本功能”一文可以看到AVAudioPlayer类有很多的属性以及方法 ...

  4. iOS 9音频应用播放音频之第一个ios9音频实例2

    iOS 9音频应用播放音频之第一个ios9音频实例2 ios9音频应用关联 iOS9音频应用中对于在主视图上添加的视图或控件,在使用它们时必须要与插座变量进行关联.ios9插座变量其实就是为主视图中的 ...

  5. iOS 9音频应用播放音频之第一个ios9音频实例

    iOS 9音频应用播放音频之第一个ios9音频实例 第一个ios9音频实例 为了让开发者可以对上面的内容有更加深入的了解,本节将实现播放音频的第一个实例.在此实例中会涉及到项目的创建.界面设计.关联以 ...

  6. iOS 9音频应用播放音频之ios9音频基本功能

    iOS 9音频应用播放音频之ios9音频基本功能 在iOS 9音频应用开发中最为简单和常用的就是AVFoundation框架中的AVAudioPlayer类.虽然AVAudioPlayer类不能播放网 ...

  7. 解决在ios下不能自动播放音频的问题

    在ios下面是不允许自动播放音频这个操作的,不过我们可以使用微信提供的sdk来做到自动播放音乐的功能 wx.ready(()=>{}) 引入微信的sdk,之后在回调函数里面执行主动触发背景音乐播 ...

  8. Android、iOS平台RTMP/RTSP播放器实时音量调节

    介绍移动端RTMP.RTSP播放器实时音量调节之前,我们之前也写过,为什么windows播放端加这样的接口,windows端播放器在多窗口大屏显示的场景下尤其需要,尽管我们老早就有了实时静音接口,相对 ...

  9. MFC录制音频和播放音频

    一.录制音频 在windows中提供了相应的API函数(waveIn这个族的函数)实现录音功能:在使用这些函数时,一定要引入相应的头文件 #include <windows.h> #inc ...

随机推荐

  1. Python学习笔记(二十)调试

    摘抄自: https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143191557 ...

  2. 重构改善既有代码设计--重构手法14:Hide Delegate (隐藏委托关系)

    客户通过一个委托类来调用另一个对象.在服务类上建立客户所需的所有函数,用以隐藏委托关系. 动机:封装即使不是对象的最关机特性,也是最关机特性之一.“封装”意味着每个对象都应该少了解系统的其他部分.如此 ...

  3. 【NOI2017】游戏 2-sat算法

    [题目]LibreOJ [题意]n场游戏,有三种车ABC,给定长度为n的字符串,'a'表示不能选A,'b''c'同理,'x'表示不限,至多d个'x'.有m个限制(i,hi,j,hj)表示如果第i场选择 ...

  4. How to reset XiaoMi bluetooth headphone Youth edition.

    To reset the speaker 1. Long press the phone call button to shut off the speaker 2. Connect the char ...

  5. 2017 ACM暑期多校联合训练 - Team 4 1012 HDU 6078 Wavel Sequence (模拟)

    题目链接 Problem Description Have you ever seen the wave? It's a wonderful view of nature. Little Q is a ...

  6. 2017ACM暑期多校联合训练 - Team 3 1003 HDU 6058 Kanade's sum (模拟)

    题目链接 Problem Description Give you an array A[1..n]of length n. Let f(l,r,k) be the k-th largest elem ...

  7. typeof运算符

    javascript中typeof用来判断一个变量或表达式的数据类型. typeof 返回值有六种可能: "number," "string," "b ...

  8. 39、请用代码简答实现stack

    栈和队列是两种基本的数据结构,同为容器类型.两者根本的区别在于: stack:后进先出 queue:先进先出 PS:stack和queue是不能通过查询具体某一个位置的元素而进行操作的.但是他们的排列 ...

  9. xv6/bootasm.S + xv6/bootmain.c

    xv6/bootasm.S #include "asm.h" #include "memlayout.h" #include "mmu.h" ...

  10. shell读取文件的每一行内容并输出【转】

    写法一: #!/bin/bash while read line do echo $line done < file(待读取的文件) 写法二: #!/bin/bash cat file(待读取的 ...