Android录制音频

Android-MediaRecorder之setAudioSource   上一篇文章介绍了怎么通过MediaRecorderlu录制音频,详见(https://blog.csdn.net/cheriyou_/article/details/105544086 在创建MediaRecorder之后第一步就是设置AudioSource,那么audiosource具体是做什么用的?下面我们一步步分析。 1. 首先看看setAudioSource的过程 stat... 阅读详情

我们通常可以通过以下步骤在Android中录制音频或视频

(1)   创建android.media.MediaRecorder的一个实例。

(2)   创建android.content.ContentValues的一个实例,并添加TITLE、TIMESTAMP及重要的MIME_TYPE等属性。

(3)   使用android.content.ContentResolver为数据创建一个目标文件路径。

(4)   要在视图界面上设置预览显示,可以使用MediaRecorder.setPreviewDisplay()方法。

(5)   使用MediaRecorder.setAudioSource()设置音频来源。

(6)   使用MediaRecorder.setOutputFormat()设置输出文件格式。

(7)   使用MediaRecorder.setAudioEncoder()设置音频编码。

(8)   使用prepare()和start()准备和开始录制。

(9)   使用stop()和release()正常停止和清除录制过程。

代码如下:

------------------------RecordingActivity --------------------------

package cn.com.pan;
import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.provider.MediaStore.MediaColumns;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class RecordingActivity extends Activity {
 MediaRecorder mRecorder;
 File mSampleFile = null;
 static final String SAMPLE_PREFIX = "recording";
 static final String SAMPLE_EXTENSION = ".mp3";
 private static final String TAG = "RecordingActivity";
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  this.mRecorder = new MediaRecorder();
  Button startRecording = (Button) this.findViewById(R.id.startRecording);
  Button stopRecording = (Button) this.findViewById(R.id.stopRecording);
  startRecording.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    startRecording();
   }
  });
  stopRecording.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    stopRecording();
    addToDB();
   }
  });
 }
 protected void addToDB() {
  ContentValues values = new ContentValues(3);
  long current = System.currentTimeMillis();
  values.put(MediaColumns.TITLE, "test_audio");
  values.put(MediaColumns.DATE_ADDED, (int) (current / 1000));
  values.put(MediaColumns.MIME_TYPE, "audio/mp3");
  values.put(MediaColumns.DATA, mSampleFile.getAbsolutePath());
  ContentResolver contentResolver = getContentResolver();
  Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
  Uri newUri = contentResolver.insert(base, values);
  sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri));
 }
 protected void startRecording() {
  this.mRecorder = new MediaRecorder();
  this.mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
  this.mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  this.mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  this.mRecorder.setOutputFile(this.mSampleFile.getAbsolutePath());
  try {
   this.mRecorder.prepare();
  } catch (IllegalStateException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  } catch (IOException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }
  this.mRecorder.start();
  if (this.mSampleFile == null) {
   File sampleDir = Environment.getExternalStorageDirectory();
   try {
    this.mSampleFile = File.createTempFile(
      RecordingActivity.SAMPLE_PREFIX,
      RecordingActivity.SAMPLE_EXTENSION, sampleDir);
   } catch (IOException e) {
    // TODO Auto-generated catch block
    Log.e(TAG, "sdcard access error");
    return;
   }
  }
 }
 protected void stopRecording() {
  this.mRecorder.stop();
  this.mRecorder.release();
 }
}

--------------------------------main.xml -------------------------------------

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <Button android:id="@+id/startRecording" android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:text="start"></Button>
 <Button android:id="@+id/stopRecording" android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:text="stop"></Button>
</LinearLayout>

---------------------------------AndroidManifest.xml---------------------------

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="cn.com.pan" android:versionCode="1" android:versionName="1.0">
 <application android:icon="@drawable/icon" android:label="@string/app_name">
  <activity android:name=".RecordingActivity" android:label="@string/app_name">
   <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
  </activity>
 </application>
 <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
 <uses-sdk android:minSdkVersion="3" />
</manifest>

如果在计算机的音频系统中播放音乐,Android Emulator将选取该音乐并直接录制到音频缓冲区中(并不是从麦克风进行实际录制)。然后可以轻松测试该音频文件,方法是打开Android Music Player并选择Playlist>Recently Added。播放器就会播放刚录制的音频文件了。

 

