2016-07-19 3 views
1
player.setPlaybackParams(player.getPlaybackParams().setSpeed(0.5f)); 

diese 23 einen API-Aufruf erfordertWie kann ich Mediaplayer Geschwindigkeit für api weniger eingestellt dann 23

iam versuchen Soundpool zu verwenden, aber es wie von Mediaplayer nicht so effizient ist, ist jede Alternative zu Soundpool für audioPlaying

final float playbackSpeed=1.5f; 
       final SoundPool soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100); 

       final String path=Environment.getExternalStorageDirectory().getAbsolutePath() + "/folioreader/audio"+".mp3"; 

       final int soundId = soundPool.load(path, 1); 
       AudioManager mgr = (AudioManager) mHalfSpeed.getContext().getSystemService(Context.AUDIO_SERVICE); 
       final float volume = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 

       soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() 
       { 
        @Override 
        public void onLoadComplete(SoundPool arg0, int arg1, int arg2) 
        { 
         soundPool.play(soundId, volume, volume, 1, 0, playbackSpeed); 
        } 
       }); 

       soundPool.pause(soundId) 
+0

Haben Sie 'int setPlaybackRate (int sampleRateInHz)' in 'AudioTrack.class' versucht? –

+0

wie Sie es implementieren können Sie geben Sie einen Beispielcode –

+0

Ich versuchte Audio-Audio-Track-Klasse, aber es gibt mir weißen Klang –

Antwort

0

Verwenden Sie die Media-Codec-Klasse. Diese Klasse kann sie dekodieren und Sie können die Audiospur für dekodierte Daten verwenden, um sie zu rendern (abzuspielen). Aber Sie müssen die Samples entsprechend Ihrer Geschwindigkeitsanforderung überspringen, um in der bestimmten Geschwindigkeit zu spielen. Dieser Ansatz sollte funktionieren. Beziehen Sie mediacodec und audiotrack in den Entwicklerressourcen von Android.