我们使用录音功能,就得使用MediaRecorder类,这里实现一个简易的录音机,首先我们在界面上放置一个ListView来显示录音文件的列表,一个“开始”按钮,和一个“停止”按钮,当我们点击录音问价时就播放这段录音。

当点击“开始”按钮后就构建MediaRecorder对象,并且设置声音的来源(setAudioSource)、输出文件的格式(setOutputFormat)、音频文件的编码(setAudioEncoder)、输出文件的路径(setOutputFile)等;然后准备开始录音(prepare),开始录音(start).当点击“停止”按钮时,停止录音(stop),然后释放MediaRecorder对象(release),完成录音。

package com.yarin.android.Examples_07_05;import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.content.Intent;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;public class Activity01 extends ListActivity
{/* 按钮 */private Button         StartButton;private Button          StopButton;/* 录制的音频文件 */private File            mRecAudioFile;private File          mRecAudioPath;/* MediaRecorder对象 */private MediaRecorder    mMediaRecorder;/* 录音文件列表 */private List<String>   mMusicList  = new ArrayList<String>();/* 零时文件的前缀 */private String            strTempFile = "recaudio_";/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);/* 取得按钮 */StartButton = (Button) findViewById(R.id.StartButton);StopButton = (Button) findViewById(R.id.StopButton);/* 检测是否存在SD卡 */if (Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){/* 得到SD卡得路径 */mRecAudioPath = Environment.getExternalStorageDirectory();/* 更新所有录音文件到List中 */musicList();}else{Toast.makeText(Activity01.this, "没有SD卡", Toast.LENGTH_LONG).show();}/* 开始按钮事件监听 */StartButton.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View arg0){try{/* 创建录音文件 */mRecAudioFile = File.createTempFile(strTempFile, ".amr", mRecAudioPath);/* 实例化MediaRecorder对象 */mMediaRecorder = new MediaRecorder();/* 设置麦克风 */mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);/* 设置输出文件的格式 */mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);/* 设置音频文件的编码 */mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);/* 设置输出文件的路径 */mMediaRecorder.setOutputFile(mRecAudioFile.getAbsolutePath());/* 准备 */mMediaRecorder.prepare();/* 开始 */mMediaRecorder.start();}catch (IOException e){e.printStackTrace();}}});/* 停止按钮事件监听 */StopButton.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View arg0){// TODO Auto-generated method stubif (mRecAudioFile != null){/* 停止录音 */mMediaRecorder.stop();/* 将录音文件添加到List中 */mMusicList.add(mRecAudioFile.getName());ArrayAdapter<String> musicList = new ArrayAdapter<String>(Activity01.this, R.layout.list, mMusicList);setListAdapter(musicList);/* 释放MediaRecorder */mMediaRecorder.release();mMediaRecorder = null;}}});}/* 播放录音文件 */private void playMusic(File file){Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setAction(android.content.Intent.ACTION_VIEW);/* 设置文件类型 */intent.setDataAndType(Uri.fromFile(file), "audio");startActivity(intent);}@Override/* 当我们点击列表时,播放被点击的音乐 */protected void onListItemClick(ListView l, View v, int position, long id){/* 得到被点击的文件 */File playfile = new File(mRecAudioPath.getAbsolutePath() + File.separator + mMusicList.get(position));/* 播放 */playMusic(playfile);}/* 播放列表 */public void musicList(){// 取得指定位置的文件设置显示到播放列表File home = mRecAudioPath;if (home.listFiles(new MusicFilter()).length > 0){for (File file : home.listFiles(new MusicFilter())){mMusicList.add(file.getName());}ArrayAdapter<String> musicList = new ArrayAdapter<String>(Activity01.this, R.layout.list, mMusicList);setListAdapter(musicList);}}
}
/* 过滤文件类型 */
class MusicFilter implements FilenameFilter
{public boolean accept(File dir, String name){return (name.endsWith(".amr"));}
}

代码清单中通过“Environment.getExternalStorageDirectory()”可以取得SD卡路径。最后将录音保存带SD卡上,通过这个例子我们可以得出实现录音的一半步骤:

1:实例化MediaRecorder: mr=new MediaRecorder();

2:初始化mr:  mr.setAudioSource(MIC)/setVideoSource(CAMERA),必须在配置DataSource之前调用;

3: 配置DataSource:设置输出文件格式/路径,编码器等;

4:准备录制:mr.prepare();

5:开始录制:mr.start();

6:停止录制: mr.stop();

7:释放资源:mr.release();

