いくつかのサウンドを使用し、それらをミックスして音楽作品を作成する Android アプリケーションを開発しようとしています。最初は音を同時に再生しようとしましたが、そうしているうちに同期がずれてしまい、フォーラムを数時間読んだ後、ループモードで複数の音を同時に再生する最良の方法は音声ファイルを 1 つに結合してから、それらを 1 つのファイルとして再生します。
私が使用しているコードは次のとおりです。
//Oppening file 1
InputStream is = getAssets().open("sounds/sound_1.ogg");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
//End Oppening file 1
//Oppening file 2
InputStream is_2 = getAssets().open("sounds/sound_2.ogg");
int size_2 = is_2.available();
byte[] buffer_2 = new byte[size_2];
is_2.read(buffer_2);
is_2.close();
//End Oppening file 2
//Get Bigger size and Merge Files
int total_size =0;
byte[] buffer_final;
if(buffer.length>buffer_2.length){
total_size = buffer_2.length;
}else{
total_size = buffer.length-1;
}
buffer_final= new byte[total_size];
for(int i=30; i<total_size-30;i++){
float a =buffer[i];
float b =buffer_2[i];
float c = (a+b)/2;
buffer_final[i]=(byte) c;
}
FileOutputStream fos = new FileOutputStream(f);
fos.write(buffer_final);
fos.close();
その後、soundPool を使用して、結果のファイルを読み取り、再現を試みます。
ファイルをマージせずにこの式を使用すると(つまり、1つのサウンドのみを使用して新しいファイルを作成し、それを読み取ると、完全に機能するので、問題はファイルのマージにあると思いますが、おそらくそれほど簡単ではありませんバイトを合計してから2で割るだけです。
これを行った後、ログには次のように表示されます。
サンプルをロードできません (null)。
また、ログを再現しようとすると、サンプルの準備ができていないと表示されます。
これについて何か助けてください。私は何週間もグーグルで検索してきましたが、解決できませんでした...
Android とオーディオのプログラミングは初めてなので、少し迷っています。
問題は、このサウンドをどのようにミックスできるかということです。私はそれを行うのに正しい方法ですか?問題はどこだ?
読んで助けてくれてありがとう:)