播放音频文件相继在安卓 [英] Playing audio files one after another in android

查看:102
本文介绍了播放音频文件相继在安卓的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用下面的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;
}

}

推荐答案

您可以使用<一个href=\"http://developer.android.com/reference/android/media/MediaPlayer.html#setOnCompletionListener%28android.media.MediaPlayer.OnCompletionListener%29\">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();
}

这篇关于播放音频文件相继在安卓的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