8

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

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

从 Java 中加入两个 WAV 文件?

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

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

任何一种对带有暂停功能的录音的帮助。

4

4 回答 4

10

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

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

于 2013-05-08T08:32:22.157 回答
6

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

喜欢

FileOutputStream fos= new FileOutputStream(filename, true); 

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

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

于 2013-05-08T08:37:42.900 回答
6

如果仍然有此问题,您可以在此处参考我的答案。对于 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。

于 2016-09-13T11:08:50.953 回答
1

使用 Android API 无法做到这一点,但您可以保存大量 mp4 文件并使用mp4parser合并它:用 Java 编写的强大库。另请参阅带有“暂停”的简单录音机:https ://github.com/lassana/continuous-audiorecorder 。

于 2013-09-17T16:33:03.720 回答