2016-11-09 23 views
0

私は、フォルダ内の定義されたタイプのオーディオファイルをチェックし、コンバータを呼び出してそのフォーマットを変更するコードを持っています。現在、最初のファイルが渡されると、converterが呼び出され、ファイルは変換の途中であるため、2番目のファイルに対して再度converterというループが実行されます。これで私は以前の/後のプロセスが終了したので、出力として変換されたファイルしか得られないと感じました。コードはこちらです。どのように私はすべてのファイルconveretedを取得することができます。呼び出されたメソッドが完了するまでループ待機します

public void convertAudio(View v) { 


     final File pathanme = new File(Environment.getExternalStorageDirectory() + "/sdcard/test"); 
     File files[] = pathanme.listFiles(); 
     for (File f : files) { 
      if (f.getName().endsWith(".mp4")) { 
       String filename = f.getName().toLowerCase().toString(); 
       System.out.println(filename); 

       File wavFile = new File(pathanme, filename); 
       IConvertCallback callback = new IConvertCallback() { 
        @Override 
        public void onSuccess(File convertedFile) { 
         Toast.makeText(NewMainActivity.this, "SUCCESS: " + convertedFile.getPath(), Toast.LENGTH_LONG).show(); 
        } 

        @Override 
        public void onFailure(Exception error) { 
         Toast.makeText(NewMainActivity.this, "ERROR: " + error.getMessage(), Toast.LENGTH_LONG).show(); 
        } 
       }; 
       Toast.makeText(this, "Converting audio file..." + filename, Toast.LENGTH_SHORT).show(); 

       AndroidAudioConverter.with(this) 
         .setFile(wavFile) 
         .setFormat(AudioFormat.MP3) 
         .setCallback(callback) 
         .convert(); 
      } 
     } 

uはそこ変換に対する成功メッセージがあると私は一つだけのファイルを渡すと、私は成功メッセージを得たのに対し、私はループのために、この下をやったことがなかった表示された場合。 plsアドバイス。

+1

複数のファイルをサポートしたり、いくつかのセマフォを行うには、ライブラリの作成者に問い合わせてください(基本的なmultithreinding同期コンセプト:それは、この(Javaは少し錆びている、あなたは構文をクリーンアップする必要があるかもしれません)のようなものを見てね)これは 'convert()'呼び出しが前の仕事を終わらせることを許さないでしょう – Selvin

+0

人々はサポートの代わりに初心者の質問をダウングレードすることに熱心です。私は今ここに尋ねることを恐れている。 –

+0

人は研究する前に尋ねるのがとても怠惰です... – Selvin

答えて

0

インデックスにクラスインスタンス変数を追加し、必要に応じてconvert()メソッドを再帰的に呼び出すことで、必要に応じて変数を増やすことができます。

public class MyClass { 

    private int fileIndex = 0; 
    private File[] files; 

    public void convertAudio(View v) { 
    final File pathanme = new File(Environment.getExternalStorageDirectory() + "/sdcard/test"); 
    this.files = pathanme.listFiles(); 
    fileIndex = 0; 
    convertFile(files[fileIndex]); 

    } 

    private void convertFile(File f) { 
     if (f.getName().endsWith(".mp4")) { 
     String filename = f.getName().toLowerCase().toString(); 
     System.out.println(filename); 

     File wavFile = new File(pathanme, filename); 
     IConvertCallback callback = new IConvertCallback() { 
      @Override 
      public void onSuccess(File convertedFile) { 
       Toast.makeText(NewMainActivity.this, "SUCCESS: " + convertedFile.getPath(), Toast.LENGTH_LONG).show(); 
       fileIndex++; 
       if (this.files.size > fileIndex) { 
        convertFile(this.files[fileIndex]; 
       } else { 
        // we're done converting 
       } 
      } 

      @Override 
      public void onFailure(Exception error) { 
       Toast.makeText(NewMainActivity.this, "ERROR: " + error.getMessage(), Toast.LENGTH_LONG).show(); 
       // cancel out or keep going, whatever 
      } 
     }; 

      Toast.makeText(this, "Converting audio file..." + filename, Toast.LENGTH_SHORT).show(); 

      AndroidAudioConverter.with(this) 
        .setFile(wavFile) 
        .setFormat(AudioFormat.MP3) 
        .setCallback(callback) 
        .convert(); 
     } 
    } 
} 
+0

論理的にそれは正常に動作している、コンバータはあまりにも多くのメモリを取るので、システムがスレッドを停止するので、 –

+0

お役立ち情報メモリの問題に苦労している場合は、更新された情報とコードで別の質問を作成してください。がんばろう! – kpsharp

関連する問題