2014-11-14 93 views
1

在以下類中會觸發.ogg文件的播放。.ogg文件爲什麼會循環?

public class HomeScreenFragment extends Fragment { 
    ... 
    private AudioPlayer mPlayer = new AudioPlayer(); 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 
     ... 
     mStandbyButton = (Button)v.findViewById(R.id.standby_button); 
     mStandbyButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       mPlayer.play(getActivity()); 
      } 
     }); 
    } 

    public void onDestroy() { 
     super.onDestroy(); 
     mPlayer.stop(); 
    } 
} 

儘管使用setOnCompletionListener()的文件繼續不像.WAV

public class AudioPlayer { 
    private MediaPlayer mPlayer; 

    public void stop() { 
     if(mPlayer != null) { 
      mPlayer.release(); 
      mPlayer = null; 
     } 
    } 

    public void play(Context c) { 
     stop(); 

     mPlayer = MediaPlayer.create(c, R.raw.hassium); 
     mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      public void onCompletion(MediaPlayer mp) { 
       stop(); 
      } 
     }); 
     mPlayer.start(); 
    } 
} 

循環如何保證他們不這樣做一次循環播放完畢? 我可以使用.wav文件,但很好奇爲什麼發生這種情況,如果可能的話,防止它們循環。

回答

1

搜索顯示,有可能是在ANDROID_LOOP OGG元數據:ANDROID_LOOP = true -- how to avoid MediaPlayer looping audios with this metadata tag

相關門票在谷歌代碼:

MediaPlayer setLooping(false) does not work for ogg files

Should document ANDROID_LOOP flag for OGG files

你可以嘗試使用MediaPlayer.setLooping(假),看看它是否可以幫助

+0

看來是元數據標籤ANDROID_LOOP在th eogg文件負責行爲。此外MediaPlayer.setLooping(false)不會覆蓋此行爲。所以唯一的選擇是編輯ogg文件。如果有人有興趣,你可以查看[this](http://www.tytyweb.net/blog/2012/01/looping-ringtones-on-android/)。編輯:添加鏈接 – Ashish 2014-11-15 05:32:39