public class MainActivity extends Activity {
private Button start_btn,stop_btn;//开始结束录音按钮
private ListView list_view;//显示录音文件的listview
private MediaRecorder mediaRecorder;//创建一个系统媒体录音MediaRecorder
private File recorderFile;//录制的音频文件
private File recorderPath;//录制的音频文件路径
private List<String> lMusicList=new ArrayList<String>();////录音文件列表
private String shortFile = "录音_";//临时文件的前缀
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
//一、调用获取音频文件路径的方法
recorderPath=getRecorderSDPath();
//二、调用获取音频的list列表
if(recorderPath!=null){
getMusicList();
}
//三、开始录音
start_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//1、实例化MediaRecorder对象
mediaRecorder=new MediaRecorder();
//2、设置麦克风
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
/* 3、设置输出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default
* THREE_GPP(3gp格式,H263视频/AMR音频编码)、MPEG-4、RAW_AMR(只支持音频且音频编码要求为AMR_NB)
* */
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//4、设置音频文件的编码:AAC/AMR_NB/AMR_MB/Default
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
//5、设置输出文件的路径
recorderFile=File.createTempFile(shortFile, ".amr",recorderPath);
mediaRecorder.setOutputFile(recorderFile.getAbsolutePath());
//6、准备录音
mediaRecorder.prepare();
//7、开始录音
mediaRecorder.start();
//8、设置按钮状态
start_btn.setEnabled(false);
stop_btn.setEnabled(true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
//四、停止录音
stop_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(recorderFile!=null){
//1、停止录音
mediaRecorder.stop();
//2、将录音文件添加到List中
lMusicList.add(recorderFile.getName());
//3、new一个ArrayAdapter<String>对象,将lMusicList放入
ArrayAdapter<String> musicList1=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, lMusicList);
//4、将musicList1放入list_view
list_view.setAdapter(musicList1);
//5、释放资源
mediaRecorder.release();
mediaRecorder=null;
//6、设置按钮状态
start_btn.setEnabled(true);
stop_btn.setEnabled(false);
}
}
});
//五、为list_view设置监听,得到每一个点击的item;当我们点击列表时,播放被点击的音乐
list_view.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
File playMusicFile=new File(recorderPath.getAbsolutePath()+File.separator+lMusicList.get(position));
// 调用播放音乐方法
playMusic(playMusicFile);
}
});
}
//实例化
private void init() {
// TODO Auto-generated method stub
start_btn=(Button)findViewById(R.id.start_btn);
stop_btn=(Button)findViewById(R.id.stop_btn);
list_view=(ListView)findViewById(R.id.list_view);
//设置按钮的初始状态
start_btn.setEnabled(true);
stop_btn.setEnabled(false);
}
//获取音频文件路径的方法
private File getRecorderSDPath() {
// TODO Auto-generated method stub
File file=null;
if(Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){
file=Environment.getExternalStorageDirectory();
}else{
Toast.makeText(this, "无SD卡,请确认SD卡以插入。", Toast.LENGTH_LONG).show();
}
return file;
}
//获取音频的list列表
private void getMusicList() {
// TODO Auto-generated method stub
File fileHome=recorderPath;
//括号里填的是音乐过滤器对象
if(fileHome.listFiles(new MusicFilter()).length>0){
for(File file:fileHome.listFiles(new MusicFilter())){
lMusicList.add(file.getName());
}
ArrayAdapter<String> musiclist=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1,lMusicList);
list_view.setAdapter(musiclist);
}
}
//音乐过滤器类
class MusicFilter implements FilenameFilter{
@Override
public boolean accept(File dir, String filename) {
// TODO Auto-generated method stub
return filename.endsWith(".amr");
}
}
//播放音乐方法
private void playMusic(File playMusicFile) {
// TODO Auto-generated method stub
Intent intent=new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(playMusicFile);
intent.setDataAndType(uri, "audio/mp3");
startActivity(intent);
}
}
多媒体—录音
最新推荐文章于 2023-10-18 21:16:10 发布
