如何在Android中暂停录音?

时间:2013-05-08 08:28:15

标签: android audio-recording mediarecorder android-mediarecorder

我的目标是暂停录制文件。 我在Android开发者网站上看到它但是Media Recorder没有暂停选项。

Java支持以编程方式合并两个音频文件,但在android中它不起作用。

Join two WAV files from Java?

我还使用了所有设备都可以使用的默认设备录音机应用程序,但在三星中,很少有设备没有恢复录制路径。

Intent intent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
startActivityForResult(intent,REQUESTCODE_RECORDING);

任何一个有暂停功能的录音帮助。

4 个答案:

答案 0 :(得分:10)

http://developer.android.com/reference/android/media/MediaRecorder.html

MediaRecorder没有暂停和恢复方法。您需要使用停止和启动方法。

答案 1 :(得分:6)

如果仍有此问题,您可以参考我的回答here。对于API级别> = 24个暂停/恢复方法在Android MediaRecorder类中可用。

对于API级别< 24

在您的gradle文件中添加以下依赖项:

compile 'com.googlecode.mp4parser:isoparser:1.0.2'

解决方案是在用户暂停时停止录制,并在恢复时再次启动,如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。

答案 2 :(得分:5)

我的一个项目中有这样的要求,我们所做的就像使用AudioRecord创建一个用于在录制开始时保存记录数据的原始文件,每个简历我们将数据附加到同一个文件

FileOutputStream fos= new FileOutputStream(filename, true); 

这里的文件名是原始文件的名称,并将新的记录数据附加到它。

当用户停止录制时,我们会将整个原始文件转换为.wav(或其他)格式。对不起,我无法发布整个代码。希望这会给你一个工作的方向。

答案 3 :(得分:1)

你不能使用Android API来做,但你可以保存很多mp4文件并使用mp4parser合并它:用Java编写的强大的库。另请参阅我的简单录音机“暂停”:https://github.com/lassana/continuous-audiorecorder