2 つの mp3 ファイルを 1 つの mp3 ファイルにマージしたいです。たとえば、最初のファイルが 1 分で 2 番目のファイルが 30 秒の場合、出力は 1 分になります。その 1 分で、両方のファイルを再生する必要があります。
質問する
14228 次
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 に答える