2017-03-28 15 views
3

再生と一時停止の機能を備えた柔軟なオーディオレコーダーを開発するのに手伝ってくれる人は誰ですか?一時停止と再開機能付きのAndroidオーディオレコーダー

注目:PauseResumeAudioRecorderを使用しました。録音をやめたときにファイルが壊れてしまうような、いいですが柔軟ではありません。私もMP4Parserライブラリを使用しましたが、2つの大きなファイルをマージするのに多くの時間がかかります。

ここでは、2つのファイルをマージするために使用しているMp4Wrapperクラスを示します。

public final class Mp4ParserWrapper { 

public static final String TAG = "Mp4ParserWrapper"; 

public static final int FILE_BUFFER_SIZE = 1024; 

private Mp4ParserWrapper() { 
} 

/** 
* Appends mp4 audios/videos: {@code anotherFileName} to {@code mainFileName}. 
* 
* @param mainFileName The first file path. 
* @param anotherFileName The second file path. 
* 
* @return true if the operation was made successfully. 
*/ 
public static boolean append(String mainFileName, String anotherFileName){ 
    try { 
     File targetFile = new File(mainFileName); 
     File anotherFile = new File(anotherFileName); 
     if (targetFile.exists() && targetFile.length() > 0) { 
      String tmpFileName = mainFileName + ".tmp"; 
      append(mainFileName, anotherFileName, tmpFileName); 
      copyFile(tmpFileName, mainFileName); 
      return anotherFile.delete() && new File(tmpFileName).delete(); 
     } else { 
      if (!targetFile.exists()) { 
       if (!targetFile.getParentFile().exists()) { 
        if (!targetFile.getParentFile().mkdirs()) { 
         return false; 
        } 
       } 
       if (!targetFile.createNewFile()) { 
        return false; 
       } 
      } 
      copyFile(anotherFileName, mainFileName); 
      return anotherFile.delete(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
     Log.e(TAG, "Appending two mp4 files failed with exception", e); 
     return false; 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 

    } 
} 


private static void copyFile(final String from, final String destination) 
     throws IOException { 
    FileInputStream in = new FileInputStream(from); 
    FileOutputStream out = new FileOutputStream(destination); 
    copy(in, out); 
    in.close(); 
    out.close(); 
} 

private static void copy(FileInputStream in, FileOutputStream out) throws IOException { 
    byte[] buf = new byte[FILE_BUFFER_SIZE]; 
    int len; 
    while ((len = in.read(buf)) > 0) { 
     out.write(buf, 0, len); 
    } 
} 

public static void append(
     final String firstFile, 
     final String secondFile, 
     final String newFile) throws Exception { 
    final Movie movieA = MovieCreator.build(new FileDataSourceImpl(new File(secondFile))); 
    final Movie movieB = MovieCreator.build(new FileDataSourceImpl(firstFile)); 

    final Movie finalMovie = new Movie(); 

    final List<Track> movieOneTracks = movieA.getTracks(); 
    final List<Track> movieTwoTracks = movieB.getTracks(); 

    for (int i = 0; i < movieOneTracks.size() || i < movieTwoTracks.size(); ++i) { 
     finalMovie.addTrack(new AppendTrack(movieTwoTracks.get(i), movieOneTracks.get(i))); 
    } 

    final Container container = new DefaultMp4Builder().build(finalMovie); 

    final FileOutputStream fos = new FileOutputStream(new File(String.format(newFile))); 
    final WritableByteChannel bb = Channels.newChannel(fos); 
    container.writeContainer(bb); 
    fos.close(); 
} 

}

答えて

0

私はあなたが、それはコードが完全にそれを追加することにトラックサイズとそれぞれのを確認することを見ることができるファイルでmp4parserを使用することをお勧め。

+0

応答devありがとう 私はすでにmp4parserを使用していますが、複数のファイルをマージするには時間がかかりすぎます。あなたに別の解決策があるなら、それは素晴らしいことでしょう。 –

関連する問題