`

Android之录制歌曲

阅读更多

     我们使用录音功能,就得使用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. */
	@Override
	public 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() 
		{
			@Override
			public 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() 
		{
			@Override
			public void onClick(View arg0)
			{
				// TODO Auto-generated method stub
				if (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录音的声波动画

    在Android开发中,创建一个能够显示声波动画的录音应用是一项有趣的挑战,它结合了多媒体处理、用户界面设计以及实时数据可视化。以下是对这个"Android录音的声波动画"项目的关键知识点的详细解释: 1. **Android ...

    android开发揭秘PDF

    7.4 录制歌曲 7.5 相机设置 7.6 闹钟设置 7.7 铃声设置 7.8 小结 第8章 网络与通信 8.1 网络通信基础 8.1.1 无线网络技术 8.1.2 Android网络基础 8.2 HTTP通信 8.2.1 HttpURLConnection接口 8.2.2 HttpClient接口 ...

    Android音频混合 -- K歌合成

    本项目名为“Android音频混合 -- K歌合成”,旨在实现类似唱吧K歌合成和Tom猫录音的效果,允许用户录制声音并与伴奏混合成.wav音频文件。下面将详细介绍这一技术及其相关知识点。 1. **音频处理基础**:在Android中...

    Android应用开发揭秘pdf高清版

    7.4 录制歌曲 7.5 相机设置 7.6 闹钟设置 7.7 铃声设置 7.8 小结 第8章 网络与通信 8.1 网络通信基础 8.1.1 无线网络技术 8.1.2 Android网络基础 8.2 HTTP通信 8.2.1 HttpURLConnection接口 8.2.2 HttpClient接口 ...

    《Android应用开发揭秘》附带光盘代码.

     7.4 录制歌曲  7.5 相机设置  7.6 闹钟设置  7.7 铃声设置  7.8 小结  第8章 网络与通信  8.1 网络通信基础  8.1.1 无线网络技术  8.1.2 Android网络基础  8.2 HTTP通信  8.2.1 HttpURLConnection接口 ...

    Android代码-D-XXPlayer-android音乐播放器源码.zip

    在移动设备领域,Android操作系统占据主导地位,而音乐播放器作为用户日常使用的重要应用之一,其开发技术自然备受关注。本文将深入探讨基于Android平台的音乐播放器——D-XXPlayer的源码,旨在帮助开发者理解和学习...

    android player

    Android系统提供了一个强大的多媒体框架,它支持音频、视频的播放和录制。核心组件包括Media Player类,用于播放音频和视频文件;MediaRecorder类,用于录制音频和视频;以及MediaPlayerService,用于在后台持续播放...

    Android需求分析.pdf

    2. **系统背景**:随着Android手机的普及,记事本作为手机必备软件之一,其重要性不言而喻。它满足了用户快速记录和查询事件的需求,避免了因忘记重要事项而导致的不便。 3. **功能需求**: - **添加文本**:用户...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    android酷狗播放器源码

    Android系统提供了Media Framework,它是一套完整的多媒体处理库,支持音频、视频的播放和录制。酷狗播放器源码中就利用了这些API来实现音乐的解码和播放。开发者可以通过分析源码,了解如何初始化MediaPlayer对象,...

    《Android应用开发揭秘》源码

     7.4 录制歌曲  7.5 相机设置  7.6 闹钟设置  7.7 铃声设置  7.8 小结  第8章 网络与通信  8.1 网络通信基础  8.1.1 无线网络技术  8.1.2 Android网络基础  8.2 HTTP通信  8.2.1 HttpURLConnection接口 ...

    android 音频播放MP3 audio

    在Android平台上,音频播放是移动应用开发中常见且重要的功能之一。本教程将重点讲解如何在Android中播放MP3格式的音频文件,包括在线音乐的获取与播放控制。以下是相关的关键知识点: 1. **Android Media ...

    qt for android 音乐播放器QML界面

    【Qt for Android 音乐播放器 QML 界面】是一个使用Qt框架开发的Android平台上的音乐播放器应用。QML(Qt Meta Language)是Qt提供的一种声明式语言,用于构建用户界面,它允许开发者以一种简洁、直观的方式定义UI...

    基于android的音乐播放器源码

    【基于Android的音乐播放器源码】是一款专为Android平台设计的多媒体应用程序,它能够播放音频和视频文件,是Android开发者学习和理解移动应用开发,尤其是音乐播放功能实现的宝贵资源。这款源码提供了深入洞察...

    android音乐播放器Demo

    10. **权限管理**:Android 6.0及以后版本需要在运行时请求权限,如读取存储权限以访问音乐文件,以及音频录制权限以播放音乐。 通过分析和学习"android音乐播放器Demo"中的代码,开发者可以逐步掌握上述技能,最终...

    android 仿照网易云的听歌识曲

    在Android开发中,"仿照网易云的听歌识曲"是一个常见的功能需求,它允许用户通过手机麦克风捕捉环境中的音乐片段,并识别出正在播放的歌曲。这个功能结合了音频处理、机器学习和在线服务等多个技术领域。下面将详细...

    Android MP3录音实现

    在Android中,我们可以使用MediaRecorder类来实现音频的录制。设置MediaRecorder时,需要指定音频源(如AudioSource.MIC),输出格式(如AudioFormat.ENCODING_PCM_16BIT),以及音频编码(这里是MP3,需要通过设置...

    Android牛叉的音乐播放器

    2. **媒体框架**:Android提供了Media Framework,它是一个强大的音频和视频处理库,用于播放、录制和操作多媒体文件。在音乐播放器中,主要用到的是MediaPlayer类,它可以加载本地和网络音乐资源,并实现播放、暂停...

    media_android.rar_android

    6. **通知栏控制**:Android音乐播放器通常会在通知栏提供控制界面,让用户在任何界面下都能方便地进行播放、暂停、切换歌曲等操作。 7. **UI设计**:包括音乐列表、播放界面、控制面板等,需要考虑用户体验,实现...

    Android应用源码之高仿天天动听.zip

    在本资源"Android应用源码之高仿天天动听.zip"中,我们主要探讨的是一个针对安卓(Android)平台的应用程序源代码,该源码旨在模仿知名的音乐播放应用——天天动听。通过分析和学习这份源码,开发者可以深入了解...

Global site tag (gtag.js) - Google Analytics