android实现之高清音频录制编码 场景说明: 在现在有安卓手机中AudioRecord录制出的音频是通过扬声器或表克风录制出来的。对于外录即扬声器录制的视频而言,音质十分渣。对于想要录制现场的声音如开会时,两人对话时声音证据保存的声音录制,完全不能满足需求。鉴于此,研究安卓平台下高清音频录制的解决方案。 原理:本人实现原理很简单,分为两部分:1, 原始音频采集,2 音频编码 。 1,原始音频采集: 还是通过 阅读详情

相关推荐

Android实现音频录制的两种方式

在移动APP开发中,每逢APP应用设计到多媒体开发的时候,都会让很多的程序员头疼不已,而且项目的开发进度会放慢、项目 的难度也会加大蛮多,同时APP的测试也会增加。Android中的多媒体开发,有音频的播放、音频录制、视频的播放、视频的录制 等,虽然Android的SDK中提供了一些基础的开发API类,如音频录制就提供了两种方式:AudioRecord录制音频和MediaRecorder录 制音频AudioRecord类相对于MediaRecorder来说,更加接近底层,为我们封装的方法也更少。然而实

zyxNobita专栏 1375

Android笔记84】Android之使用MediaRecorder录制音频

MediaRecorder是Android提供的一个专门用于录制音频和视频的类,它能够捕获各种编码格式的音频、视频。在使用MediaRecorder录制音视频的时候,确保android系统有相应的设备,例如:麦克风、相机等设备(注意:录制视频的时候,需要调用相机设备)。注意:Android Studio模拟器上无法录制音频,所以最好通过真机测试。

✅ Java 开发工程师 671

Android 音频(一) _ 采样量化编码 & AudioRecord 录制音频

为了给每一个离散值都对应一个数字码,必须将无限种取值转化为有限种取值(对于只能处理二进制的计算机来说,取值的可能数应该是2的倍数)。音频数据的大小以字节为单位,音频数据的读取是一批一批进行的,所以需要一个 while 循环持续不断地读取,每次读取多少字节由申请的缓冲区大小决定。这个接口提供了录制音频的抽象能力。是和业务层打交道的类,所以这一层就多了些零碎的控制逻辑,包括音频焦点的获取、存储和录音权限的判断、创建时声音文件、录音状态的回调。.pcm 后缀的文件是非常非常大的,这增加了存储和网络传输的成本。

2401_85730618的博客 1104

Audio音频开发

4、编解码处理结束后,MediaCodec将原始inputbuffer置为empty后放回左侧的input缓冲队列,将编解码后的数据放入到右侧output缓冲区队列。因为采样点、声道数、位深确定后,每秒产生的数据量就确定了,那么每次返回的数据块大小确定后,就可以估算出1秒钟会返回多少次,即可以知道单个音频数据块的返回间隙。ChannelMask 声道数,可以理解为声道数是和声音的立体感相关的,在设备支持的情况下声道数越多我们听到的声音越立体。如果传递代表的是编码器。

ITQ555的博客 1717

Android AudioRecord音频采集

Android AudioRecord

lilinwang1990的博客 1562

一次搞懂 Android 音频开发

AudioRecord、AudioTrack、Media codec、AAC

u010451990的专栏 9417

Android开发之使用MediaRecorder录制声音

为了在 Android 应用中录制声音,Android提供了 MediaRecorder 类,关于MediaRecorder的详解大家可以参考《Android开发之MediaRecorder类详解》。 使用MediaRecorder 录制声音的步骤: 1) 创建 MediaRecorder 对象。 2) 调用MediaRecorder对象的setAudioSource()方法设置声音来源,

fengyuzhengfan的专栏 1万+

安卓录制音频:使用MediaRecord实现

这一段时间,由于项目需要,一直在搞使用音频录制。看了网上很多大牛的代码,各种删删减减,百度来百度去,终于大体把流程搞通了,用时5天。 注意:本次代码实现:通过麦克风获取说话人语音->存储语音->播放刚录制的语音->退出。 一、MediaRecord简介 MediaRecord可用于视频与音频的捕捉,由于项目采用的是对于说话人语音采集,所以选择MediaRecord实现。 巨人的肩膀

vainfanfan的博客 4455

安卓学习日记——音频录制

音频录制 package com.example.mediarecorder; import android.media.MediaRecorder; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.vi...

chen_xiaoke的博客 195

Android 音频录制 的三种方式

