著录项信息
专利名称 | 一种录制手机输出音频的方法、系统及手机 |
申请号 | CN201510977970.1 | 申请日期 | 2015-12-23 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2016-06-01 | 公开/公告号 | CN105632541A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G11C7/16 | IPC分类号 | G;1;1;C;7;/;1;6;;;H;0;4;M;1;/;6;5查看分类表>
|
申请人 | 惠州TCL移动通信有限公司 | 申请人地址 | 广东省惠州市仲恺高新区和畅七路西86号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 惠州TCL移动通信有限公司 | 当前权利人 | 惠州TCL移动通信有限公司 |
发明人 | 徐军峰 |
代理机构 | 深圳市君胜知识产权代理事务所(普通合伙) | 代理人 | 王永文;刘文求 |
摘要
本发明提供了一种录制手机输出音频的方法、系统及手机,通过当接收到开始录制手机输出音频的指令后,在获输出音频输入到手机的播放模块之前,捕捉手机输出的音频数据,并将所述音频数据存储到缓存中,判断存储到缓存的音频数据是否与预定义的音频数据类型相匹配,若匹配则调用预先设置的音频输入接口从缓存中获取音频数据进行录制,从而实现了手机自身对其输出音频的录制,由于手机音频在其未输出到扬声器之前被捕获,因此获取的手机输出音频清晰,能满足用户对手机输出音频录制的清晰度的需求。
1.一种录制手机输出音频的方法,其特征在于,包括:
A、当接收到开始录制手机输出音频的指令后,在输出音频输入到手机的播放模块之前,捕捉手机输出的音频数据,并将所述音频数据存储到缓存中;
B、判断存储到缓存的音频数据是否与预定义的音频数据类型相匹配,若否,则执行步骤C,否则执行步骤D;
C、调整缓存中音频数据的采样率和声道数,使其与预定义的音频数据类型相匹配,然后执行步骤D;
D、调用预先设置的音频输入接口从缓存中获取音频数据进行录制;
所述步骤B之前还包括:
B0、判断缓存中是否含有音频数据,若有,则执行步骤B,否则以全零的音频数据代替,输入到应用层;
所述步骤D中还包括:
D2、当录音结束后,清空缓存中的音频数据。
2.根据权利要求1所述录制手机输出音频的方法,其特征在于,所述步骤A之前还包括:
A01、增加一个用于从缓存中获取音频数据的调用接口;
A02、将手机输出音频的录音文件类型定义为手机输出音频录制的文件类型。
3.根据权利要求2所述录制手机输出音频的方法,其特征在于,所述步骤D还包括:
D1、获取到音频数据进行录音后,将得到的音频文件类型设置为所述手机输出音频录制文件类型。
4.一种录制手机输出音频的系统,其特征在于,包括:
音频存储模块,用于当接收到开始录制手机输出音频的指令后,在输出音频输入到手机的播放模块之前,捕捉手机输出的音频数据,并将所述音频数据存储到缓存中;
类型判断模块,用于判断存储到缓存的音频数据是否与预定义的音频数据类型相匹配;
类型调整模块,用于调整缓存中音频数据的采样率和声道数,使其与预定义的音频数据类型相匹配;
音频录制模块,用于调用预先设置的音频输入接口从缓存中获取音频数据进行录制;
所述系统还包括:
数据填补模块,用于判断缓存中是否含有音频数据,若有,则进行存储到缓存的音频数据是否与预定义的音频数据类型相匹配判断,否则以全零的音频数据代替;输入到应用层;
所述音频录制模块,还用于当录音结束后,清空缓存中的音频数据。
5.根据权利要求4所述录制手机输出音频的系统,其特征在于,所述系统还包括:
增加接口模块,用于增加一个用于从缓存内获取音频数据的调用接口;
类型定义模块,用于将手机输出音频的录音文件类型定义为手机输出音频录制文件的类型。
6.根据权利要求4所述录制手机输出音频的系统,其特征在于,所述音频录制模块还包括:
类型设置单元,用于获取到音频数据进行录音后,将得到的音频文件类型设置为所述手机输出音频录制文件类型。
7.一种手机,其特征在于,包括:权利要求4-6任一项所述的录制手机输出音频的系统。
一种录制手机输出音频的方法、系统及手机\n技术领域\n[0001] 本发明涉及智能终端领域,尤其涉及的是一种录制手机输出音频的方法、系统及手机。\n背景技术\n[0002] 目前安卓操作系统的手机提供的录音功能只有通话录音或者通过麦克风录音的方式,对于手机本身发出的声音并没有单独的录音功能,当用户需要获取其本身发出的声音时,只能通过麦克风来捕捉手机声音来进行录制,但是由于通过麦克风捕捉的手机声音含有外界的环境噪音,因此录下来的声音含有很多杂音,尤其在环境比较嘈杂的情况下,录制出的声音效果更差,不能满足用户想要获取清晰手机输出音频的需要。\n[0003] 因此,现有技术有待于进一步的改进。\n发明内容\n[0004] 鉴于上述现有技术中的不足之处,本发明的目的在于为用户提供一种录制手机输出音频的方法、系统及手机,克服现有技术中手机不能录制手机输出的音频或者录制出的手机输出音频不清晰的缺陷。\n[0005] 本发明解决技术问题所采用的技术方案如下:\n[0006] 一种录制手机输出音频的方法,其中,包括:\n[0007] A、当接收到开始录制手机输出音频的指令后,在输出音频输入到手机的播放模块之前,捕捉手机输出的音频数据,并将所述音频数据存储到缓存中;\n[0008] B、判断存储到缓存的音频数据是否与预定义的音频数据类型相匹配,若否,则执行步骤C,否则执行步骤D;\n[0009] C、调整缓存中音频数据的采样率和声道数,使其与预定义的音频数据类型相匹配,然后执行步骤D;\n[0010] D、调用预先设置的音频输入接口从缓存中获取音频数据进行录制。\n[0011] 所述录制手机输出音频的方法,其中,所述步骤A之前还包括:\n[0012] A01、增加一个用于从缓存中获取音频数据的调用接口;\n[0013] A02、将手机输出音频的录音文件类型定义为手机输出音频录制的文件类型。\n[0014] 所述录制手机输出音频的方法,其中,所述步骤D还包括:\n[0015] D1、获取到音频数据进行录音后,将得到的音频文件类型设置为所述手机输出音频录制文件类型。\n[0016] 所述录制手机输出音频的方法,其中,所述步骤B之前还包括:\n[0017] B0、判断缓存中是否含有音频数据,若有,则执行步骤B,否则以全零的音频数据代替。\n[0018] 所述录制手机输出音频的方法,其中,所述步骤D中还包括:\n[0019] D2、当录音结束后,清空缓存中的音频数据。\n[0020] 一种录制手机输出音频的系统,其中,包括:\n[0021] 音频存储模块,用于当接收到开始录制手机输出音频的指令后,在输出音频输入到手机的播放模块之前,捕捉手机输出的音频数据,并将所述音频数据存储到缓存中;\n[0022] 类型判断模块,用于判断存储到缓存的音频数据是否与预定义的音频数据类型相匹配;\n[0023] 类型调整模块,用于调整缓存中音频数据的采样率和声道数,使其与预定义的音频数据类型相匹配;\n[0024] 音频录制模块,用于调用预先设置的音频输入接口从缓存中获取音频数据进行录制。\n[0025] 所述录制手机输出音频的系统,其中,所述系统还包括:\n[0026] 增加接口模块,用于增加一个用于从缓存内获取音频数据的调用接口;\n[0027] 类型定义模块,将手机输出音频的录音文件类型定义为手机输出音频录制的文件类型。\n[0028] 所述录制手机输出音频的系统,其中,所述音频录制模块还包括:\n[0029] 类型设置单元,用于获取到音频数据进行录音后,将得到的音频文件类型设置为所述手机输出音频录制文件类型。\n[0030] 所述录制手机输出音频的系统,其中,所述系统还包括:\n[0031] 数据填补模块,用于判断缓存中是否含有音频数据,若有,则进行存储到缓存的音频数据是否与预定义的音频数据类型相匹配判断,否则以全零的音频数据代替。\n[0032] 一种手机,其中,包括:所述的录制手机输出音频的系统。\n[0033] 有益效果,本发明提供了一种录制手机输出音频的方法、系统及手机,通过当接收到开始录制手机输出音频的指令后,在获输出音频输入到手机的播放模块之前,捕捉手机输出的音频数据,并将所述音频数据存储到缓存中,判断存储到缓存的音频数据是否与预定义的音频数据类型相匹配,若匹配则调用预先设置的音频输入接口从缓存中获取音频数据进行录制,从而实现了手机自身对其输出音频的录制,由于手机音频在其未输出到扬声器之前被捕获,因此获取的手机输出音频清晰,能满足用户对手机输出音频录制的清晰度的需求。\n附图说明\n[0034] 图1是本发明的一种录制手机输出音频的方法的步骤流程图。\n[0035] 图2是本发明的一种录制手机输出音频的方法的具体应用实施例的步骤流程图。\n[0036] 图3是本发明的一种录制手机输出音频的系统原理结构示意图。\n具体实施方式\n[0037] 为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用于解释本发明,并不用于限定本发明。\n[0038] 由于手机中播放的声音都是通过硬件层发送到底层音频播放设备上进行播放的,因此在进行为了获取清晰地手机输出音频,需要当手机输出音频输出到底层音频播放设备之前捕获输出音频数据,并将捕获到的输出音频数据进行录音,从而才能获取到清晰地输出音频数据。\n[0039] 基于上述思路,本发明提供了一种录制手机输出音频的方法,如图1所示,所述方法包括:\n[0040] S1、当接收到开始录制手机输出音频的指令后,在输出音频输入到手机的播放模块之前,捕捉手机输出的音频数据,并将所述音频数据存储到缓存中。\n[0041] 当接收到用户发出的开始录制手机输出音频的指令后,在手机输出音频未传输到底层音频输出设备之前,进行捕获,也即在手机自身的硬件层将输出音频传输到扬声器之前获取手机将输出的音频数据,并将所述音频数据存储到缓存中,如果缓存已满,就覆盖最早存入的数据。\n[0042] S2、判断存储到缓存的音频数据是否预定义的音频数据类型相匹配,若否,则执行步骤S3,否则执行步骤S4。\n[0043] 判断存储到缓存中的音频数据的格式是否为与预先定义的手机输出音频数据格式相匹配,若不匹配,则可能无法实现音频数据的顺利录制,因此在本步骤中需要通过其采样率和声道数进行数据类型格式的判断,比如数据的采样率为48k,声道数为2,而预定义的手机输出音频数据格式也同为48k、2声道的,则该音频数据为本次录音想要的录制的音频数据类型,执行步骤S4,否则执行步骤S3。\n[0044] S3、调整缓存中音频数据的采样率和声道数,使其与预定义的音频数据类型相匹配,然后执行步骤S4。\n[0045] 可以通过调整采样率,将声道合并或者拆分,将缓存中的音频数据类型调整为与预定义的音频数据类型相匹配。所述采样率可以通过获取输出音频的比特率和声道数计算得到。\n[0046] 具体的,为了实现手机应用层对手机输出音频的顺利录制,所述步骤S1之前还包括:\n[0047] S01、增加一个用于从缓存内获取音频数据的调用接口;用于当判断出缓存中存储的数据为手机硬件层发出的双声道数字音频数据时,则调用该接口,实现音频数据在应用层的录制。\n[0048] S02、将手机输出音频的录音文件类型定义为手机输出音频录制的文件类型。\n[0049] 为了实现应用层中录制音频的顺利保存,预先为录制的手机输出视频定义录音类型,具体的录音类型可以通过用户自定义实现。为了易于识别,将其定义为手机输出音频文件。\n[0050] 由于在之前对录音文件的类型进行了定义,因此在本步骤中还包括:\n[0051] S31、获取到音频数据进行录音后,将得到的音频文件类型设置为所述手机输出音频录制文件类型。\n[0052] 获取到输出音频数据,对其进行录音后,将所述录音文件的录音类型设置为之前定义的手机输出音频录制文件类型。\n[0053] S4、调用预先设置的音频输入接口从缓存中获取音频数据进行录制。\n[0054] 通过在软件层调用接口,将缓存中存储的音频数据上报到应用层进行录音,从而实现手机输出音频的录制。\n[0055] 为了实现录制出的手机输出音频的连续性,在所述步骤S2还包括:\n[0056] S21、判断缓存中是否含有音频数据,若有,则进行所述音频数据是否为双声道音频数据的判断,否则以全零的音频数据代替。\n[0057] 先判断缓存中是否含有音频数据,若有,则进行音频数据是否为所需类型的判断,若缓存中不含有音频数据,则全部以零数据代替音频数据,输入到应用层,保证录制音频的连续性。\n[0058] 为了防止录制音频的重复,所述步骤S3中还包括:\n[0059] S32、当录音结束后,清空缓存中的音频数据。\n[0060] 为了对上述方法进行更加相信的说明,下面以其具体应用实施例为例对其做进一步的说明。\n[0061] 如图2所示,在具体应用时,首先创建录音对象的类型,该录音文件的类型设置为手机输出音频文件,其文件后缀可以定义为:PLAYBACK,则录音文件的名称可以保存成MediaRecorder.AudioSource.PLAYBACK。将定义好的录音文件名称及文件后缀等信息保存到应用层,则应用层便可以按照定义好的录音类型对录制的手机输出音频进行保存。在具体应用中,可以先创建一个定义好的录音类型,若创建的录音类型为PLAYBACK录音的文件类型,则开始录音,通知软件应用层开始将音频数据存入到缓存中,以便从缓存中获取音频数据进行录音,因此在下一步时,便调用接口从缓存中读取音频数据,并将读取的音频数据上报给应用层,在应用层中进行录制。当音频文件录制结束,则结束录音,并清除缓存,为下一次进行手机输出音频注意好准备。\n[0062] 在上述方法的基础上,本发明还提供了一种录制手机输出音频的系统,如图3所示,包括:\n[0063] 音频存储模块110,用于当接收到开始录制手机输出音频的指令后,在输出音频输入到手机的播放模块之前,捕捉手机输出的音频数据,并将所述音频数据存储到缓存中;\n[0064] 类型判断模块120,用于判断存储到缓存的音频数据是否与预定义的音频数据类型相匹配;\n[0065] 类型调整模块130,用于调整缓存中音频数据的采样率和声道数,使其与预定义的音频数据类型相匹配;\n[0066] 音频录制模块140,用于调用预先设置的音频输入接口从缓存中获取音频数据进行录制。\n[0067] 所述系统还包括:\n[0068] 增加接口模块,用于增加一个用于从缓存内获取音频数据的调用接口;\n[0069] 类型定义模块,用于将手机输出音频的录音文件类型定义为手机输出音频录制的文件类型。\n[0070] 所述音频录制模块还包括:\n[0071] 类型设置单元,用于获取到音频数据进行录音后,将得到的音频文件类型设置为所述手机输出音频录制文件类型。\n[0072] 所述系统还包括:\n[0073] 数据填补模块,用于判断缓存中是否含有音频数据,若有,则进行存储到缓存的音频数据是否与预定义的音频数据类型相匹配判断,否则以全零的音频数据代替。\n[0074] 一种手机,其中,包括:所述的录制手机输出音频的系统。\n[0075] 具体的,为了实现本发明所述的方法及系统可以通过以下程序代码实现上述功能:\n[0076] static ssize_t out_write(struct audio_stream_out *stream, const void *buffer,\n[0077] size_t bytes)\n[0078] {\n[0079] @@ -2063,6 +2157,7 @@ static ssize_t out_write(struct audio_stream_out *stream, const void *buffer,\n[0080] struct audio_device *adev = out->dev;\n[0081] int snd_scard_state = get_snd_card_state(adev);\n[0082] ssize_t ret = 0;\n[0083] pthread_mutex_lock(&out->lock);\n[0084] @@ -2093,7 +2188,8 @@ static ssize_t out_write(struct audio_stream_out *stream, const void *buffer,\n[0085] goto exit;\n[0086] }\n[0087] }\n[0088] if (is_offload_usecase(out->usecase)) {\n[0089] ALOGD("copl(%p): writing buffer (%zu bytes) to compress device", out, bytes);\n[0090] if (out->send_new_metadata) {\n[0091] @@ -2127,12 +2223,70 @@ static ssize_t out_write(struct audio_stream_out *stream, const void *buffer,\n[0092] } else {\n[0093] if (out->pcm) {\n[0094] if (out->muted)\n[0095] + {\n[0096] memset((void *)buffer, 0, bytes);\n[0097] - ALOGVV("%s: writing buffer (%d bytes) to pcm device", __func__, bytes);\n[0098] + ALOGD("%s: output muted Debug--", __func__);\n[0099] + }\n[0100] +\n[0101] if (out->usecase == USECASE_AUDIO_PLAYBACK_AFE_PROXY)[0102] ret = pcm_mmap_write(out->pcm, (void *)buffer, bytes);\n[0103] - else\n[0104] + else{\n[0105] ret = pcm_write(out->pcm, (void *)buffer, bytes);\n[0106] //add begin\n[0107] +\n[0108] + if (playback_dump_enable)\n[0109] + {\n[0110] + if (out->config.rate != 48000 || out->config.channels != 2)\n[0111] + {\n[0112] + ;// resampling and CHANNEL_CONVERSION[0113] + }\n[0114] +\n[0115] + pthread_mutex_lock(&adev->lock);\n[0116] + write_to_buff((char *)buffer, bytes); //write buffer\n[0117] + pthread_mutex_unlock(&adev->lock);\n[0118] + }\n[0119] + }\n[0120] if (ret < 0)\n[0121] ret = -errno;\n[0122] else if (ret == 0)\n[0123] @@ -2167,6 +2321,106 @@ exit:\n[0124] return bytes;\n[0125] 在上述程序代码中,应用程序调用framework来读取录音数据。\n[0126] 缓存中如果有数据,就将缓存中最早的数据发送给上层,并清空已经发送的数据。\n[0127] 缓存中如果没有数据(由于手机并不是一直在发出声音,所以会有不连续的声音),就将全零的数据报给上层,来保证上层声音的连续性。\n[0128] {\n[0129] @@ -2554,10 +2879,11 @@ static ssize_t in_read(struct audio_stream_in *stream, void *buffer,\n[0130] struct audio_device *adev = in->dev;\n[0131] int i, ret = -1;\n[0132] int snd_scard_state = get_snd_card_state(adev);\n[0133] + char value[PROPERTY_VALUE_MAX]; //xjf add\n[0134] pthread_mutex_lock(&in->lock);\n[0135] - if (in->pcm) {\n[0136] + if (in->pcm) {\n[0137] if(SND_CARD_STATE_OFFLINE == snd_scard_state) {[0138] ALOGD(" %s: sound card is not active/SSR state", __func__);\n[0139] ret= -EIO;;\n[0140] @@ -2581,8 +2907,22 @@ static ssize_t in_read(struct audio_stream_in *stream, void *buffer,\n[0141] }\n[0142] if (in->pcm) {\n[0143] +\n[0144] //add begin\n[0145] + if (playback_dump_enable == 1)\n[0146] + {\n[0147] + pthread_mutex_lock(&adev->lock);\n[0148] + ret = adev_playback_dump(buffer, bytes); //read buffer[0149] + pthread_mutex_unlock(&adev->lock);\n[0150] + playback_record_delay(bytes); //delay\n[0151] + }\n[0152] + else if (audio_extn_ssr_get_enabled() &&\n[0153] + audio_channel_count_from_in_mask(in->channel_mask) == 6)\n[0154] ret = audio_extn_ssr_read(stream, buffer, bytes);\n[0155] else if (audio_extn_compr_cap_usecase_supported(in->usecase))\n[0156] ret = audio_extn_compr_cap_read(in, buffer, bytes);\n[0157] 本发明提供了一种录制手机输出音频的方法、系统及手机,通过当接收到开始录制手机输出音频的指令后,在获输出音频输入到手机的播放模块之前,捕捉手机输出的音频数据,并将所述音频数据存储到缓存中,判断存储到缓存的音频数据是否与预定义的音频数据类型相匹配,若匹配则调用预先设置的音频输入接口从缓存中获取音频数据进行录制,从而实现了手机自身对其输出音频的录制,由于手机音频在其未输出到扬声器之前被捕获,因此获取的手机输出音频清晰,能满足用户对手机输出音频录制的清晰度的需求。\n[0158] 可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。
法律信息
- 2022-02-15
专利权的转移
登记生效日: 2022.01.28
专利权人由惠州TCL移动通信有限公司变更为雷鸟创新技术(深圳)有限公司
地址由516006 广东省惠州市仲恺高新区和畅七路西86号变更为518000 广东省深圳市南山区西丽街道曙光社区中山园路1001号TCL科学园区D4栋A501
- 2019-01-29
- 2016-10-12
实质审查的生效
IPC(主分类): G11C 7/16
专利申请号: 201510977970.1
申请日: 2015.12.23
- 2016-06-01
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2009-12-09
|
2009-07-02
| | |
2
| |
2009-05-20
|
2008-12-09
| | |
3
| |
2010-06-16
|
2008-11-13
| | |
4
| |
2015-06-24
|
2013-12-23
| | |
5
| |
2014-11-26
|
2014-08-12
| | |
6
| |
2011-04-20
|
2010-12-23
| | |
7
| |
2012-04-18
|
2011-10-17
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |