3

いくつかのサウンドを使用し、それらをミックスして音楽作品を作成する 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 とオーディオのプログラミングは初めてなので、少し迷っています。

問題は、このサウンドをどのようにミックスできるかということです。私はそれを行うのに正しい方法ですか?問題はどこだ?

読んで助けてくれてありがとう:)

4

2 に答える 2

1

生のPCMデータを使用している場合は、サンプルの平均化が適切に機能します。あなたがする必要があるのは、最初にOGGファイルをPCMバッファに変換することです。出力をOGGとして保持したい場合は、完了後にそれを元に戻す必要があります。

私の経験は主にOGGではなくMP3ライブラリでしたが、 JOrbisについては良いことを聞いています。

于 2012-10-02T11:59:57.577 に答える