達成するために、Androidのオーディオの再生速度の調整

  プロジェクトへの最近の暴露、オーディオの再生があり、再生速度を切り替え、進捗状況をドラッグだけで前に見たこのレコードを簡単に見以下、最終的には、再生速度を切り替えることを試み、研究し始めていないので、プレイするためにどこかに必要回研究プロセス。

  • MediaPlayerの

オーディオMe​​diaPlayerの最初に考えたのは、Androidは、AndroidでネイティブAPIを提供することである再生6.0+(23+)MediaPlayerの再生率はsetSpeedにより変更することができます

コードでは、我々はする必要があります。

//は、音楽再生速度設定
パブリック 静的 ボイド changeplayerSpeed(フロート速度){ 
     IF(MPlayerの== NULL ){
         リターン; 
    } 
    IF(Build.VERSION.SDK_INT> = Build.VERSION_CODES.M){ 
         // API 23は、上記(6.0)であります設定することで、スピード再生速度音楽を変更する
        のiF (mPlayer.isPlaying()){
             // 音楽再生、一時停止、速度の後に設定されるように、再生していないときに、プレイしているかどうかを判断する
            (mPlayer.getPlaybackParamsを()mPlayer.setPlaybackParamsを。setSpeed(速度)); 
        } {  
            mPlayer.setPlaybackParams(mPlayer.getPlaybackParams()setSpeed(速度));
            mPlayer.pause(); 
        } 
    } そう {
         // 別の方法で、追加に続いて見出さ良い方法が必要とされる処理前Android6.0 
    } 
}

実際の実装プロセス、私はあなたがこれを実行した後、消音演奏は、スイッチの再生速度を達成していなかっただけでなく、テスター名誉V9の手を見つけ、プレーヤーを復元することはできません。無力な、彼は別の方法を見つけなければなりませんでした。

  • PLMediaPlayer 

PLDroidPlayer 7頭の牛のSDK、APIのセットを提供し  PLMediaPlayer、公式のAndroidと、基本的なさまざまな機能を実現するために、メディアプレーヤーをインタフェース  MediaPlayer デザインは同じままでした。

コードのキー行

    プライベート PLOnPreparedListener mOnPreparedListener = 新しいPLOnPreparedListener(){ 
        @Override 
        公共 のボイド(onPrepared int型preparedTime){ 
            (TAG、Log.i "事前に用意しました!" ); 
            mMediaPlayer.start(); 
       //设置播放速率为2倍 mMediaPlayer.setPlaySpeed(
2.0f ); mIsStopped = ; } }。

 実際の実装通常の再生速度を切り替えるプロセス、が、高い確率seekTo操作が失敗したが、それではあきらめて、まだ問題は、問題を見つける方法をgithubの上でそれをチェックアウト。

  • ijkPlayer

ijkplayer局B APIを統合しやすい軽量のAndroid ffplay / iOS搭載ビデオプレーヤー、クロスプラットフォームの機能、である;構成は、インストールパッケージの大きさを制御することが容易に切断することができる構築。

ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER、 "soundtouch"、1);
ijkMediaPlayer.setSpeed(2.0f)。

APIと使用同様のメディアプレーヤは、キーコード1行だけです。

実際の実装プロセスは、通常、通常の再生速度スイッチ(のみストレス0.5倍遅い時間の存在への切り替えを)seekToが、少しはijkplayerをサポートするために、ソースコードをコンパイルする必要があります検索、URLのオーディオファイルを再生httpsで始めることはできませんHTTPSは、その後、あきらめます。

  • ExoPlayer

 最終的な選択は、達成するためのAPIと同様のMediaPlayerのGoogleのexoPlayerですが、また、いくつかの違い、キーコードは、再生制御部の下に掲載されています。

パッケージcom.weex.app.media。

輸入android.content.Context;
輸入android.net.Uri; 

輸入com.google.android.exoplayer2.ExoPlayer。
輸入com.google.android.exoplayer2.ExoPlayerFactory。
輸入com.google.android.exoplayer2.PlaybackParameters。
輸入com.google.android.exoplayer2.Player。
輸入com.google.android.exoplayer2.SimpleExoPlayer。
輸入com.google.android.exoplayer2.source.ExtractorMediaSource。
輸入com.google.android.exoplayer2.source.MediaSource。
輸入com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection。
インポートcom.google.android.exoplayer2.trackselection.DefaultTrackSelector;
輸入com.google.android.exoplayer2.trackselection.TrackSelection。
輸入com.google.android.exoplayer2.trackselection.TrackSelector。
輸入com.google.android.exoplayer2.upstream.BandwidthMeter。
輸入com.google.android.exoplayer2.upstream.DataSource。
輸入com.google.android.exoplayer2.upstream.DefaultBandwidthMeter。
輸入com.google.android.exoplayer2.upstream.DefaultDataSourceFactory。
輸入com.google.android.exoplayer2.util.Util。

インポートのjava.io.File; 