Android之录制歌曲相关推荐

  1. android 模拟器声音设置,使用android模拟器录制声音

    我试图通过创建一个android应用程序来录制声音. 这里是代码:使用android模拟器录制声音 这是辅助类 package com.recorder; import java.io.File; i ...

  2. pcm 降采样_Android_android downsample降低音频采样频率代码,使用Android AudioRecord 录制PCM文 - phpStudy...

    android downsample降低音频采样频率代码 使用Android AudioRecord 录制PCM文件,android SDK保证在所有设备上都支持的采样频率只有44100HZ, 所以如 ...

  3. 如何使用Aimersoft iMusic for Mac从 Android 手机备份歌曲到 PC/Mac?

    如果计算机上没有副本,最好将 Android 手机中的歌曲备份到计算机上,因为我们永远不知道歌曲何时会因恢复出厂设置或病毒攻击而丢失.Aimersoft iMusic for Mac可以通过 2 个简 ...

  4. Android视频录制从不入门到入门系列教程(一)————简介

    一.WHY Android SDK提供了MediaRecorder帮助开发者进行视频的录制,不过这个类很鸡肋,实际项目中应该很少用到它,最大的原因我觉得莫过于其输出的视频分辨率太有限了,满足不了项目的 ...

  5. Android MediaRecorder录制视频详细步骤

    使用MediaRecorder能够编写从设备麦克风与相机捕获音视频,保存音频并(使用MediaPlayer)进行播放的应用. 1.添加权限: <uses-permission android:n ...

  6. Android手机录制屏幕及转GIF

    Android手机录制屏幕及转GIF Android开发,有时候我们需要录制手机屏幕,比如写了一个Demo,需要将效果录制下来制成GIF发布到博客上. 如下是我录制并转成GIF的效果图 对于Andro ...

  7. android studio 61歌曲服务器搭建 歌曲app 下载 完整代码

    import socket import sys from time import ctimedef FindMusicName(MusicName):f = open('musicName3.txt ...

  8. 利用FFmpeg玩转Android视频录制与压缩(二)

    请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/72983362 预热 时光荏苒,光阴如梭,离上一次吹牛逼已经过去了两三个 ...

  9. 利用FFmpeg玩转Android视频录制与压缩(三)

    请尊重原创,转载请注明出处http://blog.csdn.net/mabeijianxi/article/details/73011313 前言 上一回说到啊,这千秋月没是佳人离别,时逢枯枝落旧城, ...

  10. Android视频录制--屏幕录制

    上一篇介绍了MediaProjection,这个类可以用来实现安卓屏幕数据的采集,也就是手机一帧帧的截图,并输出成byte流的格式. 有兴趣的同学可以看这篇: Android视频录制--MediaPr ...

最新文章

  1. 从R-CNN到YOLO,2020 图像目标检测算法综述
  2. something new
  3. Apache+Tomcat+Mysql+php整合jsp,php
  4. asp.net MVC的EF与easyui DataGrid数据绑定
  5. c语言vc数据类型长度,vc和gcc对C语言数据类型长度的定义
  6. iOS:苹果内购实践
  7. 产品总监如何做产品规划?
  8. Soul网关源码阅读(六)请求类型探索
  9. error: undefined reference to `PathTrace::PathTrace(World*)' (Codeblocks, C++)
  10. java httpclient 包_java实现http请求之HttpClient
  11. 用友系统与银行接口对接实现财务数据的导入
  12. 32获取外部中断状态_STM8单片机中断的主要功能解析
  13. yield关键字 C#
  14. 关于动作捕捉动画一些记录
  15. VS2015社区版安装教程
  16. python实现——根据MD5进行文件去重
  17. 03.汇编语言和编译器
  18. 百寸大屏搭配高清画质,极米NEW Z6X轻松打造沉浸式家庭影院
  19. sc-RNA seq与Illumina测序
  20. JVM垃圾回收说为学日益,为道日损

热门文章

  1. Python脚本完成VCS文件的file_list到.prj文件的转化
  2. 计算机文件右击怎么显示打开方式,怎么删除Win10文件右键菜单打开方式中已卸载程序选项?...
  3. [转]如何在NIOS II中读写EPCS剩余空间
  4. win2008服务器系统玩红警,win8系统不能玩红警2如何解决?win8系统不能玩红警2的解决方法...
  5. git官网下载太慢解决方法
  6. Mac 右键展示Copy path
  7. 图像常用的格式总结及比较
  8. 【学习OpenCV4】聊聊图像格式
  9. css设置背景图片透明度
  10. 杰里之用户可在 chargebox.h 添加自定义命令,命令号必须大于等于 0xC0,小于 0xFE【篇】