发明内容
本发明要解决的技术问题是提供一种录制音频的方法及装置,能够录制出高品质的音频,避免想要录制的声音与伴音分离在不同声道的问题。
为解决上述技术问题,本发明的一种录制音频的方法,包括:
进行音频录制,得到原始录音数据;
获取原始录音数据,对获取的原始录音数据调整声道数量,得到中间录音数据,并获取伴音数据;
将所述中间录音数据与获取的伴音数据进行混音,得到目标音频数据。
进一步地,所述对获取的原始录音数据调整声道数量,包括:
所述原始录音数据为单声道,如果将单声道调整为m(m>1)声道,则以帧为单位,轮循原始录音数据的每个帧中的采样点,将原始录音数据的采样点在中间录音数据的相应帧中连续赋值m个采样点,轮循原始录音数据的每个帧后得到m声道的中间录音数据。
进一步地,所述对获取的原始录音数据调整声道数量,包括:
所述原始录音数据为n(n>1)声道,如果将n声道调整为q(q>1)*n声道,则以帧为单位,轮循原始录音数据的每个帧中的采样组,所述采样组中包含与声道数量相同的采样点,每个采样点与一个声道对应,将原始录音数据的采样组赋值给中间录音数据的相应帧的连续q个采样组,轮循原始录音数据的每个帧后得到q*n声道的中间录音数据。
进一步地,所述对获取的原始录音数据调整声道数量,包括:
所述原始录音数据为l(l>1)声道,如果将l声道调整为p(p>1)声道,其中,p与l为非整数倍关系,则以帧为单位,轮循原始录音数据的每个帧中的采样组,所述采样组中包含与声道数量相同的采样点,每个采样点与一个声道对应,对原始录音数据的采样组中包含的与声道数量相同的采样点取平均值,将得到的平均值在中间录音数据的相应帧中连续赋值p个采样点,轮循原始录音数据的每个帧后得到p声道的中间录音数据。
进一步地,所述伴音数据与所述中间录音数据的声道数量相同。
进一步地,在进行音频录制的过程中,如果录音设备同时播放伴音,则消除所录制的音频数据中的录音设备所播放的伴音,将消除伴音的音频数据作为所述原始录音数据。
进一步地,所述方法还包括:
在对获取的原始录音数据调整声道数量,得到中间录音数据后,对所述中间录音数据进行音量调整;以及在获取伴音数据后,对所述伴音数据进行音量调整,所述音量调整包括将数据中的每个采样点与音量百分比相乘。
进一步地,一种录制音频的装置,包括:录音单元、声道调整单元、伴音数据获取单元和混音单元,其中:
所述录音单元,用于进行音频录制,得到原始录音数据;
所述声道调整单元,用于获取原始录音数据,对获取的原始录音数据调整声道数量,得到中间录音数据;
所述伴音数据获取单元,用于获取伴音数据;
所述混音单元,用于将所述中间录音数据与获取的伴音数据进行混音,得到目标音频数据。
进一步地,所述声道调整单元对获取的原始录音数据调整声道数量,包括:
所述原始录音数据为单声道,如果将单声道调整为m(m>1)声道,则以帧为单位,轮循原始录音数据的每个帧中的采样点,将原始录音数据的采样点在中间录音数据的相应帧中连续赋值m个采样点,轮循原始录音数据的每个帧后得到m声道的中间录音数据;或者,
所述原始录音数据为n(n>1)声道,如果将n声道调整为q(q>1)*n声道,则以帧为单位,轮循原始录音数据的每个帧中的采样组,所述采样组中包含与声道数量相同的采样点,每个采样点与一个声道对应,将原始录音数据的采样组赋值给中间录音数据的相应帧的连续q个采样组,轮循原始录音数据的每个帧后得到q*n声道的中间录音数据;或者,
所述原始录音数据为l(l>1)声道,如果将l声道调整为p(p>1)声道,其中,p与l为非整数倍关系,则以帧为单位,轮循原始录音数据的每个帧中的采样组,所述采样组中包含与声道数量相同的采样点,每个采样点与一个声道对应,对原始录音数据的采样组中包含的与声道数量相同的采样点取平均值,将得到的平均值在中间录音数据的相应帧中连续赋值p个采样点,轮循原始录音数据的每个帧后得到p声道的中间录音数据。
进一步地,所述伴音数据与所述中间录音数据的声道数量相同。
综上所述,本申请对原始录音数据进行声道数量调整,再将声道数量调整后的录音数据与伴音数据进行混音,从而得到目标音频数据,能够解决很多智能手机无法录制多声道音频的问题,并且能够大幅提高获得的音频数据的品质,而且能够避免发生想要录制的声音与伴音分离在不同声道的问题。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
如图1所示,本申请的录制音频的方法,包括:
步骤101:进行音频录制,得到原始录音数据;
本申请中根据用户的操作启动音频录制。原始录音数据保存在操作***的录音缓冲区中。
在进行音频录制的过程中,如果录音设备没有同时播放伴音,实际录制的声音就是用户想要录制的声音,则将所录制的音频数据作为原始录音数据;在进行音频录制的过程中,如果录音设备同时播放伴音,则需要消除所录制的音频数据中的录音设备所播放的伴音,将消除伴音的音频数据作为原始录音数据。本申请中可以通过回声消除的方式消除掉所录制的音频数据中的录音设备所播放的伴音。
本申请中在进行音频录制的过程中还可以同时进行噪声抑制。
步骤102:获取原始录音数据,对获取的原始录音数据调整声道数量,得到中间录音数据,并获取伴音数据;
本申请中为了更快的实现录制音频,单独开辟了一个混音线程,即在录制音频的时候就已经开始进行混音和编码,这样录音完成的时候基本上混音和编码也一起完成了。混音线程获取原始录音数据,并会不停的从保存伴音数据的伴音缓存(musicBuffer)中获取伴音数据。
为了提高混音的效率,本申请中创建录音线程负责从操作***的录音缓冲区中读取原始录音数据,然后将原始录音数据回调到音频管理器,音频管理器将原始录音数据写入到记录缓存(recordBuffer)中。recordBuffer采用自增的buffer,即默认开辟1024个字节的空间,如果存储空间足再开辟1024个字节,依次自增。
本申请中的混音线程是从recordBuffer中获取原始录音数据。由于录音线程和混音线程均需要访问recordBuffer,因此访问的时候需要加锁。
本申请中对获取的原始录音数据调整声道数量,包括:
原始录音数据为单声道,如果将单声道调整为m(m>1)声道,则以帧为单位,轮循原始录音数据的每个帧中的采样点,将原始录音数据的采样点在中间录音数据的相应帧中连续赋值m个采样点,轮循原始录音数据的每个帧后得到m声道的中间录音数据。
帧是音频的传递单位。采样率是录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。目前通常采用的采样率为16K、32K和44K等。采样字节是一个采样点所占用的字节数,一般采用两个字节来存储一个采样点。
例如,以采样率为32K为例,设置一帧的采样点的数量为1280,那么对于双声道1280/2/32=20ms,即一帧的时长为20ms,在播放音频的时候需要将音频数据一帧一帧的输入到设备。
下面以将单声道转换成双声道为例对本申请进行说明。
录制的单声道的原始录音数据调整为双声道时,在每一帧的数据中需要左右声道的采样点各一半(即左右声道各640个采样),且间隔排列。
假设录制的单声道声音为640个采样点一帧,640/32/1=20ms,下表1为单声道的数据模型。
表1
将单声道调整为双声道的原理如表2所示,即将每个单声道数据的采样点在双声道数据中连续赋值两个采样点。20ms的单声道数据有640个采样点,双声道则是1280个采样点。表2为双声道1280个采样点的数据模型。
表2
1 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
6 |
7 |
7 |
… |
… |
639 |
639 |
640 |
640 |
在表1和表2中一个方格代表一个采样点。方格中的数值代码采样的数据。双声道的数据采样点的分布是间隔分布的,也就是一个左声道采样点后面跟着一个右声道的采样点,如此间隔排列。例如,表2第一个方格1是左声道的采样点,第二个方格1是右声道的采样点。
以下是将单声道的原始录音数据调整为双声道的部分代码。
buffRecordDC:双声道数据存储Buffer(DC:Double Channel)
buffRecordSC:单声道数据的存储Buffer(SC:Single Channel)
上述代码就是轮循单声道的采样点,然后将每个采样点同时赋值给双声道Buffer的两个采样点,即左右声道的采样点。
本申请中对获取的原始录音数据调整声道数量,还可以是:
原始录音数据为n(n>1)声道,如果将n声道调整为q(q>1)*n声道,则以帧为单位,轮循原始录音数据的每个帧中的采样组,采样组中包含与声道数量相同的采样点,每个采样点与一个声道对应,将原始录音数据的采样组赋值给中间录音数据的相应帧的连续q个采样组,轮循原始录音数据的每个帧后得到q*n声道的中间录音数据。
本申请中的采样组是针对多声道的音频数据而言,例如,对于双声道的音频数据如果一帧包含1280个采样点,则每一帧包含640个采样组,每个采样组中包含两个采样点,采样组中包含的采样点的数量与声道数量相同,每个采样点与一声道对应。例如,表2中的第一个方格和第二个方格为一个采样组,第一个方格是左声道的采样点,第二个方格1是右声道的采样点。
本申请中对获取的原始录音数据调整声道数量,还可以是:
原始录音数据为l(l>1)声道,如果将l声道调整为p(p>1)声道,其中,p与l为非整数倍关系,则以帧为单位,轮循原始录音数据的每个帧中的采样组,采样组中包含与声道数量相同的采样点,每个采样点与一个声道对应,对原始录音数据的采样组中包含的与声道数量相同的采样点取平均值,将得到的平均值在中间录音数据的相应帧中连续赋值p个采样点,轮循原始录音数据的每个帧后得到p声道的中间录音数据。
本申请中可以是l大于p,也可以是p大于l,在原始录音数据的声道数量与想要得到的声道数量为非整数倍关系时,对原始录音数据的采样组取平均值,将得到的平均值在中间录音数据的相应帧中连续复制p个采样点。在对原始录音数据的采样组取平均值时,可以将采样组中包含的采样点相加,再将相加的结果除以原始录音数据的声道数量,得到采样组的平均值。
步骤103:将中间录音数据与获取的伴音数据进行混音,得到目标音频数据。
本申请中混音线程调整原始录音数据的声道数量,并获取伴音数据后,将进行声道数量调整后得到的中间录音数据与伴音数据进行混音,得到目标音频数据。
混音线程将中间录音数据和伴音数据混音成原始的PCM语音数据,然后通过编码器将原始的PCM语音数据编码成所需音频格式的语音数据(如MP3数据),存入到文件中。
本申请中伴音数据的声道数量与中间录音数据的声道数量相同。例如,想要得到双声道的目标音频数据,需要预先在musicBuffer中缓存双声道的伴音数据,在录制单声道的原始录音数据后,调整单声道的原始录音数据得到双声道的中间录音数据,再对双声道的中间录音数据与双声道的伴音数据进行混音。
另外,本申请中在对获取的原始录音数据调整声道数量,得到中间录音数据后,还可以对中间录音数据进行音量调整;以及在获取伴音数据后,对所述伴音数据进行音量调整,音量调整包括将数据中的每个采样点与音量百分比相乘。
以下是音量调整的部分代码。
如图2所示,本申请还提供了一种录制音频的装置,包括:录音单元、声道调整单元、伴音数据获取单元和混音单元,其中:
录音单元,用于进行音频录制,得到原始录音数据;
声道调整单元,用于获取原始录音数据,对获取的原始录音数据调整声道数量,得到中间录音数据;
伴音数据获取单元,用于获取伴音数据;
混音单元,用于将中间录音数据与获取的伴音数据进行混音,得到目标音频数据。
上述声道调整单元对获取的原始录音数据调整声道数量,包括:
原始录音数据为单声道,如果将单声道调整为m(m>1)声道,则以帧为单位,轮循原始录音数据的每个帧中的采样点,将原始录音数据的采样点在中间录音数据的相应帧中连续赋值m个采样点,轮循原始录音数据的每个帧后得到m声道的中间录音数据;或者,
原始录音数据为n(n>1)声道,如果将n声道调整为q(q>1)*n声道,则以帧为单位,轮循原始录音数据的每个帧中的采样组,采样组中包含与声道数量相同的采样点,每个采样点与一个声道对应,将原始录音数据的采样组赋值给中间录音数据的相应帧的连续q个采样组,轮循原始录音数据的每个帧后得到q*n声道的中间录音数据;或者,
原始录音数据为l(l>1)声道,如果将l声道调整为p(p>1)声道,其中,p与l为非整数倍关系,则以帧为单位,轮循原始录音数据的每个帧中的采样组,采样组中包含与声道数量相同的采样点,每个采样点与一个声道对应,对原始录音数据的采样组中包含的与声道数量相同的采样点取平均值,将得到的平均值在中间录音数据的相应帧中连续赋值p个采样点,轮循原始录音数据的每个帧后得到p声道的中间录音数据。
本申请中伴音数据与中间录音数据的声道数量相同。
上述录音单元,还用于在进行音频录制的过程中,如果录音设备同时播放伴音,则消除所录制的音频数据中的录音设备所播放的伴音,将消除伴音的音频数据作为原始录音数据。录音单元可以通过回声消除消除掉所录制的音频数据中的录音设备所播放的伴音。
本身其中还可以包含音量调整单元,音量调整单元用于在声道数量调整单元对获取的原始录音数据调整声道数量,得到中间录音数据后,对中间录音数据进行音量调整;以及在伴音数据获取单元获取伴音数据后,对伴音数据进行音量调整,音量调整包括将数据中的每个采样点与音量百分比相乘。
本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
尽管上文对本发明进行了详细说明,但是本发明不限于此,本技术领域技术人员可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改,都应当理解为落入本发明的保护范围。