问题描述
我用下面的code录制音频文件和播放。我有一个恢复功能,重新开始录制。音频文件被存储在SD卡。我的问题是,这些文件将存储在SD卡,但该文件独自玩耍。我需要打所有录制的文件此起彼伏。给点建议。我的时间不多了......
I use the following code to record audio files and play. I have a resume function which starts recording again. The audio files are stored in sdcard. My problem is, the files get stored in the sdcard but the file alone play. I need to play all the recorded files one after another. Give suggestions. I am running out of time...
ReadSDData.java
包com.fsp.audio;
package com.fsp.audio;
进口的java.io.File;
进口的java.util.ArrayList;
import java.io.File;import java.util.ArrayList;
进口android.os.Environment;
进口android.util.Log;
import android.os.Environment;import android.util.Log;
公共类ReadSDDatas {
公共字符串文件路径()
{
字符串newFolderName =/ MyAudio;
。字符串extstoredir = Environment.getExternalStorageDirectory()的toString();
字符串的新路径= extstoredir + newFolderName;
返回的新路径;
}
public class ReadSDDatas { public String filePath() { String newFolderName="/MyAudio"; String extstoredir=Environment.getExternalStorageDirectory().toString(); String newPath=extstoredir+newFolderName; return newPath; }
public String getCombineFile()
{
String newFolderName="/MyComAudio";
String extstoredir=Environment.getExternalStorageDirectory().toString();
String path=extstoredir+newFolderName;
File myNewPath=new File(path);
if(!myNewPath.exists())
{
myNewPath.mkdir();
}
String audname="ComAudio";
String ext=".3gp";
File audio=new File(myNewPath,audname+ext);
if(audio.exists())
{
audio.delete();
}
String audpath=path+"/"+audname+ext;
Log.d("Combined audio file",audpath);
return audpath;
}
public ArrayList<String> getFileNames()
{
ArrayList<String> names=new ArrayList<String>();
names.clear();
String path=filePath();
File f=new File(path);
if(f.isDirectory())
{
File[] files=f.listFiles();
for(int i=0;i<files.length;i++)
{
System.out.println("File Name======>>>"+files[i].getName());
names.add(files[i].getName().toString().trim());
}
}
return names;
}
public ArvrayList<String> getFullAudioPath()
{
ArrayList<String> fullPath=new ArrayList<String>();
fullPath.clear();
String path=filePath();
File f=new File(path);
if(f.isDirectory())
{
File[] files=f.listFiles();
for(int i=0;i<files.length;i++)
{
String fpath=path+File.separator+files[i].getName().toString().trim();
System.out.println("File Full Path======>>>"+fpath);
fullPath.add(fpath);
}
}
return fullPath;
}
}
AudioResume1.java
包com.fsp.audio;
package com.fsp.audio;
进口的java.io.File;
进口java.io.FileInputStream中;
进口java.io.FileNotFoundException;
进口java.io.IOException异常;
进口java.io.RandomAccessFile中;
进口的java.util.ArrayList;
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.RandomAccessFile;import java.util.ArrayList;
进口android.app.Activity;
进口android.media.MediaPlayer;
进口android.media.MediaRecorder;
进口android.os.Bundle;
进口android.os.Environment;
进口android.util.Log;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.Button;
import android.app.Activity;import android.media.MediaPlayer;import android.media.MediaRecorder;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;
公共类AudioResume1延伸活动{
ArrayList的audNames =新的ArrayList();
ArrayList的audFullPath =新的ArrayList();
字节fileContent [];
public class AudioResume1 extends Activity { ArrayList audNames=new ArrayList(); ArrayList audFullPath=new ArrayList(); byte fileContent[];
Button record=null;
Button stoprec=null;
Button play=null;
public MediaPlayer player=null;
public MediaRecorder recorder=null;
int cou=0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
record=(Button)findViewById(R.id.recBtn);
stoprec=(Button)findViewById(R.id.stopBtn);
play=(Button)findViewById(R.id.playBtn);
record.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
System.out.println("********** Stated Recording **********");
recorder=new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
String path=audioFilePath();
System.out.println("Recording Path===========>>>"+path);
recorder.setOutputFile(path);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try
{
recorder.prepare();
recorder.start();
}
catch (IllegalStateException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
stoprec.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
System.out.println("********** Stoped Recording **********");
recorder.stop();
recorder.release();
recorder=null;
}
});
play.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
getAudioNames();
readAudioAsStream();
}
});
}
public void readAudioAsStream()
{
getAudioPath();
File f;
FileInputStream ins = null;
ReadSDDatas rds=new ReadSDDatas();
try
{
String comfile=rds.getCombineFile();
//FileOutputStream fos=new FileOutputStream(comfile);
Log.d("combined file",comfile);
File file=new File(comfile);
RandomAccessFile raf = new RandomAccessFile(file, "rw");
Log.d("path size",Integer.toString(audFullPath.size()));
for(int i=0;i<audFullPath.size();i++)
{
String filepath=audFullPath.get(i);
Log.d("Filepath",filepath);
f=new File(audFullPath.get(i));
fileContent = new byte[(int)f.length()];
ins=new FileInputStream(audFullPath.get(i));
int numofbytes=ins.read(fileContent);
System.out.println("Number Of Bytes Read===========>>>"+numofbytes);
raf.seek(file.length());
raf.write(fileContent);
}
}
catch (FileNotFoundException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
playAudio();
/*for(int i=0;i<audFullPath.size();i++)
{
Log.d("fullpathsize",Integer.toString(audFullPath.size()));
playAudio(audFullPath.get(i));
}*/
}
public void playAudio()
{
//Log.d("value of path",path);
/*String newFolderName="/MyComAudio";
String extstoredir=Environment.getExternalStorageDirectory().toString();
String filename="ComAudio.3gp";
String path1=extstoredir+newFolderName+filename;
Log.d("path1",path1);*/
String path="/sdcard/MyComAudio/ComAudio.3gp";
player= new MediaPlayer();
try
{
player.setDataSource(path);
player.prepare();
player.start();
}
catch (IllegalArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalStateException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void getAudioPath()
{
ReadSDDatas rds=new ReadSDDatas();
audFullPath=rds.getFullAudioPath();
}
public void getAudioNames()
{
ReadSDDatas rds=new ReadSDDatas();
audNames=rds.getFileNames();
}
public String audioFilePath()
{
String newFolderName="/MyAudio";
String extstoredir=Environment.getExternalStorageDirectory().toString();
String path=extstoredir+newFolderName;
File myNewPath=new File(path);
if(!myNewPath.exists())
{
myNewPath.mkdir();
}
cou++;
String audname="RecAudio";
String ext=".3gp";
File audio=new File(myNewPath,audname+Integer.toString(cou)+ext);
if(audio.exists())
{
audio.delete();
}
String audpath=path+File.separator+audname+Integer.toString(cou)+ext;
return audpath;
}
}
推荐答案
您可以使用MediaPlayer.onCompletionListener听事件,当一个曲目结束,所以,你可以玩下一个
You can use MediaPlayer.onCompletionListener to listen to the event when a track ends, so that you can play the next one
更新
player.setDataSource(path);
player.prepare();
player.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer player) {
player.stop();
// play next audio file
}
});
player.start();
更新2
在注释你的code将无法正常工作,这可能是一个解决办法:
Your code in the comment won't work, this could be a solution:
int i = 0;
//somewhere in your activity you start playing your first file
playAudio("/sdcard/MyAudio/RecAudio"+i+".3gp");
public void playAudio(path) {
player.setDataSource(path);
player.prepare();
player.setOnCompletionListener(new OnCompletionListener() {
@Override public void onCompletion(MediaPlayer mp) {
player.stop();
if(i < numberOfFiles) {
i++;
playAudio("/sdcard/MyAudio/RecAudio"+i+".3gp");
} else i = 0;
}
});
player.start();
}
这篇关于播放音频文件相继在安卓的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!