对音频文件的操作 录音和播放

本文介绍了如何在Android应用中实现录音功能,并将录音文件保存到SD卡上,同时提供了播放SD卡上音频文件的简单示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

录音,并且把录影文件放在了外存储设备sdcard中:

package com.quidng.practice;

import java.io.File;
import java.io.IOException;

import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;

public class RecordSound extends Activity implements OnClickListener{

	private Button btnRecord,btnStop;
	private MediaRecorder recorder;
	private File soundFile;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.record_sound);
		
		btnRecord = (Button) findViewById(R.id.record_sound_record);
		btnRecord.setOnClickListener(this);
		btnStop = (Button) findViewById(R.id.record_sound_stop);
		btnStop.setOnClickListener(this);
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		if(soundFile != null && soundFile.exists() && recorder != null){
			recorder.stop(); 	//**停止录音**
			recorder.release(); //**释放资源**
			recorder = null;	
		}
	}

	@Override
	public void onClick(View v) {
		if(v.getId() == R.id.record_sound_record){
		    try {
		    	//直接存储到了sdcard中
		    	soundFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile() + "/sound1.amr");
				recorder = new MediaRecorder();
			    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);  //录制的声音的来源
//			    recorder.setVideoSource(video_source);   //录制视频
			    
			    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);   //录制的声音的输出格式(必须在设置声音的编码格式之前设置)
			    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  //设置声音的编码格式
			    recorder.setOutputFile(soundFile.getAbsolutePath());    //设置声音的保存位置
				recorder.prepare();	 //**准备录音**
			    recorder.start();    //**开始录音**
			} catch (IllegalStateException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} 
		}else if(v.getId() == R.id.record_sound_stop){
			if(soundFile != null && soundFile.exists()){
				recorder.stop(); 	//**停止录音**
				recorder.release(); //**释放资源**
				recorder = null;	
			}
		}
	}
}

 播放音乐:

package com.quding.widget.musicplayer;

import java.io.IOException;
import android.app.Service;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;

public class MusicPlayerService extends Service{

	private MediaPlayer player;
	private AssetFileDescriptor asserAssetFileDescriptor;
	
	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}
	
	@Override
	public void onCreate() {
		super.onCreate();
		AssetManager assetManager = this.getAssets();   //获得一个assert资源管理器的实例
		try {
		    asserAssetFileDescriptor = assetManager.openFd("run_with_myself.mp3");   //获取一个raw资源
		} catch (IOException e) {
			e.printStackTrace();
		}
		player = new MediaPlayer();   //播放assert中的文件

//		player = MediaPlayer.create(getApplicationContext(), R.raw.run_with_myself);     //这个是播放raw中的音频文加

 //		player = new MediaPlayer();     //播放sdcard中的文件
//		try {
//			player.setDataSource("/sdcard/sound1.arm");   //指明路径
//			player.prepare();   //装载音频文件
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
		Log.i("tag", "service已经存在");
	}
	
	@Override
	public void onStart(Intent intent, int startId) {
		super.onStart(intent, startId);
		if(intent != null){
			Log.i("tag", intent.getData().toString());
				int operator = Integer.parseInt(intent.getData().toString()); //operate带着具体的操作信息
				switch (operator) {
				case 1 :    //打开
					playMusic();
					break;
				case 2 :	//暂停
					pauseMusic();
					break;
				case 3 :	//停止
					stopMusic();
					break;
			}
		}
	}
	
	private void playMusic() {
		if(player != null && !player.isPlaying()){
			try {
				//设置资源
				player.setDataSource(asserAssetFileDescriptor.getFileDescriptor(),
						asserAssetFileDescriptor.getStartOffset(),
						asserAssetFileDescriptor.getLength());
				player.prepare(); //加载资源
				player.start();
				Log.i("tag", "播放音乐");
			} catch (Exception e) {
				e.printStackTrace();
			} 
		}
	}
	
	private void pauseMusic(){
		if(player != null && player.isPlaying()){
			player.pause();
			Log.i("tag", "暂停");
		}
	}
	
	private void stopMusic(){
			player.stop();
			Log.i("tag", "停止");
		try {
			player.reset();   //使mediaPlayer会回到初始化之前的地方,需要重新加载文加,
			player.setDataSource(asserAssetFileDescriptor.getFileDescriptor(),
					asserAssetFileDescriptor.getStartOffset(),
					asserAssetFileDescriptor.getLength());
			player.prepare(); //加载资源
			Log.i("tag", "重新加载文件");
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值