【问题标题】:How to cut music file in external storage如何在外部存储中剪切音乐文件
【发布时间】:2021-10-29 13:54:45
【问题描述】:

我想以编程方式在 android 中剪切或修剪音频歌曲文件。例如:我的手机已经有可用的音乐文件时间播放 4 分钟,我想从第 2 分钟到第 3 分钟剪切或修剪歌曲,如何?请逐步详细指导。谢谢!

chplay 上的应用具有相同的功能 https://play.google.com/store/apps/details?id=com.mp3cutter.mixaudio.musiceditor https://play.google.com/store/apps/details?id=com.tianxingjian.supersound

我已尝试此代码,但返回 RETURN_CODE_FAILED

trimMusic(position_start,position_end,"NAME_SONG");

private void trimMusic(long startMs, long endMs, String fileName) {
    File folder = new File(Environment.getExternalStorageDirectory() + "/MusicEditor/");
    folder.setReadable(true);
    if (!folder.exists()) {
        folder.mkdir();
    }
    filePrefix = fileName;

    String fileExt = ".mp3";
    System.out.println("audio"+fileExt);
    dest = new File(folder, filePrefix + fileExt);
    original_path = path;

    duration = (endMs - startMs) / 1000;
    filePath = dest.getAbsolutePath();

    Log.d("chandoixuanduc",filePath);

    command = new String[]{"-ss", "" + startMs / 1000, "-y", "-i", original_path, "-t", "" + (endMs - startMs) / 1000, "-vcodec", "mpeg4", "-b:v", "2097152", "-b:a", "48000", "-ac", "2", "-ar", "22050", filePath};
    execffmpegBinary(command);
}

private void execffmpegBinary(final String[] command) {
    Config.enableLogCallback(new LogCallback() {
        @Override
        public void apply(LogMessage message) {
            Log.e(Config.TAG, message.getText());
        }
    });

    Config.enableLogCallback(new LogCallback() {
        @Override
        public void apply(LogMessage message) {
            Log.e(Config.TAG, message.getText());
        }
    });

    Config.enableStatisticsCallback(new StatisticsCallback() {
        @Override
        public void apply(Statistics newStatistics) {

        }
    });
    Log.d(TAG, "Started command : ffmpeg " + Arrays.toString(command));


    long executionId = FFmpeg.executeAsync(command, new ExecuteCallback() {
        @Override
        public void apply(long executionId, int returnCode) {
            if (returnCode == RETURN_CODE_SUCCESS) {
                //  progressDialog.dismiss();
                dialog.dismiss();
                Toast.makeText(getActivity(), R.string.status_cut_music_sus, Toast.LENGTH_LONG).show();
                Log.d("chandoixuanduc","RETURN_CODE_SUCCESS");

            }
            else if (returnCode == RETURN_CODE_CANCEL) {
                Log.d("chandoixuanduc","RETURN_CODE_CANCEL");
            }
            else {
                Toast.makeText(getActivity(), R.string.status_cut_music_failed, Toast.LENGTH_LONG).show();
                Log.d("chandoixuanduc","RETURN_CODE_FAILED");
            }
        }
    });
}

【问题讨论】:

    标签: android


    【解决方案1】:

    最简单最准确的方法是使用FFmpeg,https://github.com/tanersener/ffmpeg-kit一个Android库制作很容易实现。

    这是一个使用 FFmpeg 修剪音频的命令:

    ffmpeg -ss 180 -i input -t 240 -c copy output
    
    • -ss : 修剪的起点

    • 180 : 180 秒 = 3 分钟

    • input : 要修剪的音频文件

    • -t : 直到你想要修剪的地方

    • 240 : 240 秒 = 4 分钟

    • -c copy : 复制流

    • 输出 : 你想保存修剪后的音频的位置

    【讨论】:

    • 嗨,HB。我编辑了问题。请指导如何剪切音乐文件
    • @NguyenDuc 我已经回答了你最初的问题。您可以打开另一个与您遇到的问题相关的问题。
    • 我已经可以使用FFmpeg剪切音乐文件并保存在外部存储中。但我无法在我的应用程序中剪切音乐文件来播放音乐文件。我使用此代码获取设备中的所有文件 mp3,但没有剪切的音乐文件
    • Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;字符串 [] 投影 = {MediaStore.Audio.AudioColumns.DATA,MediaStore.Audio.AudioColumns.ALBUM,MediaStore.Audio.ArtistColumns.ARTIST,}; cursor = context.getContentResolver().query(uri, projection, null, null, null);
    • 就像我说的。我已经回答了你的问题。如果我的回答对您有所帮助,请接受并提出一个新问题。你现在问的问题是否与你原来的问题完全不同。
    猜你喜欢
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2022-07-01
    • 2016-08-01
    相关资源
    最近更新 更多