我是靠谱客的博主 昏睡宝马,最近开发中收集的这篇文章主要介绍Android-audio之录音demo,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  由于项目需要我这个一直只做video的小菜鸟开始学习audio了,针对新需求,我们首先需要写一个测试demo……万丈高楼平地起,今天就介绍下录音demo的编写:

 talk is sample, show me the code:

int main(int argc __unused, char **argv __unused)
{
    // step1: 创建MediaRecorder
    MediaRecorder *mRecorder = new MediaRecorder(String16("com.test.mediarecorder")); // 此处要输入app package name

    // step2: 设置audiosource,具体audiosource分类见下表
    mRecorder->setAudioSource(VOICE_UPLINK);

    // step3: 设置一些参数,具体可以设置的参数可以参考google的官方文档。   
    const String8 params1("audio-param-sampling-rate=16000"); // 设置采样率为16khz
    mRecorder->setParameters(params1);
    const String8 params2("audio-param-number-of-channels=2"); // 设置录制内容为双声道
    mRecorder->setParameters(params2);
    const String8 params3("audio-param-encoding-bitrate=256000"); // 设置编码码率为256kbps
    mRecorder->setParameters(params3);

    // step4: 设置输出文件,此处需要注意selinux权限,如果只是debug用可以关闭selinux检测: adb shell setenforce 0
    FILE* fd = fopen("/data/local/tmp/recoder.aac", "wb+");
    mRecorder->setOutputFile(fileno(fd)); // FILE*和linux文件描述符的转换: fileno(fd)
   
    // step5: 设置输出文件的格式
    mRecorder->setOutputFormat(OUTPUT_FORMAT_DEFAULT);

    // step6: 设置audio编码器
    mRecorder->setAudioEncoder(AUDIO_ENCODER_AAC);

    // step7: prepare
    mRecorder->prepare();

    // step8: 开始录音
    mRecorder->start();

    // step9: 设置sleep时间,也就是录音时间
    sleep(20);

    // step10: 结束录制,关闭文件
    mRecorder->stop();
    fclose(fd);
    return 0;
}

   以上就是整个demo的代码了,是不是so easy!!!接下来看看设置的AudioSource/OutputFormat和AudioEncoder都有什么。

AudioSource输入源介绍:

AudioSource

介绍

权限

DEFAULT

默认。在源码 system/media/audio/include/system/audio.h配置默认项

MIC

麦克风

VOICE_UPLINK

电话录音上行线路

android.permission.CAPTURE_AUDIO_OUTPUT,系统权限不允许第三方app使用

VOICE_DOWNLINK

电话录音下行线路

android.permission.CAPTURE_AUDIO_OUTPUT,系统权限不允许第三方app使用

VOICE_CALL

电话录音上下线路

android.permission.CAPTURE_AUDIO_OUTPUT,系统权限不允许第三方app使用

CAMCORDER

摄像头的麦克风

VOICE_RECOGNITION

语音识别

VOICE_COMMUNICATION

网络电话

REMOTE_SUBMIX

传输到远程的音频混合流。默认情况下如何用该项录音,本地扬声器或者耳机的声音将会被截走

android.permission.CAPTURE_AUDIO_OUTPUT,系统权限不允许第三方app使用

OutputFormat输出格式介绍:

OutputFormat

介绍

OUTPUT_FORMAT_DEFAULT

默认格式,系统自动推荐

常量值:1

OUTPUT_FORMAT_RAW_AMR

已经弃用,不推荐

常量值:3

OUTPUT_FORMAT_AMR_NB

amr 采样8khz

常量值:3

OUTPUT_FORMAT_AMR_WB

amr 采样16khz

常量值:4

OUTPUT_FORMAT_AAC_ADIF

ADIF:Audio Data Interchange Format 音频数据交换格式。每帧都有自己的头信息,可以任意解码。故这种格式常用在磁盘文件中。

常量值: 5

OUTPUT_FORMAT_AAC_ADTS

ADTS的全称是Audio Data Transport Stream。是AAC音频的传输流格式。ADIF只有一个统一的头,所以必须得到所有的数据后解码。

常量值: 6

AudioEncoder编码器介绍:

AudioEncoder

介绍

AUDIO_ENCODER_AMR_NB

amr编码器,8khz

AUDIO_ENCODER_AMR_WB

amr编码器,16khz

AUDIO_ENCODER_AAC

aac编码器

AUDIO_ENCODER_HE_AAC

he: high efficiency

HE-AAC注重于低码流的编码并很适合多声道文件

AUDIO_ENCODER_AAC_ELD

AAC-ELD(增强低延迟)

AUDIO_ENCODER_VORBIS

VORBIS编码

AUDIO_ENCODER_OPUS.......

opus编码

 以上就是所有demo所有内容,看似超级简单,实际也会有很多坑,例如文件的权限问题,各个函数的调用顺序,app pakeage name在底层是否会被mute等等。

 audio框架相比video更加庞大和复杂,尤其是各种场景的交互。“日拱一卒,不期而至。“ 相信总有一天可以搞明白整个框架。

 

最后

以上就是昏睡宝马为你收集整理的Android-audio之录音demo的全部内容,希望文章能够帮你解决Android-audio之录音demo所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部