パブリック クラスAudioPlayerManager { 

    プライベート 静的 最終的な文字列タグ=「AudioPlayerManager」パブリック 静的フロート[] speedArray = 新しいフロート[] {1.0F、1.25f、1.75f、0.5F、0.75F }。
    プライベート 静的AudioPlayerManagerインスタンス。
    プライベートコンテキストコンテキスト。
    プライベートSimpleExoPlayer MediaPlayerの。
    プライベートDataSource.Factory dataSourceFactory。

    プライベートAudioPlayerManager(コンテキスト・コンテキスト){
         この .context = 文脈。
        createPlayer(); 
    } 

    パブリック 静的AudioPlayerManagerのgetInstance(コンテキスト・コンテキスト){
        同期(AudioPlayerManager クラス){
             IF(例えば== NULL ){ 
                インスタンス = 新しい新しいAudioPlayerManager(コンテキスト); 
            } 
        } 

        戻りインスタンス; 
    } 

    公共ExoPlayer getMediaPlayer(){
         戻りメディアプレーヤを; 
    } 再生URL設定//
    
  パブリック ボイドsetAudioUrlを(文字列audioUrl ){
         試み{
             // これはMediaSourceの中で再生するメディアの代表である 
            = MediaSourceのMediaSourceの新しい新ExtractorMediaSource.Factory(DataSourceFactory)
                    .createMediaSource(Uri.parse(audioUrl)); 
            mediaPlayer.prepare(MediaSourceの); 
            mediaPlayer.setPlayWhenReady(偽の); 
        } キャッチ(例外E){ 
            e.printStackTrace(); 
        } 
    } //再生を設定しますファイルの
    
  公共 のボイドsetAudioFile(ファイルファイル){
         試み{
             // これは代表が再生MediaSourceのだろうですが、メディア 
            MediaSourceのMediaSourceを= 新しい新ExtractorMediaSource.Factory(DataSourceFactory)
                    .createMediaSource(Uri.fromFile(ファイル));
            mediaPlayer.prepare(MediaSourceの)。
            mediaPlayer.setPlayWhenReady(); 
        } キャッチ(例外e){ 
            e.printStackTrace(); 
        } 
    } //开始播放
    
  公共 ボイド開始(){ 
        mediaPlayer.setPlayWhenReady()。
    } //判断是否是播放状态
    
  パブリック ブールisPlaying(){
         int型 playbackState = mediaPlayer.getPlaybackState()。
        もし(playbackState == SimpleExoPlayer.STATE_READY && mediaPlayer.getPlayWhenReady()){
             リターン 
        }
        を返す 
    }  //播放、带回调事件
    
 公共 ボイドplayWithCompletionListener(文字列のURL、Player.EventListenerリスナー){
         場合(聞き手=!ヌル){ 
            mediaPlayer.addListener(リスナー)。
        } 
        であれば(url.startsWith( "HTTP" )){ 
            setAudioUrl(URL)。
        } { 
            setAudioFile(新しいファイル(URL)); 
        } 
        mediaPlayer.setPlayWhenReady()。
    }  //播放または暂停
    
 公衆 ボイドplayOrPause(){
        IF {(isPlaying())
            (mediaPlayer.setPlayWhenReady falseに;)
        } { 
            (mediaPlayer.setPlayWhenReady 真の); 
        } 
    } 再生速度切り替え//
    
  公共 のボイド(switchSpeedをint型speedIndex){
         // API 23は、提供することで、上記(6.0)であります速度は、音楽の再生速度を変更する
        場合(isPlaying()){
             // 再生していないときに決意は、再生されている場合に、速度に設定した後、音楽再生の一時停止 
            getMediaPlayer()setPlaybackParameters(新しい新しいPlaybackParameters(speedArray [speedIndexを])); 
        } {他に
            。getMediaPlayer()setPlaybackParameters(新しいPlaybackParameters(speedArray [speedIndex]))。
            getMediaPlayer()setPlayWhenReady(); 
        } 
    }  //停止播放
    
 公共 ボイド停止(ブールリセット){
         場合(MediaPlayerの!= NULL ){ 
            mediaPlayer.stop(リセット)。
        } 
    } //释放资源
    
  公共 ボイドリリース(){
         場合(!MediaPlayerの= ヌル){ 
            mediaPlayer.release(); 
        } 
    } 

    //新しいプレーヤーを作成
    プライベートが 無効createPlayerを(){
         // 帯域幅作成 
        BandwidthMeter bandwidthMeter = 新新DefaultBandwidthMeter();
         // トラック選択機能作成 
        TrackSelection.Factory videoTrackSelectionFactory = 新新AdaptiveTrackSelection.Factory(bandwidthMeterを);
         //は、トラック選択のインスタンスを作成 
        TrackSelectorを= trackSelector 新しい新DefaultTrackSelector(videoTrackSelectionFactory);
         // 。ステップ2は、プレイヤー作成した 
        メディアプレーヤ= ExoPlayerFactory.newSimpleInstance(コンテキスト、trackSelectorを);
         //は、マルチメディアデータをダウンロードするためにそれを通してDataSourceオブジェクトを作成します
        dataSourceFactory = 新しいDefaultDataSourceFactory(コンテキスト、
                Util.getUserAgent(文脈、 "ローダ" ))。
    } 

}

 実際のセルフテストプロセス、通常の性能、再生速度を切り替える、そこ重(チョン)音のない場合はありませんが、以下の装置6.0でテストされていません。

 

 

おすすめ

転載: www.cnblogs.com/fuyaozhishang/p/11098596.html