c语言如何随机获取1kb,基于VS2010+C语言实现播放器的顺序播放、随机播放
1.[文件] music.h ~ 920B 下载(38)
/*
* File: music.h
* Time: 2014/10/11
*/
#ifndef __MUSIC_H__
#define __MUSIC_H__
typedef enum { UNPLAYED, PLAYED } BOOL; // 自定义一个bool类型
typedef enum { ORDER, RANDOM } PLAY_MODEL; // 自定义一个播放类型
typedef char *MUSIC_NAME; // 歌曲名
typedef MUSIC_NAME *MUSIC_NAME_TAB; // 歌曲名表
#define MUSIC_NAME_SIZE 60
typedef struct _music_ {
char str[MUSIC_NAME_SIZE];
BOOL isPlayed; // 是否被播放过
} MUSIC; // 歌曲 MUSIC == struct _music_
typedef MUSIC *MUSIC_TAB; // 歌曲播放列表 MUSIC_TAB == MUSIC *
void systemInit(void); // 系统初始化,必须在listPlay()之前调用,且只能调用一次
void play(const MUSIC_NAME_TAB musNametab, const int musnum, const PLAY_MODEL playModel);
// 按照歌曲名表musNametab播放歌曲;musnum为歌曲数量;playModel为播放模式;
// playModel:ORDER(按歌曲名称顺序播放) RANDOM(随机播放)
#endif
/*
* End of file
*/
2.[文件] music.c ~ 4KB 下载(33)
/*
* File: music.c
* Time: 2014/10/11
*/
#include "music.h"
#include
#include
#include
#include
#include
static MUSIC_TAB newtab = NULL; // 全局变量,一张经过处理(排序/洗牌)的新的歌曲表单
static void playOneMusic(MUSIC mus); // 播放歌曲mus
static MUSIC_TAB orderList(const MUSIC_TAB oldtab, const int musnum); // 获得新的有序列表
static MUSIC_TAB randomLis(const MUSIC_TAB oldtab, const int musnum); // 获得新的随机列表
static void listPlay(const MUSIC_TAB mustab, int musnum, const PLAY_MODEL playModel); // 按照新表单播放
//==========================================================================================================
// 系统初始化,必须在listPlay()之前调用,且只能调用一次
void systemInit(void) {
srand((unsigned int)time(NULL));
}
// 按照歌曲名表musNametab播放歌曲
void play(const MUSIC_NAME_TAB musNametab, const int musnum, const PLAY_MODEL playModel) {
int i;
newtab = (MUSIC_TAB)malloc(sizeof(MUSIC) * musnum);
if (newtab != NULL) {
for (i = 0; i < musnum; i++) { // 装载歌曲名信息,并清零已播放标志
memset(&(newtab[i].str[0]), 0, sizeof(char)*MUSIC_NAME_SIZE);
strcpy(newtab[i].str, musNametab[i]);
newtab[i].isPlayed = UNPLAYED;
}
listPlay(newtab, musnum, playModel);
} else {
fprintf(stderr,"\n Program Running Wrong!\n");
return;
}
}
//==========================================================================================================
static void listPlay(const MUSIC_TAB mustab, int musnum, const PLAY_MODEL playModel) { // 按照新表单播放
//以下注释部分是最初的错误代码
//if (playModel == ORDER) {
//newtab = orderList(mustab, musnum); // 获得新的有序列表
//} else {
//newtab = randomLis(mustab, musnum); // 获得新的随机列表
//}
//while(--musnum >= 0) {
//playOneMusic(*newtab++);// 播放某一歌曲
//}
//free(newtab);
//以下部分是调试之后改正的代码 ========================================
MUSIC_TAB tmp = NULL;
if (playModel == ORDER) {
newtab = orderList(mustab, musnum); // 获得新的有序列表
} else {
newtab = randomLis(mustab, musnum); // 获得新的随机列表
}
tmp = newtab;
while(--musnum >= 0) {
playOneMusic(*tmp++);// 播放某一歌曲
}
if (newtab != NULL) {
free(newtab);
}
}
static void playOneMusic(MUSIC mus) {
if (mus.isPlayed == UNPLAYED) { // 如果歌曲mus在当前循环尚未播放过
if (mus.str != NULL) {
if (strlen(mus.str) <= 0) { // 歌曲名为空字符串
fprintf(stderr,"\n The file of the song \"%s\" is empty !!!\n");
} else {
printf("\n Start playing the song: "); // 模拟歌曲播放
puts(mus.str);
printf(" ");
putchar('.'); Sleep(500); putchar('.'); Sleep(500); putchar('.');
printf("\n Stop playing the song.\n ");
Sleep(500);
}
} else { // 歌曲名为空
fprintf(stderr,"\n Unfound the song \"%s\" !!!\n", mus.str);
}
}
mus.isPlayed = PLAYED;
}
static MUSIC_TAB orderList(const MUSIC_TAB oldtab, const int musnum) { // 获得新的有序列表
if (newtab != NULL) { // newtab为全局变量
int i,j;
MUSIC temp;
memcpy(newtab, oldtab, sizeof(MUSIC)*musnum);
// 将newtab[0]~newtab[musnum-1]排序
for (i = 0; i < musnum-1; i++) {
for (j = i+1; j < musnum; j++) {
if (strcmp(newtab[i].str, newtab[j].str) > 0) { // newtab[i]->str > newtab[j]->str
temp = newtab[i];
newtab[i] = newtab[j];
newtab[j] = temp;
}
}
}
return newtab;
} // @ if (newtab != NULL)
// 如果newtab==NULL则不作任何处理,统一由listPlay()处理
}
static int myRand(int len) { //生成一个[0,len-1]之间的随机数
int iRand;
iRand = rand()%len; // 这就是为什么需要systemInit()的原因
return iRand;
}
#define SWAP(a,b,_t) do { _t t = a; a = b; b = t; } while(0)
static void shuffle(const MUSIC_TAB table, const int musnum) { // 洗牌
int n;
// 将table[0]~table[musnum-1]洗牌
// 具体算法:http://bbs.bccn.net/thread-331122-1-1.html
for (n = musnum; n > 1; --n) {
int i = myRand(n);
SWAP(table[n-1], table[i], MUSIC);
}
}
static MUSIC_TAB randomLis(const MUSIC_TAB oldtab, const int musnum) { // 获得新的随机列表
if (newtab != NULL) { // newtab为全局变量
memcpy(newtab, oldtab, sizeof(MUSIC)*musnum);
shuffle(newtab, musnum);
return newtab;
} // @ if (newtab != NULL)
// 如果newtab==NULL则不作任何处理,统一由listPlay()处理
}
/*
* End of file
*/
3.[文件] playmusic.c ~ 1KB 下载(30)
/*
* File: playmusic.c
* Time: 2014/10/11
*/
#include "music.h"
#include
// �˳��
c语言如何随机获取1kb,基于VS2010+C语言实现播放器的顺序播放、随机播放相关推荐
- 最简单的基于FFMPEG+SDL的音频播放器:拆分-解码器和播放器
===================================================== 最简单的基于FFmpeg的音频播放器系列文章列表: <最简单的基于FFMPEG+SDL ...
- 基于tkinter+python36制作得视频播放器,非会员也可播放
首先附上2个播放地址,可以解析视频网站,我只是个视频搬运工,暂时未添加下载功能. www.wq114.org/weixin.php?url= http://www.wmxz.wang/video.ph ...
- c51单片机c语言音乐播放器,51单片机做音乐播放器的问题
主程序代码如下: #include "ZNFAT.H" #include "sd.h" #include "uart.h" #include ...
- 按键精灵-随机获取不重复内容
一般利用数组功能可以实现万能随机, 也就是不管你想随机取什么内容, 都可以实现, 现在需求多了不重复, 也就意味着每次随机都要针对数组内容进行删除, 按键精灵中删除数组元素的方法是对其赋值为null即 ...
- 基于android音乐播放器的设计
本科毕业论文(设计)诚信声明 本人郑重声明:所呈交的毕业论文(设计),题目<---基于android音乐播放器的设计----------->是本人在指导教师的指导下,进行研究工作所取得的成 ...
- 在HarmonyOS中实现基于JS卡片的音乐播放器
/ 今日科技快讯 / 近日,苹果首席执行官蒂姆·库克接受<时代>杂志专访,谈及他本人对领导力.企业价值和新技术的看法.库克表示,苹果不仅要引领创新,还要努力让世界变得更安全更公平, ...
- 搬砖之路----MusicPlayer 一个基于Vlc(2.0+)开发的android音乐播放器--浅析在android开发过程中播放器选择之路!
前言 MusicPlayer 是一款基于vlc播放器开发的一个音乐播放器,你也可以理解为在此核心上的搬砖之路,核心的内容并不是我写的,因此在正式写blog之前,感谢那些vlc核心的开发人员让我用到这么 ...
- 直播弹幕 html5,一种基于HTML5的弹幕播放器及其方法与流程
本发明涉及互联网技术领域,具体涉及一种基于HTML5的弹幕播放器及其方法. 背景技术: 弹幕是指一种在观看视频时,大量以字幕(有且不限于文字和图片)形式呈现的评论与视频同在一个画面的现象.在视频上方大 ...
- 嵌入式 QT 基于mplayer的音乐播放器
1.实现功能 2.音乐播放界面 2.1 界面程序 2.1.1 界面控制初始化 2.1.2 控件风格程序 3. 歌曲列表界面 3.1.1 在 widget.h 定义 QListWidge 对象指针 3. ...
最新文章
- mysql 历史版本下载
- 在县城投资买一辆出租车,一个月能收入多少钱?
- 图片md5修改工具_如何修改视频和图片的MD5,用电脑自带的命令
- 乾坤 微前端_拥抱云时代的前端开发架构——微前端
- stooge sort
- 34线性映射01——映射的概念和性质
- STC单片机不需要按电源开关下载的方法!
- python,错误、调试和测试
- 大型分布式Java项目--宜立方商城
- 出现画面抖动_手机拍照时模糊,抖动?赶紧来拯救你的拍摄技术吧!
- 浪潮服务器raid虚拟驱动,浪潮服务器RAID 卡驱动
- 基于单片机的交通信号灯控制系统设计
- linux制作flash软件,Linux 下的三款 Flash 独立播放器
- miRNA-转录组-蛋白组联合分析
- 大数据与云计算——Vmware虚拟化技术原理
- Linux的shell计算下一次生日
- 机器学习之CART树
- PCM开发板模块实验指导--无刷马达实验
- 教程 | 用Python识别图片验证码中的文字
- 利用LDA和主题模型发现9种冠状病毒研究趋势
热门文章
- go 监测tcp 连接断开_TCP三次握手和四次挥手以及11种状态
- spring mvc是什么_狂神说SpringMVC01:什么是SpringMVC
- HH SaaS电商系统的支付模块设计
- html图片自适应浏览器高度,css如何高度自适应浏览器高度?
- java算术运算符的分类_6.Java算术运算符
- js 导出pdf上传至oss_js实现oss文件上传及一些问题
- opencv python 多帧降噪算法_OpenCV-Python中用于视频跟踪的Meanshift和Camshift算法介绍...
- gram矩阵_Skip-gram
- linux查询设备文件信息失败怎么办,Linux下使用blkid命令查询设备及文件系统信息的方法...
- 2022年最值得学习的 5 种编程语言,你有在学习吗?