【Android 多媒体应用】使用MediaRecoder录制,MediaPlayer播放音频数据
1.MainActivity.java
import android.annotation.TargetApi;
import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast; import java.io.File;
import java.io.IOException; public class MainActivity extends Activity implements View.OnClickListener {
private final static String TAG = "debug--";
private Button btnRecord,btnStop,btnPlay;
private File soundFile;
private MediaRecorder mRecoder;
private MediaPlayer mPlayer;
private TextView mTxt ;
private Handler handler = new Handler(){
public void handleMessage(Message msg) {
Log.d(TAG, Integer.toString(msg.what));
mTxt.setText(msg.what/60+":"+msg.what%60);
super.handleMessage(msg);
}
}; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); btnRecord = (Button)findViewById(R.id.start);
btnStop = (Button)findViewById(R.id.stop);
btnPlay = (Button)findViewById(R.id.play);
mTxt = (TextView)findViewById(R.id.txtTime);
btnRecord.setOnClickListener(this);
btnStop.setOnClickListener(this);
btnPlay.setOnClickListener(this);
} public void onDestroy() { super.onDestroy();
if((mRecoder != null) && (soundFile !=null) && (soundFile.exists())) {
mRecoder.stop();
mRecoder.release();
mRecoder = null;
} } @Override
public void onClick(View v)
{
switch(v.getId())
{
case R.id.start:
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
Toast.makeText(MainActivity.this,"check SD Card Faild!",Toast.LENGTH_SHORT).show();
return;
} try {
soundFile = new File("sdcard/sound.amr");
mRecoder = new MediaRecorder();
mRecoder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecoder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
mRecoder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecoder.setOutputFile(soundFile.getAbsolutePath());
mRecoder.prepare();
mRecoder.start();
showRecordTime();
Log.d(TAG, "start");
Toast.makeText(MainActivity.this,"start Recording!",Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
break;
case R.id.stop:
if(soundFile != null && soundFile.exists())
{
mRecoder.stop();
mRecoder.release();
mRecoder = null;
Log.d(TAG, "stop");
Toast.makeText(MainActivity.this,"Stop Recording!",Toast.LENGTH_SHORT).show();
}
break;
case R.id.play:
{
Log.d(TAG,btnPlay.getText().toString());
if (btnPlay.getText().toString().equalsIgnoreCase("Play") ) {
Log.d(TAG,"play@@@@@@@");
mPlayer = new MediaPlayer();
try {
mPlayer.setDataSource("sdcard/sound.amr");
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.prepare();
mPlayer.start();
btnPlay.setText("Stop");
} catch (IOException e) {
e.printStackTrace();
}
}else if (btnPlay.getText().toString().equalsIgnoreCase("Stop") )
{
if(mPlayer != null)
{
mPlayer.stop();
mPlayer.release();
btnPlay.setText("Play");
}
}
}
break;
} } private void showRecordTime() { new Thread(new Runnable() {
@Override
public void run() {
int time_sec = 0;
while(mRecoder != null)
{
try {
Thread.sleep(1000);
Message message = new Message();
time_sec +=1;
message.what = time_sec ;
handler.sendMessage(message);
} catch (InterruptedException e) {
e.printStackTrace();
}
} }
}).start(); }
}
2.activity_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="match_parent"
android:layout_height="match_parent"
android:weightSum="1"> <TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center"
android:textSize="40dip"
android:textColor="#000000"
android:id="@+id/txtTime"/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="1dp">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/start"
android:text="start"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/stop"
android:text="stop"/>
</LinearLayout> <Button
android:text="play"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/play" /> </LinearLayout>
3.AndroidMainfest.xml添加权限
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
【Android 多媒体应用】使用MediaRecoder录制,MediaPlayer播放音频数据的更多相关文章
- Android学习总结(十六) ———— MediaPlayer播放音频与视频
一.基本概念 本文主要介绍的是Android中很重要也最为复杂的媒体播放器(MediaPlayer)部分的架构.Android的MediaPlayer包含了Audio和video的播放功能,在Andr ...
- Android MediaPlayer 播放音频
本文链接: Android MediaPlayer 播放音频 主要介绍使用MediaPlayer播放音频的方式.关于MediaPlayer的基础知识,比如状态,可以参考Android MediaPla ...
- MediaPlayer播放音频,也可以播放视频
使用MediaPlayer播放音频或者视频的最简单例子: JAVA代码部分: public class MediaPlayerStudy extends Activity { private Butt ...
- (原)关于OpenSL ES播放音频数据的一个奇怪的问题
关于OpenSL ES播放音频数据的一个奇怪的问题 Author:lihaiping1603@aliyun.com 最近用业余时间做了一个android平台的播放器sdk,其中视频用的opengl e ...
- Android 视频播放器 (二):使用MediaPlayer播放视频
在 Android 视频播放器 (一):使用VideoView播放视频 我们讲了一下如何使用VideoView播放视频,了解了基本的播放器的一些知识和内容.也知道VideoView内部封装的就是Med ...
- 【我的Android进阶之旅】解决MediaPlayer播放音乐的时候报错: Should have subtitle controller already set
一错误描述 二错误解决 解决方法一 解决方法二 一.错误描述 刚用MediaPlayer播放Music的时候,看到Log打印台总是会打印一条错误日志,MediaPlayer: Should have ...
- 使用MediaPlayer播放音频-----之二
MediaPlayer播放不同来源的音频文件: 一.播放应用的资源文件 1.调用MediaPlayer的create(Context context , int resid)方法加载指定资源文件. ...
- 使用MediaPlayer播放音频-----之一
MediaPlayer提供了如下方法来指定装载相应的音频文件: 1.void setDataSource( String path):指定装载path路径所代表的文件. 2.void setDa ...
- AudioManager: android插上耳机仍然使用扬声器播放音频
手机音频的输出有外放(Speaker).听筒(Telephone Receiver).有线耳机(WiredHeadset).蓝牙音箱(Bluetooth A2DP)等输出设备.在平时,电话免提.插拔耳 ...
随机推荐
- RowSet
import java.io.FileInputStream; import java.util.Properties; import javax.sql.rowset.JdbcRowSet; imp ...
- 初始化dataframe
由字典生成dataframe: >>> d = {'col1': [1, 2], 'col2': [3, 4]} >>> df = pd.DataFrame(dat ...
- 使用 ActiveMQ 创建 Java 应用
本章重点 Java 应用中内嵌 ActiveMQ 使用 Spring 内嵌 ActiveMQ 创建请求/响应应用 使用 Spring 构建 JMS 客户端
- SSAS——基础--cube
SSAS——基础 一.Analysis Services Analysis Services是用于决策支持和BI解决方案的数据引擎.它提供报表和客户端中使用的分析数据. 它可在多用途数据模型中创建 ...
- SSIS之序列容器
序列容器是一种十分简单,但使用非常广泛的容器,它可以对控制流的任务流组件进行结构化处理,把一些业务相关的任务组件,放到一个序列容器中,使整个包看起来更加整洁.美观,就如同我们家里的书柜.衣柜似的,把不 ...
- hdu 1536/ hdu 1944 S-Nim(sg函数)
S-Nim Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- IDEA提交Git时忽略文件【ignore文件备份】
IntellJ IDEA设置ignore文件忽略,需: 第一步:下载idea的ignore插件,链接:https://pan.baidu.com/s/14_cfq56g1s7Lc6LdiolvWA 密 ...
- mysql插入一万条数据
定义一个存储过程 mysql> delimiter $$ mysql> create procedure ptest() -> begin -> declare p ...
- 练习json读取中文
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- (转)SPFA算法
原文地址:http://www.cnblogs.com/scau20110726/archive/2012/11/18/2776124.html 粗略讲讲SPFA算法的原理,SPFA算法是1994年西 ...