Android 中歌曲录制。。。
package com.king.android.media;
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.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import com.king.android.R;
/**
* 描述:声音录制
* 作者:Andy.Liu
* 时间: 2012-7-30 上午07:27:06
**/
public class RecordActivity extends ListActivity implements OnClickListener {
//录制的音频文件
private File mRecAudioFile,mRecAudioPath;
private MediaRecorder mMediaRecoder;// MediaRecorder 对象
private List<String> mMusicList = new ArrayList<String>(); //录音文件列表
private String strTempFile = "recaudio_"; //临时文件前缀
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mediarecore_layout);
Button btnOperate = (Button) findViewById(R.id.btnStart);
btnOperate.setOnClickListener(this);
btnOperate = (Button) findViewById(R.id.btnStop);
btnOperate.setOnClickListener(this);
mRecAudioPath = Environment.getExternalStorageDirectory();
refreshFile(mRecAudioPath.getAbsolutePath(),".amr");
// musicList();
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btnStop:
doStop();
break;
case R.id.btnStart:
doStart();
break;
}
}
//开始录音
private void doStart(){
try {
//创建录音文件
mRecAudioFile = File.createTempFile(strTempFile, ".amr", mRecAudioPath);
//实例化MediaRecorder对象
mMediaRecoder = new MediaRecorder();
//设置麦克风
mMediaRecoder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置输出的文件格式
mMediaRecoder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
//设置音频文件 的编码
mMediaRecoder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
//文件输出路径
mMediaRecoder.setOutputFile(mRecAudioFile.getAbsolutePath());
//准备
mMediaRecoder.prepare();
//开始
mMediaRecoder.start();
} catch (IOException e) {
e.printStackTrace();
}finally{
}
}
private void doStop(){
if(null!=mRecAudioFile){
mMediaRecoder.stop(); //停止录音
mMusicList.add(mRecAudioFile.getName());
ArrayAdapter<String> musicList = new ArrayAdapter<String>(RecordActivity.this, R.layout.list, mMusicList);
setListAdapter(musicList);
mMediaRecoder.release();
mMediaRecoder = 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);
}
/**
*
*TODO:播放列表
*Author:Andy.Liu
*Create Time:2012-7-28 上午11:27:26
*TAG:
*Return:void
*/
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>(RecordActivity.this, R.layout.list, mMusicList);
setListAdapter(musicList);
}
}
/**
*
递归法获取文件夹文件
*TODO:TODO
*Author:Andy.Liu
*Create Time:2012-7-29 下午11:40:33
*TAG:@param path 文件路径,一般选择根目录
*TAG:@param fileType 文件类型。
*Return:void
*/
public void refreshFile(String path,String fileType){
File file = new File(path);
File[] files = file.listFiles();
if(null==files)
return;
for(int i = 0;i<files.length;i++){
if(files[i].isDirectory()){
refreshFile(files[i].getAbsolutePath(),fileType); //注意这里的递归方法
}else{
if(files[i].getName().endsWith(fileType))
// allFiles.add(files[i]);
mMusicList.add(file.getName());
}
}
}
//过渡文件类型
class MusicFilter implements FilenameFilter{
@Override
public boolean accept(File dir, String filename) {
return filename.endsWith(".amr");
}
}
}
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.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import com.king.android.R;
/**
* 描述:声音录制
* 作者:Andy.Liu
* 时间: 2012-7-30 上午07:27:06
**/
public class RecordActivity extends ListActivity implements OnClickListener {
//录制的音频文件
private File mRecAudioFile,mRecAudioPath;
private MediaRecorder mMediaRecoder;// MediaRecorder 对象
private List<String> mMusicList = new ArrayList<String>(); //录音文件列表
private String strTempFile = "recaudio_"; //临时文件前缀
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mediarecore_layout);
Button btnOperate = (Button) findViewById(R.id.btnStart);
btnOperate.setOnClickListener(this);
btnOperate = (Button) findViewById(R.id.btnStop);
btnOperate.setOnClickListener(this);
mRecAudioPath = Environment.getExternalStorageDirectory();
refreshFile(mRecAudioPath.getAbsolutePath(),".amr");
// musicList();
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btnStop:
doStop();
break;
case R.id.btnStart:
doStart();
break;
}
}
//开始录音
private void doStart(){
try {
//创建录音文件
mRecAudioFile = File.createTempFile(strTempFile, ".amr", mRecAudioPath);
//实例化MediaRecorder对象
mMediaRecoder = new MediaRecorder();
//设置麦克风
mMediaRecoder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置输出的文件格式
mMediaRecoder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
//设置音频文件 的编码
mMediaRecoder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
//文件输出路径
mMediaRecoder.setOutputFile(mRecAudioFile.getAbsolutePath());
//准备
mMediaRecoder.prepare();
//开始
mMediaRecoder.start();
} catch (IOException e) {
e.printStackTrace();
}finally{
}
}
private void doStop(){
if(null!=mRecAudioFile){
mMediaRecoder.stop(); //停止录音
mMusicList.add(mRecAudioFile.getName());
ArrayAdapter<String> musicList = new ArrayAdapter<String>(RecordActivity.this, R.layout.list, mMusicList);
setListAdapter(musicList);
mMediaRecoder.release();
mMediaRecoder = 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);
}
/**
*
*TODO:播放列表
*Author:Andy.Liu
*Create Time:2012-7-28 上午11:27:26
*TAG:
*Return:void
*/
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>(RecordActivity.this, R.layout.list, mMusicList);
setListAdapter(musicList);
}
}
/**
*
递归法获取文件夹文件
*TODO:TODO
*Author:Andy.Liu
*Create Time:2012-7-29 下午11:40:33
*TAG:@param path 文件路径,一般选择根目录
*TAG:@param fileType 文件类型。
*Return:void
*/
public void refreshFile(String path,String fileType){
File file = new File(path);
File[] files = file.listFiles();
if(null==files)
return;
for(int i = 0;i<files.length;i++){
if(files[i].isDirectory()){
refreshFile(files[i].getAbsolutePath(),fileType); //注意这里的递归方法
}else{
if(files[i].getName().endsWith(fileType))
// allFiles.add(files[i]);
mMusicList.add(file.getName());
}
}
}
//过渡文件类型
class MusicFilter implements FilenameFilter{
@Override
public boolean accept(File dir, String filename) {
return filename.endsWith(".amr");
}
}
}
有些东西会,但不精通,而我现在要做的就是精通,复习回顾,整理自己的框架,举一反三。。。