android – 组合音频文件和播放不同API版本的奇怪问题

前端之家收集整理的这篇文章主要介绍了android – 组合音频文件和播放不同API版本的奇怪问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所有,我正在使用录音机录音.

情况1:如果我使用安装Android 2.2版本的设备,我录制的音频组合起来很好.

情况2:如果我在Android 1.6安装的设备中使用它,我无法播放组合的音频文件.

它只播放第一个录制的音频和下一个录制的音频文件保持空没有声音.

我也没有在Logcat中收到任何错误.

我使用以下代码录制音频:

mRecorder = new MediaRecorder();
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
    mRecorder.setOutputFile(main_record_file);
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    mRecorder.prepare();
    mRecorder.start();

我也试过mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

代码组合音频文件

public void createCombineRecFile(){
    combined_file_stored_path=getFilename_combined_raw(); // File path in String to store recorded audio
    byte fileContent[]=null;
    FileInputStream ins;
    FileOutputStream fos = null;
    try{
        fos = new FileOutputStream(combined_file_stored_path,true);
    }
    catch (FileNotFoundException e1){
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    for(int i=0;i<audNames.size();i++){
        try{
            File f=new File(audNames.get(i));
            Log.v("Record Message","File Length=========>>>"+f.length());
            fileContent = new byte[(int)f.length()];
            ins=new FileInputStream(audNames.get(i));
            int r=ins.read(fileContent);// Reads the file content as byte from the list.
            Log.v("Record Message","Number Of Bytes Readed=====>>>"+r);
            fos.write(fileContent);//Write the byte into the combine file.

            Log.v("Record Message","File======="+i+"is Appended");

        }
        catch (FileNotFoundException e){
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IOException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    try{
        fos.close();
        Log.v("Record Message","===== Combine File Closed =====");
    }
    catch (IOException e){
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

让我知道任何细节需要.谢谢.

解决方法

每个音频文件都有自己的标题(包括有关长度/样本等的信息) – 通过组合文件,生成文件的方式有多个标题,每个源文件一个(取决于具有文件偏移的确切格式等).
因此,文件格式规范的结果文件不正确.

较新的Android版本更容易,工作/播放与“多头”存在…旧版本不…

要创建正确组合的音频文件,您必须符合规范,其中包括创建一个新的标题,描述所有包含的音频…

用于组合音频文件的一种不同的方法 – 例如通过ffmpeg(请参阅this如何使ffmpeg为android).

原文链接:/android/311344.html

猜你在找的Android相关文章