18

2 つの mp3 ファイルを 1 つの mp3 ファイルにマージしたいです。たとえば、最初のファイルが 1 分で 2 番目のファイルが 30 秒の場合、出力は 1 分になります。その 1 分で、両方のファイルを再生する必要があります。

4

7 に答える 7

0

Android では実行していませんが、Adobe flex を使用して実行しました。ロジックは変わらないと思います。次の手順に従いました。

  • 両方の mp3 を 2 バイト配列に抽出しました。( song1ByteArray, song2ByteArray)
  • より大きなバイト配列を見つけます。song1ByteArray(大きい方だとしましょう)。
  • 混合バイト配列を返す関数を作成します。

    private ByteArray mix2Songs(ByteArray song1ByteArray, ByteArray song2ByteArray){
    int arrLength=song1ByteArray.length; 
    for(int i=0;i<arrLength;i+=8){ // here if you see we are incrementing the length by 8 because a sterio sound has both left and right channels 4 bytes for left +4 bytes for right.
        // read left and right channel values for the first song
        float source1_L=song1ByteArray.readFloat();// I'm not sure if readFloat() function exists in android but there will be an equivalant one.
        float source1_R=song1ByteArray.readFloat(); 
        float source2_L=0;
        float source2_R=0;
        if(song2ByteArray.bytesAvailable>0){
            source2_L=song1ByteArray.readFloat();//left channel of audio song2ByteArray
            source2_R=song1ByteArray.readFloat(); //right channel of audio song2ByteArray
        }
        returnResultArr.writeFloat((source_1_L+source_2_L)/2); // average value of the source 1 and 2 left channel
        returnResultArr.writeFloat((source_1_R+source_2_R)/2); // average value of the source 1 and 2 right channel
    }
    return returnResultArr;
    }
    
于 2015-10-19T11:13:25.540 に答える
-1

良い解決策は得られませんでしたが、ここでいくつかのトリックを実行できます.. :) 両方の mp3 ファイルを 2 つの異なる MediaPlayer オブジェクトに割り当てることができます。次に、ボタンで両方のファイルを同時に再生します。両方の mp3 ファイルを比較して、最長期間.その後、AudioReorder を使用して、その期間まで録音します。それはあなたの問題を解決します..私はそれが正しい方法ではないことを知っていますが、それがあなたを助けることを願っています.. :)

于 2015-10-16T12:30:08.130 に答える