如何在Android中暂停和恢复录音

时间:2014-02-20 07:15:57

标签: android audio android-mediaplayer resume

我正在使用MediaRecorder类开发录音应用程序。 我有以下要求:

1.按下暂停按钮后暂停录制。

2.按下恢复按钮后,继续录制暂停的位置。 我试试这个link

但我无法实现这项功能。

非常感谢任何帮助/建议。

4 个答案:

答案 0 :(得分:4)

此链接对于需要暂停和录制音频的用户也很有用。

https://github.com/lassana/continuous-audiorecorder

答案 1 :(得分:2)

答案 2 :(得分:1)

如果仍有此问题,您可以参考我的回答here

解决方案是在用户暂停时停止录制,并在恢复时再次启动,如stackoverflow中的许多其他答案中已经提到的那样。存储在阵列中生成的所有音频/视频文件,并使用以下方法合并所有媒体文件。该示例取自mp4parser库,并根据我的需要进行了一些修改。

public static boolean mergeMediaFiles(boolean isAudio, String sourceFiles[], String targetFile) {
        try {
            String mediaKey = isAudio ? "soun" : "vide";
            List<Movie> listMovies = new ArrayList<>();
            for (String filename : sourceFiles) {
                listMovies.add(MovieCreator.build(filename));
            }
            List<Track> listTracks = new LinkedList<>();
            for (Movie movie : listMovies) {
                for (Track track : movie.getTracks()) {
                    if (track.getHandler().equals(mediaKey)) {
                        listTracks.add(track);
                    }
                }
            }
            Movie outputMovie = new Movie();
            if (!listTracks.isEmpty()) {
                outputMovie.addTrack(new AppendTrack(listTracks.toArray(new Track[listTracks.size()])));
            }
            Container container = new DefaultMp4Builder().build(outputMovie);
            FileChannel fileChannel = new RandomAccessFile(String.format(targetFile), "rw").getChannel();
            container.writeContainer(fileChannel);
            fileChannel.close();
            return true;
        }
        catch (IOException e) {
            Log.e(LOG_TAG, "Error merging media files. exception: "+e.getMessage());
            return false;
        }
    }

对于音频文件使用标志isAudio为true,对视频文件使用false。

答案 3 :(得分:0)

for pause the mediarecorder
         my_rec.pause();
         im_pouse.setImageResource(R.drawable.ic_play_arrow_black_24dp);

    for resume the mediarecorder
         my_rec.resume();
         im_pouse.setImageResource(R.drawable.ic_pause_black_24dp);

希望它能起作用。