iOS短视频源码音频采集过程中的音效实现

  • 时间:
  • 浏览:4
  • 来源:爱乐彩网站_爱乐彩下载_爱乐彩官网

5.启动AUGraph。

在直播录制中比较关键的一步却说 Render Callback Function。

AudioUnit每次全部都是处理一段音频数据,每次处理完成一段数据的如果 ,你这一 回调函数就会被调用一次。在你这一 回调函数中,通过AudioUnit的AudioUnitRender土土妙招,可不能AUGraph中的某另另有一个节点中获取到一段处理后的音频PCM数据。同时,原因分析分析着可不里能进行耳返播放,在你这一 回调中也可不里能将取得的音频数据送入到回调函数的最后另另有一个参数ioData对应的buffer中。

在设置unit的属性时,可不里能注意的是某些公共的属性。比如音频格式属性和MaximumFramesPerSlice。原因分析分析着音频格式设置错误,往往会跳出AUGraph启动失败原因分析分析着声音异常等问题。比如,使用iOS内置的麦克风原因分析分析着有线耳机时,设备支持的采样率比较高,44.1KHz 能正常工作,朋友整条音频通路上基本上都采用的是44.1KHz。如果 当使用蓝牙设备时,一般蓝牙设备无法支持44.1KHz分派和播放,通常全部都是16KHz甚至更低。此时I/O Unit无法继续使用如果 的配置。可不里能按照实际支持的采样率进行配置。

AudioUnit可不里能求另另有一个单元衔接处的音频数据格式可不里能保持一致,当AUGraph中不同unit支持的格式不同时(比如在支持蓝牙设备原因分析分析着使用回声消除模块时,I/O unit要求的格式和某些单元的有原因分析分析着不同),此时就可不里能分别设置格式,并通过格式转换unit或mixer unit对格式进行转换。

原因分析分析着MaximumFramesPerSlice设置错误,原因分析分析着会跳出声音异常的情况。 MaximumFramesPerSlice 表示的是每次回调送入或取出的音频数据的长度,在AUGraph的所有节点的你这一 属性也可不里能保持一致如果 会原因分析分析有的unit丢弃数据,而跳出声音异常 。

其中,I/O主要负责和设备打交道,比如分派和播放;Mixing负责将不同来源的音频数据进行混合;Effect是对音频数据进行音效处理;Format Conversion主却说 进行格式转换比如重采样等。这里另另有一个优化的点是音频格式转换 Multichannel Mixer 并全部都是就不能实现格式转换的功能,输入和输出的音频数据格式可不能不同,利用你这一 点可不能节省另另有一个格式转换unit。

4.1 混响效果(reverberation)

朋友在音乐厅,剧院,礼堂等比较空旷的室内说话或唱歌时,往往能听到和平时不一样的声音,主却说 声音在墙壁上多次反射后叠加带同时,听起来全部都是了混响的效果。在声音处理中,朋友可不能人为的将声音缓存起来,延时一定时间后,和原声音叠加,就不能模拟出混响的效果。AudioUnit提供了kAudioUnitSubType_Reverb2来实现混响效果的生成。将该unit接入到AUGraph中如果 ,配置参数即可实现混响的效果。我人太好混响原理是比较简单,但实际上为了模拟自然界中实际的音效,计算过程还是相当僵化 的,要模拟出不同的大小的空间,不同材质的墙壁,障碍物的几个,可不里能输入比较多的参数来参与运算。iOS的reverb unit提供了7个参数。朋友在直播应用中提供了另另有一个不同场景的模拟(录音棚,演唱会,KTV,小舞台),主却说 通过调整如下参数实现的:

kReverb2Param_DryWetMix混响效果声的大小与空间大小无关,而只与空间内杂物的几个以及墙壁及物体的材质有关;

kReverb2Param_DecayTimeAt0Hz / kReverb2Param_DecayTimeAtNyquist衰减时间,整个混响的总长度,与空间大小比较相关,越空旷越长。

4.2 变声效果

变声效果主却说 在频域上对人的声音进行一定的处理,朋友知道男声一般比较低沉,女声比较尖锐,你这一 主要说的是音调。通过对声音音调的调整,可不能让低沉的男声听上去像尖锐女声。iOS提供了kAudioUnitSubType_NewTimePitch的unit来实现音调的调整。值得注意的是kAudioUnitSubType_NewTimePitch全部都是输入Effect类的,却说 属于FormatConverter类的。通过设置TimePitch unit的kNewTimePitchParam_Pitch属性即可。

/// pitchShift为具体数值(0表示不变,负数表明调低沉,正数调尖锐)AudioUnitSetParameter(pitchUnit, kNewTimePitchParam_Pitch, kAudioUnitScope_Global, 0, pitchShift, 0);

变男声,可不里能强化突出低沉的特点,将音调调低,设置负数参数即可;

变女声,可不里能强化突出尖锐的特点,将音调调高,设置正数即可;

机器人音效,机器人的音效是另另有一个组合效果,朋友印象中的机器人音效全部都是老电影中的那种,音调比较高,如果 有重音。却说朋友采用的是TimePitch unit + Delay unit的土土妙招。Delay unit也是iOS提供的另另有一个将声音延时叠加的unit,如果 比混音要简单却说,不能单次叠加;

庄严宏大音效,想象一下佛祖累似 的声音,一般全部都是自带回声,如果 比较男性化,却说朋友选取的是TimePitch unit + Reverb unit的土土妙招来实现。

这里推荐另另有一个被委托人调音效的参考软件voxal voice changer。朋友可不能在你这一 软件上被委托人将不同的工具组件组合起来,调试参数,实时听到参数对应的结果。当效果满意后再移植到AudioUnit中。

在移动短视频直播中, 声音是主播和观众互动的重要途径之一, 为了丰沛 直播的内容,朋友后该 不想在声音上做某些文章, 在短视频源码分派录音的基础上玩某些花样。

比如演唱类的直播间中, 主播伴随着背景音乐演唱. 这时某些主播就会希望不能给被委托人声音增加混响的效果, 营伟大的发名在舞台剧场等环境下演唱的氛围. 再比如某些搞笑类的直播间, 主播会希望给被委托人的声音加带变声的效果, 女变男,男变女原因分析分析着变成机器人等等. 为了实现哪此需求朋友可不里能对分派的声音进行处理, 如果 为了让主播实时听到哪此处理后的效果,以便根据效果进行调整,朋友也可不里能提供低延时的回放,将变化后的声音播放给主播听.对声音处理的方案比较多,这里介绍一下短视频直播SDK中所采用的基于iOS提供的AudioUnit的方案。

iOS系统提供了非常丰沛 的音频相关的API,中含了从分派,处理到播放等各个环节,如果 按照需求的层次进行了分组。

其中,离底层的驱动和硬件最近的却说 AudioUnit系列的API,却说某些高层的API,全部都是对AudioUnit的封装. 比如AVFoundation、AudioQueue、AVAudioEngine等。

缺点:

涉及到的专有概念比较多,接口僵化 ,提供C风格的API

优点:

低延时,从分派到播放回环可不能到10ms的级别可不能动态变更配置组合可不能直接获得后台执行权限