我正在嘗試開發一種使用一些聲音並將它們混合在一起以創建音樂作品的Android應用程序。在開始時,我試着只是在同一時間再現聲音,但當我這樣做時,他們會變得不同步,在幾個小時的閱讀論壇後,我意識到在循環模式下同時再現多種聲音的最佳方式就是將音頻文件合併爲一個文件,然後將它們作爲單個文件複製。Android:如何混合2個音頻文件並用soundPool重現它們
這裏是我使用的代碼:
//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我讀生成的文件,並嘗試重現它。
如果我使用這個公式而不合並文件(所以,只使用一個聲音,創建一個新文件,然後閱讀它,它完美的工作,所以我認爲問題是在文件合併,這可能是不是那麼容易,因爲只需添加字節在一起,然後除以2
劃分這樣做後,日誌告訴我:。
無法加載樣本(空)
而且OFC,當我嘗試重現日誌說樣本沒有準備好。
對此有任何幫助嗎?我一直在谷歌它幾個星期,我無法解決它...
這是我第一次編程Android和音頻,所以我有點失落。
問題是,我怎麼能混合這聽起來?我以正確的方式做這件事?哪裏有問題?
感謝您的閱讀和幫助:)
非常好格式化的第一篇文章!一個清晰而簡潔的問題。做得好。 – davehale23