对于录制音频Android系统就都自带了一个小小的应用,可是使用起来可能不是特别的灵活。所以有提供了另外的俩种。下边来介绍下这三种录制的方式;1、通过Intent调用系统的录音器功能,然后在录制完毕保存以后在onActivityResult中返回录制音频的uri,然后通过Mediaplayer进行播放调用系统的录音器 private final static int REQUEST_RECOR...

whyqcwy的专栏 4411

Android平台音频录制与播放技术深入解析

Android开发中,音频处理是实现丰富多媒体体验的重要组成部分。Android平台提供了多个音频API,让开发者可以方便地对音频数据进行录制、处理和播放。其中最核心的API包括AudioTrack等。本文将为读者介绍这些API的基本功能与使用方法,以及如何在实际项目中优化音频性能和处理相关权限问题。开发者有时需要根据特定需求实现自定义的录音格式,比如添加额外的元数据信息。这要求我们在录制时将数据以特定的字节流格式保存,并在播放时能够正确解析该格式。

weixin_32661831的博客 1109

安卓多媒体API——音频录制MediaRecorder

序 三分钟前了视频录制,实际上视频录制不是已经包括音频录制了吗? https://blog.csdn.net/nishigesb123/article/details/89507576 但如果单独的想要录制一段语音该如何操作呢?(遮住摄像头,误) 比如像微信一样,录制一段指定时长的语音,这篇文章就记录了安卓中的音频录制。 归档到多媒体。 MediaRecorder 概述 andro...

旧日灯塔 650

安卓使用MediaRecorder(1)录制音频的详细使用

引言 使用 MediaRecorder 的步骤 常见问题及解决思路 无法访问存储卡目录 录制音频文件没有声音 录制过程中出现异常 MediaRecorder无法正常启动 录制的音质或者画质很差 录制的文件无法播放 结语

分享Android应用和系统开发、音视频编码、性能优化相关知识 5834

Android音频录制开源项目推荐:Continuous Audiorecorder

Android音频录制开源项目推荐:Continuous Audiorecorder 1. 项目基础介绍及主要编程语言 Continuous Audiorecorder 是一个开源项目,旨在为 Android SDK 提供缺失的功能:支持暂停的音频录制功能。该项目基于 mp4parser 实现,主要使用 Java 编程语言编写。Continuous Audiorecorder 适用于那些需要在应用...

gitblog_00412的博客 516

Android音频开发(二):录制音频(WAV及MP3格式)

首先看下音频录制跟播放效果简图: CSDN不支持本地视频上传,我就先上传了一张截图: 上面是录音:长按即可录音,支持声波动画,右滑删除等。支持录制pcm、wav、mp3格式音频。 下面是播放:点击左边扬声器icon,开始播放刚录制的本地音频文件【也支持在线音频播放】,支持播放进度,支持切换播放模式(听筒/扬声器/耳机)等。 一、音频录制权限: 无论在做开发任何功能之前,总得先添加及申请相关权限,后续的工作才能正常进行下去。音频录制所需权限如下,而且要在代码中动态申请这些敏感权限,同意...

红日 1万+

Android MediaRecorder录制音频

今天介绍一下在Android中怎么录制音频,在Android中使用MediaRecorder来录制音频,步骤:   1、创建MediaRecorder对象。   2、调用MediaRecorder对象的setAudioSource()方法设置声音来源,一般传入MediaRecorder.AudioSource.MIC参数指定录制来在麦克风的声音。   3、调用MediaRecorder对象的set

潘洪金的博客 1082

(二)Android音频录制研究

上一篇实现了Android端文字的传输 点击打开链接,由于此系列要实现Android端语音的传输,所以这篇就先研究一下Android端语音的录制。先上效果图吧:这是主页就是几个按钮:音频录制分为文件录制和字节流录制,(1)文件采用Media Record录制和Media Player播放(2)字节流采用Audio Record录制和Audio Track播放(3)音量可视化就是实时获取音量大小,...

stormxiaofeng的博客 2091

Android 开发 AudioRecord音频录制

Android 开发 AudioRecord音频录制 前言   Android SDK 提供了两套音频采集的API,分别是:MediaRecorder 和 AudioRecord,前者是一个更加上层一点的API,它可以直接把手机麦克风录入的音频数据进行编码压缩(如...

weixin_30673611的博客 725
上一篇: Android之视频播放
下一篇: Android手机拍照功能源码
ITSource
博客等级 码龄15年 12粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值