- 浏览: 732406 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
梦行Monxin商城系统:
java网上商城与php网上商城比较 -
梦行Monxin商城系统:
java网上商城与php网上商城比较 -
任楚娴:
你好,请问html = nvl(html); 这句中的nvl( ...
java html串转换成文本串 -
u013246812:
,谢拉!
jQuery ui Dialog 讲解参数 -
大宝剑99:
...
前端优化
最近使用MediaPlayer 实现播放 静态资源文件,即res目录下raw目录下的文件
实现连续播放:
mMediaPlayer = MediaPlayer.create(this, res);
// 播放完毕后,设置监听事件
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播完一首之后进行下一首
mp.release();
nextMusic();
}
});
============================
MediaPlayer还有多种使用方式和方法,并不只局限于例子所介绍的一种。具体来看:
1)如何获得MediaPlayer实例:
可以使用直接new的方式:
MediaPlayer mp = new MediaPlayer();
也可以使用create的方式,如:
MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了
2) 如何设置要播放的文件:
MediaPlayer要播放的文件主要包括3个来源:
a. 用户在应用中事先自带的resource资源
例如:MediaPlayer.create(this, R.raw.test);
b. 存储在SD卡或其他文件路径下的媒体文件
例如:mp.setDataSource("/sdcard/test.mp3");
c. 网络上的媒体文件
例如:mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");
MediaPlayer的setDataSource一共四个方法:
setDataSource (String path)
setDataSource (FileDescriptor fd)
setDataSource (Context context, Uri uri)
setDataSource (FileDescriptor fd, long offset, long length)
3)对播放器的主要控制方法:
Android通过控制播放器的状态的方式来控制媒体文件的播放,其中:
prepare()和prepareAsync() 提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是,如果MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。
start()是真正启动文件播放的方法,
pause()和stop()比较简单,起到暂停和停止播放的作用,
seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。
release()可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。
reset()可以使播放器从Error状态中恢复过来,重新会到Idle状态。
4)设置播放器的监听器:
MediaPlayer提供了一些设置不同监听器的方法来更好地对播放器的工作状态进行监听,以期及时处理各种情况,
如: setOnCompletionListener(MediaPlayer.OnCompletionListener listener)、
setOnErrorListener(MediaPlayer.OnErrorListener listener)等,设置播放器时需要考虑到播放器可能出现的情况设置好监听和处理逻辑,以保持播放器的健壮性
========================================
package com.android.music_player;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
public class ActivityMain extends ListActivity {
// 定义 按钮
private ImageButton mFrontImageButton = null;
private ImageButton mStopImageButton = null;
private ImageButton mStartImageButton = null;
private ImageButton mPauseImageButton = null;
private ImageButton mNextImageButton = null;
// 声明MediaPlayer mMediaPlayer
private MediaPlayer mMediaPlayer = null;
// 播放列表
private List<Integer> mMusicList = new ArrayList<Integer>();
// 当前播放歌曲的索引
private int currentListItem = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 更新显示播放列表
musicList();
// 构建MediaPlayer对象,以及ImageButton
mMediaPlayer = new MediaPlayer();
mFrontImageButton = (ImageButton) this
.findViewById(R.id.LastImageButton);
mStopImageButton = (ImageButton) this
.findViewById(R.id.stopImageButton);
mStartImageButton = (ImageButton) this
.findViewById(R.id.StartImageButton);
mPauseImageButton = (ImageButton) this
.findViewById(R.id.PauseImageButton);
mNextImageButton = (ImageButton) this
.findViewById(R.id.NextImageButton);
// 停止按钮
mStopImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
// 判断是否正在播放
if (mMediaPlayer.isPlaying()) {
// 重置MediaPlayer到初始化状态
mMediaPlayer.reset();
}
}
});
// 开始按钮
mStartImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
playMusic(mMusicList.get(currentListItem));
}
});
// 暂停
mPauseImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
if (mMediaPlayer.isPlaying()) {
// 暂停
mMediaPlayer.pause();
} else {
// 开始播放
mMediaPlayer.start();
}
}
});
// 下一首
mNextImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
nextMusic();
}
});
// 上一首
mFrontImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
FrontMusic();
}
});
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
mMediaPlayer.stop();
mMediaPlayer.release();
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
// 录点击列表是,播放被点击的音乐
protected void onListItemClick(ListView l, View v, int position, long id) {
currentListItem = position;
playMusic(mMusicList.get(position));
}
// 播放列表
private void musicList() {
try {
// 取得指定位置的文件设置显示到播放列表
mMusicList.add(R.raw.rmb1);
mMusicList.add(R.raw.rmb2);
mMusicList.add(R.raw.rmb3);
mMusicList.add(R.raw.rmb4);
mMusicList.add(R.raw.rmb5);
mMusicList.add(R.raw.rmb6);
mMusicList.add(R.raw.rmb7);
mMusicList.add(R.raw.rmb8);
mMusicList.add(R.raw.rmb9);
mMusicList.add(R.raw.rmb0);
ArrayAdapter<Integer> musicList = new ArrayAdapter<Integer>(
this, R.layout.musicitme, mMusicList);
setListAdapter(musicList);
} catch (Exception ex) {
ex.printStackTrace();
}
}
// 播放音乐
private void playMusic(Integer res) {
try {
// 重置MediaPlayer
mMediaPlayer = MediaPlayer.create(this, res);
// 准备播放
//mMediaPlayer.prepare();
// 开始播放
mMediaPlayer.start();
// 播放完毕后,设置监听事件
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播完一首之后进行下一首
mp.release();
nextMusic();
}
});
}catch (Exception e) {
e.printStackTrace();
}
}
// 下一首
private void nextMusic() {
if (++currentListItem >= mMusicList.size()) {
// currentListItem = 0;
// playMusic(mMusicList.get(currentListItem));// 从第一首歌开始播放
} else {
playMusic(mMusicList.get(currentListItem));
}
}
// 上一首
private void FrontMusic() {
if (--currentListItem > 0) {
playMusic(mMusicList.get(currentListItem));
} else {
// 如果当前currentListItem等于-1,则设置currentListItem=0
// if (currentListItem < 0) {
// currentListItem = 0;
// }
// playMusic(mMusicList.get(currentListItem));
}
}
}
-----------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageButton android:id="@+id/LastImageButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_x="10px" android:layout_y="70px" android:src="@drawable/last" />
<ImageButton android:id="@+id/stopImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="70px" android:layout_y="70px" android:src="@drawable/stop" />
<ImageButton android:id="@+id/StartImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="130px" android:layout_y="70px" android:src="@drawable/start" />
<ImageButton android:id="@+id/PauseImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="190px" android:layout_y="70px" android:src="@drawable/pause" />
<ImageButton android:id="@+id/NextImageButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_x="250px" android:layout_y="70px" android:src="@drawable/next" />
<ListView android:id="@id/android:list" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="1"
android:drawSelectorOnTop="false" />
</AbsoluteLayout>
---------------------
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
实现连续播放:
mMediaPlayer = MediaPlayer.create(this, res);
// 播放完毕后,设置监听事件
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播完一首之后进行下一首
mp.release();
nextMusic();
}
});
============================
MediaPlayer还有多种使用方式和方法,并不只局限于例子所介绍的一种。具体来看:
1)如何获得MediaPlayer实例:
可以使用直接new的方式:
MediaPlayer mp = new MediaPlayer();
也可以使用create的方式,如:
MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了
2) 如何设置要播放的文件:
MediaPlayer要播放的文件主要包括3个来源:
a. 用户在应用中事先自带的resource资源
例如:MediaPlayer.create(this, R.raw.test);
b. 存储在SD卡或其他文件路径下的媒体文件
例如:mp.setDataSource("/sdcard/test.mp3");
c. 网络上的媒体文件
例如:mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");
MediaPlayer的setDataSource一共四个方法:
setDataSource (String path)
setDataSource (FileDescriptor fd)
setDataSource (Context context, Uri uri)
setDataSource (FileDescriptor fd, long offset, long length)
3)对播放器的主要控制方法:
Android通过控制播放器的状态的方式来控制媒体文件的播放,其中:
prepare()和prepareAsync() 提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是,如果MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。
start()是真正启动文件播放的方法,
pause()和stop()比较简单,起到暂停和停止播放的作用,
seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。
release()可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。
reset()可以使播放器从Error状态中恢复过来,重新会到Idle状态。
4)设置播放器的监听器:
MediaPlayer提供了一些设置不同监听器的方法来更好地对播放器的工作状态进行监听,以期及时处理各种情况,
如: setOnCompletionListener(MediaPlayer.OnCompletionListener listener)、
setOnErrorListener(MediaPlayer.OnErrorListener listener)等,设置播放器时需要考虑到播放器可能出现的情况设置好监听和处理逻辑,以保持播放器的健壮性
========================================
package com.android.music_player;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
public class ActivityMain extends ListActivity {
// 定义 按钮
private ImageButton mFrontImageButton = null;
private ImageButton mStopImageButton = null;
private ImageButton mStartImageButton = null;
private ImageButton mPauseImageButton = null;
private ImageButton mNextImageButton = null;
// 声明MediaPlayer mMediaPlayer
private MediaPlayer mMediaPlayer = null;
// 播放列表
private List<Integer> mMusicList = new ArrayList<Integer>();
// 当前播放歌曲的索引
private int currentListItem = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 更新显示播放列表
musicList();
// 构建MediaPlayer对象,以及ImageButton
mMediaPlayer = new MediaPlayer();
mFrontImageButton = (ImageButton) this
.findViewById(R.id.LastImageButton);
mStopImageButton = (ImageButton) this
.findViewById(R.id.stopImageButton);
mStartImageButton = (ImageButton) this
.findViewById(R.id.StartImageButton);
mPauseImageButton = (ImageButton) this
.findViewById(R.id.PauseImageButton);
mNextImageButton = (ImageButton) this
.findViewById(R.id.NextImageButton);
// 停止按钮
mStopImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
// 判断是否正在播放
if (mMediaPlayer.isPlaying()) {
// 重置MediaPlayer到初始化状态
mMediaPlayer.reset();
}
}
});
// 开始按钮
mStartImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
playMusic(mMusicList.get(currentListItem));
}
});
// 暂停
mPauseImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
if (mMediaPlayer.isPlaying()) {
// 暂停
mMediaPlayer.pause();
} else {
// 开始播放
mMediaPlayer.start();
}
}
});
// 下一首
mNextImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
nextMusic();
}
});
// 上一首
mFrontImageButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
FrontMusic();
}
});
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
mMediaPlayer.stop();
mMediaPlayer.release();
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
// 录点击列表是,播放被点击的音乐
protected void onListItemClick(ListView l, View v, int position, long id) {
currentListItem = position;
playMusic(mMusicList.get(position));
}
// 播放列表
private void musicList() {
try {
// 取得指定位置的文件设置显示到播放列表
mMusicList.add(R.raw.rmb1);
mMusicList.add(R.raw.rmb2);
mMusicList.add(R.raw.rmb3);
mMusicList.add(R.raw.rmb4);
mMusicList.add(R.raw.rmb5);
mMusicList.add(R.raw.rmb6);
mMusicList.add(R.raw.rmb7);
mMusicList.add(R.raw.rmb8);
mMusicList.add(R.raw.rmb9);
mMusicList.add(R.raw.rmb0);
ArrayAdapter<Integer> musicList = new ArrayAdapter<Integer>(
this, R.layout.musicitme, mMusicList);
setListAdapter(musicList);
} catch (Exception ex) {
ex.printStackTrace();
}
}
// 播放音乐
private void playMusic(Integer res) {
try {
// 重置MediaPlayer
mMediaPlayer = MediaPlayer.create(this, res);
// 准备播放
//mMediaPlayer.prepare();
// 开始播放
mMediaPlayer.start();
// 播放完毕后,设置监听事件
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播完一首之后进行下一首
mp.release();
nextMusic();
}
});
}catch (Exception e) {
e.printStackTrace();
}
}
// 下一首
private void nextMusic() {
if (++currentListItem >= mMusicList.size()) {
// currentListItem = 0;
// playMusic(mMusicList.get(currentListItem));// 从第一首歌开始播放
} else {
playMusic(mMusicList.get(currentListItem));
}
}
// 上一首
private void FrontMusic() {
if (--currentListItem > 0) {
playMusic(mMusicList.get(currentListItem));
} else {
// 如果当前currentListItem等于-1,则设置currentListItem=0
// if (currentListItem < 0) {
// currentListItem = 0;
// }
// playMusic(mMusicList.get(currentListItem));
}
}
}
-----------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageButton android:id="@+id/LastImageButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_x="10px" android:layout_y="70px" android:src="@drawable/last" />
<ImageButton android:id="@+id/stopImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="70px" android:layout_y="70px" android:src="@drawable/stop" />
<ImageButton android:id="@+id/StartImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="130px" android:layout_y="70px" android:src="@drawable/start" />
<ImageButton android:id="@+id/PauseImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="190px" android:layout_y="70px" android:src="@drawable/pause" />
<ImageButton android:id="@+id/NextImageButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_x="250px" android:layout_y="70px" android:src="@drawable/next" />
<ListView android:id="@id/android:list" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="1"
android:drawSelectorOnTop="false" />
</AbsoluteLayout>
---------------------
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
发表评论
-
记录年会小系统
2018-02-04 14:42 1118有点意思,年会过后,抽奖活动saas小系统扒光看看:支持P ... -
proguard 代码混淆
2016-11-22 10:59 662url:http://proguard.sourceforg ... -
家娃---曾经的APP
2016-10-21 10:01 379家娃APP 简介:晒娃娃秀家庭,为娃娃成长护航! 介绍 ... -
端午收粽子啦,家庭社交还能这么玩
2015-06-19 09:05 832<!--StartFragment --> ... -
android string.xml 特殊符号
2014-12-29 19:57 1271常见的ASCII十进制交换编码:@ 对应 - ... -
android 调用系统 录像,录音等
2014-10-21 20:25 19611、调用系统拍照[mw_shl_code=java,true] ... -
转:解决模拟器安装 timeout的问题
2014-10-15 17:20 445Failed to install on devi ... -
给文章增加微信公号关注链接
2014-09-19 10:19 1241测试了一下: 方法1:【已失效】 <a hre ... -
切内内小应用
2014-09-15 14:41 735中午从网上看到你个android 切的源码,对其进行了改造 ... -
什么是互联网思维
2014-08-12 09:42 705什么是互联网思维?? 不同人以及从事这不同的行业会有 ... -
android当中大图片显示适应问题
2014-07-25 08:54 953在Android开发中比较头疼的是Android的分辨率问题, ... -
绿色2048
2014-05-11 17:52 927绿色2048 最近2048小游戏非常火。 做 ... -
百变周边秀
2014-04-07 16:22 485百变周边秀 http://mojianpo.host ... -
基于周边找IT精英
2014-03-13 11:28 712最近在整理“垂直app社交”的需求,针对周边定位服务,做了 ... -
android 组件属性描述
2014-03-12 14:31 2657属性名称 描述 androi ... -
春节前最后一个:马上群飞
2014-01-27 18:02 783整理网上的资源,进行加工而成。 其实这是一个很久以 ... -
2014春节铃声王
2014-01-20 13:46 924春节快来到,大街小巷真热闹,穿新衣,戴新帽,手机铃声凑 ... -
2014春节短信王
2014-01-20 08:26 753史上最全的2014马年春节拜年短信王为您集合各式春节拜年短 ... -
去掉Activity title bar 方法
2013-11-20 08:21 691第一个方法是在代码去掉title bar 在Activit ... -
发泄神器
2013-10-26 15:24 1062发泄神器 android版 一款娱乐发泄应用小软件, ...
相关推荐
Android中使用MediaPlayer播放音乐,我这有两个例子 一个是在activity中播放音乐,一个是在service中播放
Android自定义音乐播放器的代码例子。支持展示音乐列表、滚动歌词,以及控制栏操作,另附演示用的一剪梅歌曲与歌词。另外演示了MediaRecorder/MediaPlayer组合、AudioRecord/AudioTrack,以及SoundPool对音频的处理...
用一个例子说明 brew 平台播放音乐的 API 的使用方法
delphi XE6 开发的Android 音乐播放器,只是一个示例,供参考
VB音乐可视化效果曲线控件附示例,一个音乐曲线控件的调用例子,可根据音乐大小来显示曲线,在Windows MediaPlayer上面有这种类似的可视化效果,不过这款的功能似乎没那么强大。
在安卓上播放多媒体文件是非常常见的,听音乐,看电视等等,接下来,我们就通过一些例子来学习在手机上播放一个简易的音频和视频播放器。 播放音频 别的不多说,直接上代码吧! activity_main.xml代码 布局文件...
Android:AIDL和远程Service调用 ...第一、我们知道在AndroId中如果需要进行音乐播放,最方面的方法就是使用自带的MediaPlayer对象,如果我们在Activity中控制MediaPlayer对象进行播放,那么一旦你打开了另外一个程序
摘要:VB源码,多媒体技术,音乐播放器 ...编辑注:虽然核心是基于MediaPlayer,这点好像有很多例子,但本程序在一些辅助功能方面、窗体界面设计方面做的都挺不错,欢迎参考。 运行环境:Windows/VB6
8.3 后台播放音乐 345 8.3.1 跨进程调用 345 8.3.2 创建AIDL接口文件 346 8.3.3 实现AIDL接口 347 8.3.4 绑定Service 351 8.3.5 调用IPC方法 352 8.4 小结 353 第9章 访问网络数据和服务 354 9.1 HTTP协议简介 354 ...
MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,...
MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,...
MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,...
MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,...
MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,...
很简单,只能播放mp3格式的音乐。 功能: --------------------------------------- --------关闭-- 打开----最小化------- --------------------------------------- 显示歌曲名字 -------------------- -------...