【问题标题】:Why do .ogg files loop?为什么 .ogg 文件会循环播放?
【发布时间】:2014-11-14 16:00:23
【问题描述】:

在下面的类中触发了.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 文件,但很好奇为什么会发生这种情况,并尽可能防止它们循环。

【问题讨论】:

    标签: android android-mediaplayer ogg


    【解决方案1】:

    搜索显示ogg元数据中可能存在ANDROID_LOOP: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(false) 看看是否有帮助

    【讨论】:

    • 似乎 ogg 文件中的元数据标签 ANDROID_LOOP 负责该行为。 MediaPlayer.setLooping(false) 也不会覆盖此行为。所以唯一的选择是编辑 ogg 文件。如果有人感兴趣,您可以查看this。编辑:添加链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多