Android多媒体之音乐播放器

Android 音乐播放器有很多种方式,首先由一个音乐播放器:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    //进度条
    <SeekBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/main_seekbar"
        android:layout_weight="1"
        />
        //播放按钮
    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@android:drawable/ic_media_play"
        android:onClick="isPlayorPauser"/>
</LinearLayout>

第一种就是播放应用内的音频文件,将你需要播放的音频文件放入Raw文件中,调用MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.cd);取到raw文件中的音频,再用MediaPlayer 的准备完成的监听事件mediaPlayer.setOnPreparedListener() 中播放,mediaPlayer.start();方法。
第二种是内存卡里面音频文件,首先实例化 MediaPlayer mediaPlayer = new MediaPlayer();再设置属性。准备方法: mediaPlayer.prepare();
第三种是播放网络音乐(Tomcat),需要配置Tomcat,再一步准备:mediaPlayer.prepareAsync();

public class MainActivity extends AppCompatActivity {

    private SeekBar main_seekbar;
    private MediaPlayer mediaPlayer;
    private SurfaceView main_surfaceview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        main_seekbar = (SeekBar) findViewById(R.id.main_seekbar);
        //得到视频播放器
        main_surfaceview = (SurfaceView) findViewById(R.id.main_surfaceview);

        //给进度条设置点击拖动事件
        main_seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                //获取拖动的进度 给mediaPlayer设置进度
                int length=main_seekbar.getProgress();
                mediaPlayer.seekTo(length);
            }
        });
    }
    public void isPlayorPauser(View view) throws Exception{
        final ImageButton imageButton= (ImageButton) view;
        //如果mediaPlayer有值
        if (mediaPlayer==null) {
            //播放应用内的音频文件
            //mediaPlayer = MediaPlayer.create(this, R.raw.cd);
            //播放内存卡里面音频文件
             mediaPlayer = new MediaPlayer();
            //设置音频流的类型
             mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            //设置音源
            mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/kugou/mv/nlch.mp4"));
            //准备一下(内存卡)
            mediaPlayer.prepare();
            /* //播放网络音乐(Tomcat)
            mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.135/internet.mp3"));
            //准备(异步准备)
            mediaPlayer.prepareAsync();*/
            //设置准备完成的监听
//             mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
//                @Override
//                public void onPrepared(MediaPlayer mediaPlayer) {
                    //将媒体播放器的捕捉的画面展示到surfaceView
                    mediaPlayer.setDisplay(main_surfaceview.getHolder());
                    //开始播放
                    mediaPlayer.start();
                    //设置按钮改变图片
                    imageButton.setImageResource(android.R.drawable.ic_media_pause);
                    //获取音乐的播放时长
                    int duration=mediaPlayer.getDuration();
                    //设置进度条的最大值(音乐的播放时长)
                    main_seekbar.setMax(duration);
                    new MyThread().start();
//                }
//            });
        }else if (mediaPlayer.isPlaying()){
            //开始就关闭
            mediaPlayer.pause();
            imageButton.setImageResource(android.R.drawable.ic_media_play);
        }else{
            //关闭就开始
            mediaPlayer.start();
            imageButton.setImageResource(android.R.drawable.ic_media_pause);
        }
    }

    class MyThread extends Thread{
        @Override
        public void run() {
            super.run();
            //判断拖动长度是否小于seekbar的最大长度
            if (main_seekbar.getProgress()<=main_seekbar.getMax()){
                //获取音乐的当前播放位置
                int c=mediaPlayer.getCurrentPosition();
                //设置seekbar的位置
                main_seekbar.setProgress(c);
            }
        }
    }
}

最后,我在说一个控件,叫音频池(SoundPool),虽然已经过时。但是还可以用。用来做一些混音。有兴趣的可以了解下:

public class SoundPoolActivity extends AppCompatActivity {

    private SoundPool soundPool;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_soundpool);
        //实例化音频池
        soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC,0);
        //设置监听事件(加载音频)
        soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int i, int i1) {
                //播放
                soundPool.play(i,1,1,1,-1,1);
            }
        });
    }
    public void playKFC(View view){
        soundPool.load(this,R.raw.rooster,1);
    }
    public void playTwo(View view){
        soundPool.load(this,R.raw.chimp,1);
    }
    public void playThree(View view){
        soundPool.load(this,R.raw.crickets,1);
    }
    public void playFour(View view){
        soundPool.load(this,R.raw.roar,1);
    }
    public void playDog(View view){
        soundPool.load(this,R.raw.dogbark,1);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //退出应用程序时关闭音频池
        if(soundPool!=null){
            soundPool.release();
            soundPool=null;
        }
    }
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 第一章 引 言 - 1 - 1.1 项目背景 - 1 - 1.2 编写目的 - 2 - 第二章 系统需求分析 - 3 - 2.1 功能需求(用例图分析) - 3 - 2.1.1 播放器的基本控制需求 - 3 - 2.1.2 播放清单列表管理需求 - 5 - 2.1.3 播放友好性需求 - 7 - 2.1.4 播放器扩展卡需求 - 8 - 2.1.5 功能需求(时序图)分析 - 9 - 2.2 系统结构图和流程图 - 10 - 2.3 系统界面需求 - 11 - 2.4 系统性能需求 - 12 - 2.5 运行环境需求 - 12 - 第三章 Android数据库设计 - 13 - 3.1 数据库及字段属性设计 - 13 - 3.1.1 字段设计(表、图) - 13 - 3.1.2 音乐播放器E-R图 - 15 - 3.2 数据库连接 - 15 - 3.2.1 创建数据库 - 15 - 3.2.2 操作数据库 - 16 - 3.2.3 数据显示 - 17 - 第四章 Android项目介绍 - 18 - 4.1 什么是Android? - 18 - 4.1.1 Android简介 - 18 - 4.1.2 Android Features特性 - 18 - 4.1.3 Android基本框架(Android Architecture) - 19 - 4.1.4 Android系统的四大组件 - 22 - 4.2 搭建Android开发环境 - 23 - 4.3 Android常用工具的使用 - 25 - 4.3.1 命令行的使用 - 25 - 4.3.2 Dalvik Debug Monitor Service (DDMS)的使用 - 26 - 4.4 Android 音乐播放器的工程 - 26 - 4.4.1 Android项目 - 26 - 4.4.2 Android工程程序结构 - 27 - 4.4.3 AndroidManifest.xml文件 - 29 - 第五章 播放器系统功能详细设计 - 31 - 5.1音乐播放器主界面功能实现 - 31 - 5.1.1 播放器主界面 - 31 - 5.1.2 播放界面音轨的实现 - 32 - 5.1.3 播放器播放、暂停、停止等功能 - 35 - 5.2 播放列表功能 - 36 - 5.3 菜单功能 - 38 - 5.3.1 菜单界面 - 38 - 5.3.2 菜单功能实现 - 39 - 5.4 播放设置界面 - 41 - 5.4.1 界面实现 - 41 - 5.4.2 歌词显示实现 - 42 - 5.5 手机扩展卡的访问 - 44 - 5.5.1 文件浏览器界面 - 45 - 5.5.2 文件浏览器功能实现 - 46 - 5.6 数据存储方式 - 47 - 5.6.1 SharedPreferences - 47 - 5.6.2 File存储方式 - 48 - 5.6.3 SQLiteDatabase数据库 - 48 - 第六章 结 论 - 49 -

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值