2011-07-06 1 views
4

私は音を記録してから再生するアプリケーションを作成しようとしています。 録音部分は完全に機能しますが、サウンドを再生しようとすると何もしません。 デバッガで実行し、オーディオを再生するステップをトラブルすると、動作します。 すべてのブレークポイントを削除してデバッグでプログラムを実行すると、そのプログラムは実行されません。リリースのbuldでAndroid Soundpool.play()が動作しない

問題はおそらく、バックグラウンドで実行され、オーディオを実行しようとする前に完了していないものが原因で発生する可能性がありますが、完全にはわかりません。

ご協力いただければ幸いです。

ここにソースコードの関連部分があります。あなたがプレイしようとしないのはなぜsoundpoolから

int soundId = mSoundPool.load(mAudioRecorder.stop(), 0); 
if(soundId > 0){ 
    mSoundPool.play(soundId, 0.99f, 0.99f, 0, -1, 1.0f); 
} 

Audiorecorder.java出力ファイルを再生Soundpool

mSoundPool = new SoundPool(16, AudioManager.STREAM_MUSIC, 0); 

を作成

.MP4

mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 


public String stop() throws IOException { 
    mRecorder.stop(); 
    return mPath; 
} 
+0

を再生[1]:HTTP ://stackoverflow.com/questions/29199164/android-soundpool-error – 5h177y

答えて

2

私は昨日と同じ問題を抱えていた - RELEASEモードでは、適切ではない作業の理由は、あなたがSoundPool.load(...)を待つ必要があるという事実であります機能を実行する。

私はSoundPool.play(...)機能でいくつかの音楽を演奏しようとしている活動/断片を実行する前に、メニューのアクティビティでサウンドを読み込んで解決しました。

デバッグモードのアプリケーションでは、多くの時間を持ってSoundPool.load(...)関数を実行するので、それは動作します。

2

ですMediaPlayerを通じて録音されたオーディオ。

mFileName = Environment.getExternalStorageDirectory().getAbsolutePath(); 
     mFileName += "audiorecordtest.MPEG_4"; 
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 


public String stop() throws IOException { 
    mRecorder.stop(); 
    return mPath; 
} 

このコードに記録されたファイルの使用を再生するには:

mPlayer = new MediaPlayer(); 
      try { 
       mPlayer.setDataSource(mFileName); 
      } catch (IllegalArgumentException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } catch (IllegalStateException e1) { 
       e1.printStackTrace(); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
       try { 
       mPlayer.prepare(); 
      } catch (IllegalStateException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      mPlayer.start(); 
+0

私は複数のサンプルを再生し、それらのいくつかをループできるようにしたいので。 Mediaplayerは完璧に動作します。 – Minion91

+0

私は同じ問題があります。あなたはこの行動の理由を見つけましたか? – Simon

0

これはハックと見なされる可能性があります。しかし、私のために働いた。基本的にあなたが[1] おかげで... [アンドロイドsoundpoolエラー]、ここで私を助けてくださいすることができ、負荷の間に数ミリ秒待つと

try { 
      soundPlayer_m.load(clipToPlay); 
      final Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        soundPlayer_m.play(clipToPlay); 
       } 
      }, 300); 

      setInitialVolume(); 
     } catch (Exception e) { 
      Log.d("Exception", "E: " + e.toString()); 
      Toast.makeText(this, R.string.no_file, Toast.LENGTH_SHORT).show(); 
     } 
関連する問題