0

サウンドプールを使用して内部メモリからサウンドをロードする方法をいくつか試しました。最初に、この切り取られたコードでサウンドを録音する方法:

url = Environment.getExternalStorageDirectory().getAbsolutePath();
fileName = "/record.3gp";

recorder = new MediaRecorder();  
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);  
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);  
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  
recorder.setOutputFile(url+fileName));

try {
   recorder.prepare();
   recorder.start();
} 
catch (IOException e) {
   Log.e("sound", "prepare() failed: " + e.getMessage());
}  

次に、これがメディアプレーヤーでそのサウンドを再生する方法です。

mPlayer = new MediaPlayer();
try {
        mPlayer.setDataSource(url+fileName);
        mPlayer.prepare();
        mPlayer.start();
        mPlayer.setOnCompletionListener(new OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                stopSound();
            }
        });
    }
    catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

私のレコードの音が再生され、何も問題ありません。しかし、いくつかの条件では、soundpool をロードする必要があります。これらは、サウンドプールで再生しようとした私のコードです:

// method 1
soundMap.put(1, soundPool.load(url+fileName, 1));
soundPool.play(soundMap.get(1), 1, 1, 0, 0, 1.0f);

// method 2
soundId = soundPool.load(soundPool.load(url+fileName, 1), 1);
soundPool.play(soundId, 1, 1, 0, 0, 1.0f)

// 方法 3
は URL を変更し、この回答に従います

そして、これらすべては何の結果にもなりません。私はこのコードを使用して確認しようとしました:

Log.d("sound", "soundpool play: " + soundPool.play(soundId, 1, 1, 0, 0, 1.0f));  

その結果「soundpool play: 0」

4

0 に答える 0