为什么iphone6耳机耳机录音时开始有璞的一声

开发过程中录音和播放这块碰到了一些问题,麻烦的主要有三个:
检测是否有声音输入设备
当有多个声音输出设备时,指定声音输出设备
检测耳机的插入和拔出
第一个问题,对于iTouch和iPad等本身不带麦克风的设备,需要检查是否插入了带录音功能的耳机;对于iphone,由于其本身已近自带麦克风,所以相对容易。第二个问题,当在本身带有外放的设备上插入耳机等输出设备时,就出现了多个输出设备,需要实现在程序中指定将声音输出到哪里。第三个问题,插入/拔出耳机必然引起声音输出设备的变化,而如果是在iTouch和iPad上插入/拔出了带麦克风的耳机,则必然引起声音输入设备的变化。
1. 检测声音输入设备
2. 检测声音输出设备
对于输出设备的检测,我们只考虑了2个情况,一种是设备自身的外放(iTouch/iPad/iPhone都有),一种是当前是否插入了带外放的耳机。iOS已经提供了相关方法用于获取当前的所有声音设备,我们只需要检查在这些设备中是否存在我们所关注的那几个就可以了。
获取当前所有声音设备:
在iOS上所有可能的声音设备包括:
每一项的具体代表的设备请查考iOS文档,此处我们关注的是是否有耳机,所以只需要检查在route中是否有Headphone或Headset存在,具体方法如下:
请注意,由于获取AudioRoute的相关方法不能再simulator上运行(会直接crush),所以必须先行处理。
3. 设置声音输出设备
在我们的项目中,存在当正在播放时用户会插入或拔出耳机的情况。如果是播放时用户插入了耳机,苹果会自动将声音输出指向到耳机并自动将音量调整为合适大小;如果是在用耳机的播放过程中用户拔出了耳机,声音会自动从设备自身的外放里面播出,但是其音量并不会自动调大。
经过我们的测试,我们发现当播放时拔出耳机会有两个问题(也许对你来说不是问题,但是会影响我们的app):
音乐播放自动停止
声音音量大小不会自动变大,系统仍然以较小的声音(在耳机上合适的声音)来进行外放
对于第一个问题,实际上就是需要能够检测到耳机拔出的事件;而第二个问题则是需要当耳机拔出时强制设置系统输出设备修改为系统外放。
强制修改系统声音输出设备:
可以看到我们修改了AudioSession的属性“kAudioSessionProperty_OverrideAudioRoute”,该属性在iOS文档上的解释如下:
kAudioSessionProperty_OverrideAudioRoute
&Specifies
whether or not to override the audio session category’s normal audio route. Can be set with one of two values:&,
which specifies that you want to use th and&,
when sends output audio to the speaker. A write-only&UInt32&value.&
Upon an audio route change (such
as by plugging in or unplugging a headset), or upon interruption, this property reverts to its default value. This property can be used only with the&&(or
the equivalent&)
可以看到,该属性只有当category为kAudioSessionCategory_PlayAndRecord或者AVAudioSessionCategoryRecord时才能使用。所以我们还需要能够设置AudioSession的category。
4. 设置Audio工作模式(category,我当做工作模式理解的)
iOS系统中Audio支持多种工作模式(category),要实现某个功能,必须首先将AudioSession设置到支持该功能的工作模式下。所有支持的工作模式如下:
具体每一个category的功能请参考iOS文档,其中AVAudioSessionCategoryRecord为独立录音模式,而AVAudioSessionCategoryPlayAndRecord为支持录音盒播放的模式,而AVAudioSessionCategoryPlayback为普通播放模式。
设置category:
5. 检测耳机插入/拔出事件
耳机插入拔出事件是通过监听AudioSession的RouteChange事件然后判断耳机状态实现的。实现步骤分为两步,首先注册监听函数,然后再监听函数中判断耳机状态。
注册监听函数:
我们的需求是当耳机被插入或拔出时做出响应,而产生AouteChange事件的原因有多种,所以需要对各种类型进行处理并结合当前耳机状态进行判断。在iOS文档中,产生AouteChange事件的原因有如下几种:
具体每个类型的含义请查阅iOS文档,其中我们关注的是kAudioSessionRouteChangeReason_NewDeviceAvailable有新设备插入、kAudioSessionRouteChangeReason_OldDeviceUnavailable原有设备被拔出以及kAudioSessionRouteChangeReason_NoSuitableRouteForCategory当前工作模式缺少合适设备。
当有新设备接入时,如果检测到耳机,则判定为耳机插入事件;当原有设备移除时,如果无法检测到耳机,则判定为耳机拔出事件;当出现“当前工作模式缺少合适设备时”,直接判定为录音时拔出了麦克风。
很明显,这个判定逻辑实际上不准确,比如原来就有耳机但是插入了一个新的audio设备或者是原来就没有耳机但是拔出了一个原有的audio设备,我们的判定都会出错。但是对于我们的项目来说,其实关注的不是耳机是拔出还是插入,真正关注的是有audio设备插入/拔出时能够根据当前耳机/麦克风状态去调整设置,所以这个判定实现对我们来说是正确的。
监听函数的实现:
当检测到相关事件后,通过NSNotificationCenter通知observers耳机(有无麦克风)拔出/插入事件拔出事件,从而触发相关操作。
6. 事件处理
对于耳机(有无麦克风)拔出/插入事件,一般需要做如下处理:
强制重设系统声音输出设备(防止系统以较小声音在外放中播放)
如果拔出前正在播放,则启动已经暂停的播放(当耳机拔出时,系统会自动暂停播放)
当拔出前正在录音,则需要检查麦克风情况并决定是否停止录音(如果录音时从iTouch/iPad等设备上拔出了带麦克风的耳机)
AudioHelper.h
AudioHelper.m
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:117606次
积分:1324
积分:1324
排名:第17978名
原创:14篇
转载:41篇
评论:27条
(1)(8)(5)(1)(1)(4)(8)(1)(3)(24)
对学习有用的网址有人说 30 软妹币的《未上锁的房间3》让自己这个月都吃不起方便面了,好吧,其实在小...
iPad 2仍然是使用率最高的iPad设备,这可让iPad mini和iPad Air情何以堪,要知道这两...
游戏制作水平很高,画面充满时代感,复古又满满新意的玩法,游戏本身支持中文设定。
一个季度“仅”卖出990万台iPad,大家都认为苹果的平板电脑业务不行了,iPad Pro加入...
Mate 8 所用的 Kirin 950 处理器已经发布了,性能表现十分优异,但网络基带堪忧。
本月早些时候开发者在 OS X El Capitan 代码中发现了关于新一代Mac Pro的证据,这个产...
苹果真是要对中东市场重视起来了。话说,还真是想听一下Siri说话时舌头打圈的声音呢。
摩托罗拉的手机和谷歌的手机,到底哪家的是性价比之王呢?
由韩国游戏厂商 NEXON 开发并运营的幻想风 SRPG(战棋RPG)游戏《奇想之战(Fantasy W...
由 Inventain Mobile 推出的新作《让我出去(Swipe Me Out!)》是一款极其考验玩家反...
小编今天想要介绍给大家的并不是什么回到过去的技能,而是一款真正将很多游戏大腕汇聚...
近日游戏开发商 LoadComplete 在苹果商店当中推出了其休闲射击新作《吞魔者(Devil Eat...
小伙伴们,是不是觉得最近的游戏有些沉闷呢,不是卡牌就是三消,确实让人腻味得很啊。...
不要以为育碧发布的游戏都是大作类型,其实育碧也已经开始在一些休闲游戏方面着手了,...
随着技术的不断发展,电子游戏作品也开始朝着更加丰富和全面的方向发展,除了PC和主机...
作为全球首款紫水晶iPhone手机壳,这可不是一颗颗紫水晶镶嵌那么小气哦,而是整块水晶...
放在金色款 12 英寸 MacBook 旁边效果更佳,可惜,这只是一组设计图。
从 PC 到 iOS 设备,或者从 iOS 设备到 PC 之间的数据传输将会变得更简单。
苹果针对 Apple Watch 推出了多种款式的表带,其中运动型表带因为价格便宜,并且高度...
玫瑰金 iPhone 6s 或者 iPhone 6s Plus 终于获得重要的镜头武装了,可喜可贺~
苹果已经为那些打算使用 Apple TV 进行多人游戏的用户提供了第三方游戏手柄。
让你可以在 MacBook 上进行 USB TYPE-C 接口与普通标准接口之间轻松的转换,它就是那...
全新的触宝 iPhone6s/6s Plus OC初色系列钢化玻璃贴膜,扎实的做工令人印象深刻,安装...
我的5S插上耳机为什么不能录音呢?
注册时间 最后登录
在线时间37 小时 UID
主题帖子人气
青苹果, 积分 131, 距离下一级还需 69 积分
如题了,插上耳机为什么不能录音呢?应该说是耳机的麦克风都不能使用了,只能听不能说,电话也不能通话,录音也不行,原装耳机,是不是还要设置个啥?
注册时间 最后登录
在线时间76 小时 UID
主题帖子人气
麦克风坏了啊。这么简单回楼主魂淡啊于8 分钟前发表的: 如题了,插上耳机为什么不能录音呢?应该说是耳机的麦克风都不能使用了,只能听不能说,电话也不能通话,录音也不行,原装耳机,是不是还要设置个啥?......
注册时间 最后登录
在线时间37 小时 UID
主题帖子人气
麦克风坏了啊。这么简单
换了四条耳机总不能全都是坏的吧
注册时间 最后登录
在线时间452 小时 UID
主题帖子人气
耳麦坏了?
注册时间 最后登录
在线时间37 小时 UID
主题帖子人气
耳麦坏了?
都是好的 ,用在5代上都可以用,一插上5S来就不行
注册时间 最后登录
在线时间118 小时 UID
主题帖子人气
我的也是 插上耳机不能录音 同求解答。。
注册时间 最后登录
在线时间98 小时 UID
主题帖子人气
手机有问题吧应该。排除不是耳机的问题了,那肯定就是硬件问题了。
注册时间 最后登录
在线时间96 小时 UID
主题帖子人气
注册时间 最后登录
在线时间167 小时 UID
主题帖子人气
是不是插件不支持
注册时间 最后登录
在线时间76 小时 UID
主题帖子人气
换了四条耳机总不能全都是坏的吧
刷机试试,刷机还不行就是硬件问题了。楼上有说插件问题,也有可能插件冲突啊,反正你都排除了耳机本身问题了,最简单粗暴的方法就是继续刷机看软件还是硬件问题咯。。。。
威锋旗下产品
Hi~我是威威!
沪ICP备号-1 丨 深公安网监备案号 5
增值电信业务经营许可证:
Powered by Discuz!iphone6 plus摔了后,其他地方没问题,就是插上耳机时没有插耳机的声音,之前会有啪的一声,_百度知道
iphone6 plus摔了后,其他地方没问题,就是插上耳机时没有插耳机的声音,之前会有啪的一声,
iphone6 plus摔其没问题插耳机没插耳机声音前啪声放歌耳机用没耳机插进声音
我有更好的答案
我没声音视
你这是强迫症而已
总感觉哪里坏了
没有任何使用问题的话你就是强迫症犯病了而已。。
为什么那个啪的声音没有了
你试试耳机麦克风好不好使了吧,非要说有问题也是最后一节卡扣松了而已。。
有东西在里面
非要这么较真你就去售后
其他类似问题
为您推荐:
iphone6的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁iphone5s耳机怎么录音的时候声音非常轻???_百度知道
iphone5s耳机怎么录音的时候声音非常轻???
提问者采纳
要耳机离源更近些
不管你调节手机声音多大,录的时候声音都一样,主要的解决办法就是增大声源音量和尽量靠近声源
可是我用4s的就很好啊,
可能是线接触不良,5s和4s的耳机是不一样的,改版了,所以接口可能也不一样,你试试用5s以及以上的自带的耳机试试
提问者评价
太给力了,你的回答完美的解决了我的问题!
其他类似问题
为您推荐:
耳机的相关知识
其他2条回答
录音音量等放录音音量才能调高
录音为什么要用耳机?
用耳机录的音质比较好,
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 iphone6耳机 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信