【问题标题】:Mix 2 audio files with android ffmpeg android将 2 个音频文件与 android ffmpeg android 混合
【发布时间】:2014-06-04 09:48:40
【问题描述】:

我正在开发一个用于混合 2 个音频文件的 android 应用程序。我为此使用 android ffmpeg。我使用以下库。来自 GitHub https://github.com/guardianproject/android-ffmpeg-java

我使用以下代码混合来自活动的 2 个音频文件。

try {
             File fileAppRoot = new File(getApplicationInfo().dataDir);
             SoxController sxCon = new SoxController(fileAppRoot, new ShellUtils.ShellCallback() {
                    @Override
                    public void shellOut(String shellLine) {

                        System.out.println(shellLine);
                    }

                    @Override
                    public void processComplete(int exitValue) {

                    System.out.println("hello");
                    }
                });
             List<String> files=new ArrayList<String>();
             files.add(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Testing/me.mp3");
             files.add(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Testing/il.mp3");
             sxCon.combineMix(files,Environment.getExternalStorageDirectory().getAbsolutePath()+"/Testing/ial.mp3");

但这在 processComplete 上返回退出值 2,并且没有为混合音频生成新文件。 这将在日志中返回以下问题 no handler for file extension `mp3'

感谢您对此的任何帮助..

【问题讨论】:

    标签: android audio ffmpeg sox


    【解决方案1】:

    您不能将文件 mp3 与此库混合。

    它只能混合文件“.wave”。

    让我们将你的 mp3 文件转换为 wave 文件,然后使用这个库来混合文件 wave。

    我希望这个回复对你有好处。

    谢谢,

    【讨论】:

      【解决方案2】:

      https://github.com/bravobit/FFmpeg-Android

      实现'nl.bravobit:android-ffmpeg:1.1.7'

      public boolean mergeAudio(final Context context, File[] voiceFile, String file_name) {

          final ProgressDialog asyncDialog = new ProgressDialog(context);
          asyncDialog.setMessage("Audio Merging Start..");
          asyncDialog.setCancelable(false);
      
          final boolean[] isSuccess = {false};
          if (file_name != null) {
              file_name = Environment.getExternalStorageDirectory() + "/podmod/" + file_name + "_.mp3";
      
          } else {
              file_name = getMusicFilename();
          }
          File ffmpegFile = new File(file_name);
          if (ffmpegFile.exists()) {
              ffmpegFile.delete();
          }
      
          for (File f : voiceFile) {
              if (!f.exists()) {
                  Log.d("AudioMergingFailure", "File ot Exist");
                  return isSuccess[0];
              }
          }
          String s = "";
          String s_index = "";
          String fileSize = "n=" + voiceFile.length;
          for (int i = 0; i < voiceFile.length; i++) {
              s = s + "-i@" + voiceFile[i].getPath() + "@";
              s_index = s_index + "[" + i + ":0]";
      
          }
      
          String str_cmd = s + "-filter_complex@" + s_index + "concat=" + fileSize + ":v=0:a=1[out]@-map@[out]@" + file_name;
          Log.d("str_cmd", str_cmd);
      
          String[] cmd = str_cmd.split("@");
          final String finalFile_name = file_name;
          try {
              if (FFmpeg.getInstance(context).isSupported()) {
                  FFmpeg ffmpeg = FFmpeg.getInstance(context);
                  // to execute "ffmpeg -version" command you just need to pass "-version"
                  ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
                      @Override
                      public void onStart() {
                          asyncDialog.show();
                      }
      
                      @Override
                      public void onProgress(String message) {
                      }
      
                      @Override
                      public void onFailure(String message) {
                          Log.d("AudioMergingFailure", message);
                          asyncDialog.dismiss();
                          Toast.makeText(context, "Audio Merging Failed", 
                          Toast.LENGTH_LONG).show();
      
                      }
      
                      @Override
                      public void onSuccess(String message) {
                          asyncDialog.dismiss();
      
      
                          Log.v("onSuccess", message);
      
                          File ffmpegFile_ = new File(finalFile_name);
                          Toast.makeText(context, "Audio onSuccess", 
                          Toast.LENGTH_LONG).show();
      
      
                          isSuccess[0] = true;
                      }
      
                      @Override
                      public void onFinish() {
      
                          asyncDialog.dismiss();
      
                      }
      
                  });
      
      
              } else {
      
                  asyncDialog.dismiss();
      
              }
      
      
          } catch (Exception e) {
              asyncDialog.dismiss();
              Log.d("NotException_", e.getMessage());
          }
          return isSuccess[0];
      }
      
      public static String getMusicFilename() {
          return Environment.getExternalStorageDirectory() + "/podmod/Merged_Audio_" + getRandomNumber(0, 100000) + ".mp3";
      }
      

      【讨论】:

        猜你喜欢
        • 2018-11-25
        • 2019-10-07
        • 2018-10-14
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 2012-02-06
        • 1970-01-01
        相关资源
        最近更新 更多