实验简单音频播放器程序实现
数电实验报告-音乐播放器
实验课题:简易乐曲播放器学院:班级:姓名:学号:班内序号:一、设计课题要求 (2)二、设计思路和总体框图 (2)三、分块电路设计 (4)四、仿真波形 (6)五、源程序 (7)六、功能说明 (20)七、所用元器件情况 (20)八、故障及问题分析 (21)九、总结和结论 (22)十、参考文献 (22)一设计课题的任务要求设计制作一个简易乐曲播放器:1. 播放器内预存3 首乐曲;2. 播放模式:顺序播放、随机播放,并用数码管或LED 显示当前播放模式;顺序播放:按内部给定的顺序依次播放3 首乐曲;随机播放:随机产生一个顺序播放3 首乐曲;3. 用数码管显示当前播放乐曲的顺序号;4. 设置开始/暂停键,乐曲播放过程中按该键则暂停播放,再按则继续播放;5. 设置Next 和Previous 键,按Next 键可以听下一首,按Previous 键回到本首开始;6. 选做:用户可以自行设定播放顺序,设置完成后,播放器按该顺序依次播放乐曲;7. 选做:自拟其它功能。
二设计思路和总体框图设计思路:组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的2个基本要素。
乐曲的12平均律规定:每2个八度音之间的频率相差1倍。
在2个八度音之间,又可分为12个半音,每两个半音的频率比为2开12次方。
另外,音符A (简谱中的低音6)的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。
由此可以计算出简谱中从低音1至高音1之间每个音符的频率,如下表所示。
产生各音符所需的频率可用分频器实现。
本次实验使用的是MAXⅡ实验板,时钟频率为50MHz,计算出各个音符对应的分频系数,进行50%占空比的分频,即可得到各音符对应的频率。
对于节拍,如果将一拍的长度定为1秒,则1/4拍的时间为1/4秒,为其提供一个4Hz的时钟频率即可产生出1/4拍的效果了。
若需要半拍,只需将该音符记录两次就可以了。
产生节拍时钟也用分频器实现,本次实验中时钟频率为5Hz。
用Python实现简单的音视频播放功能
用Python实现简单的音视频播放功能在当今数字化时代,音视频播放已经成为人们日常生活中不可或缺的一部分。
无论是在工作中还是在娱乐休闲时,我们都需要使用各种工具来播放音频和视频文件。
Python作为一种功能强大且易于学习的编程语言,也可以用来实现简单的音视频播放功能。
本文将介绍如何使用Python来实现基本的音视频播放功能。
1. 安装必要的库要实现音视频播放功能,我们首先需要安装相应的Python库。
在Python中,有一个名为pygame的库可以帮助我们实现音频文件的播放,而opencv-python库则可以用来处理视频文件。
你可以使用以下命令来安装这两个库:示例代码star:编程语言:bashpip install pygamepip install opencv-python示例代码end首先,让我们看看如何使用Python来播放音频文件。
下面是一个简单的示例代码,演示了如何使用pygame库来加载并播放一个音频文件:示例代码star:编程语言:pythonimport pygamepygame.init()pygame.mixer.music.load("example.mp3")pygame.mixer.music.play()while pygame.mixer.music.get_busy():pygame.time.Clock().tick(10)示例代码end在这段代码中,我们首先导入了pygame库,并初始化了它。
然后使用pygame.mixer.music.load()方法加载了一个名为example.mp3的音频文件,并通过pygame.mixer.music.play()方法开始播放该音频文件。
最后,在一个循环中检查音乐是否正在播放,并使用pygame.time.Clock().tick(10)方法来控制播放速度。
接下来,让我们看看如何使用Python来播放视频文件。
音频播放器实验报告
郑州航空工业管理学院《C#程序设计》考试形式:考查题目:音频播放器专业:计算机学号:姓名:完成日期: 2014-6-5目录目录 (1)1 前言 (2)2 需求分析 (2)2.1要求 (2)2.2任务 (2)2.3运行环境 (3)2.4开发工具 (3)3 概要设计与详细设计 (3)3.1系统流程图 (3)3.2查询函数流程图 (5)4 编码与实现 (7)4.1分析 (7)4.2程序调试及截图 (8)4.3具体代码实现 (12)5 课程设计总结 (14)参考文献 (15)致谢 (15)1 前言音频播放器,是目前使用户选择播放任意格式的音频文件的软件,如酷我、QQ 音乐等。
一般的音频播放器都可以支持MP3、MP4、avi等文件格式的播放。
从目前市场的发展情况来看,MP3无疑占据了音频播放器的绝大部分市场;从屏幕来看,MP3的发展经历了无数次的变更;从存储体来看,种类也颇多,其功能真是五花八门,是其他播放器所无法比拟的。
在此次编程设计的音频播放器是通过Windows Media Player控件来实现的,Windows Media Player是一款Windows系统自带的播放器,支持通过插件增强功能,该软件可以播放MP3、WMA、WAV等格式的文件。
本次课程设计我通过Windows Media Player实现音频播放器的简单设计,可以实现对音频文件的打开、播放、暂停、继续、停止、视频显示等功能。
对于实现添加文件、播放、停止,都是利用CMidi这个类来存放实现这些功能的函数,需要的时候调用就可以。
至于音频播放器以后的路该怎么走,还要看市场的发展情况以及用户的需求,个性化也是MP3等音频播放器所追求的一个目标。
相信未来音频播放器会越来越个性化、功能化、更方便携带。
2 需求分析2.1要求(1)用C#语言实现程序设计;(2)利用结构体进行相关信息处理;(3)画出查询模块的流程图;(4)系统的各个功能模块要求用函数的形式实现;(5)界面友好(良好的人机互交),程序要有注释。
iOS音频播放(六):简单的音频播放器实现
iOS音频播放(六):简单的音频播放器实现前言在前几篇中我分别讲到了AudioSession、AudioFileStream、AudioFile、AudioQueue,这些类的功能已经涵盖了第一篇中所提到的音频播放所需要的步骤:1.读取MP3文件 NSFileHandle2.解析采样率、码率、时长等信息,分离MP3中的音频帧AudioFileStream/AudioFile3.对分离出来的音频帧解码得到PCM数据 AudioQueue4.省略5.把PCM数据解码成音频信号 AudioQueue6.把音频信号交给硬件播放 AudioQueue7.重复1-6步直到播放完成下面我们就讲讲述如何用这些部件组成一个简单的本地音乐播放器,这里我会用到AudioSession、AudioFileStream、AudioFile、AudioQueue。
注意:在阅读本篇请实现阅读并理解前面1-5篇的内容以及2-5篇最后给出的封装类,本篇中的播放器实现将基于前面几篇中给出的MCAudioSession、MCAudioFileStream、MCAudioFile和MCAudioOutputQueue进行实现。
AudioFileStream vs AudioFile解释一下为什么我要同时使用AudioFileStream和AudioFile。
第一,对于网络流播必须有AudioFileStream的支持,这是因为我们在第四篇中提到过AudioFile在Open时会要求使用者提供数据,如果提供的数据不足会直接跳过并且返回错误码,而数据不足的情况在网络流中很常见,故无法使用AudioFile单独进行网络流数据的解析;第二,对于本地音乐播放选用AudioFile更为合适,原因如下:1.AudioFileStream的主要是用在流播放中虽然不限于网络流和本地流,但流数据是按顺序提供的所以AudioFileStream也是顺序解析的,被解析的音频文件还是需要符合流播放的特性,对于不符合的本地文件AudioFileStream会在Parse时返回NotOptimized错误;2.AudioFile的解析过程并不是顺序的,它会在解析时通过回调向使用者索要某个位置的数据,即使数据在文件末尾也不要紧,所以AudioFile适用于所有类型的音频文件;基于以上两点我们可以得出这样一个结论:一款完整功能的播放器应当同时使用AudioFileStream和AudioFile,用AudioFileStream来应对可以进行流播放的音频数据,以达到边播放边缓冲的最佳体验,用AudioFile来处理无法流播放的音频数据,让用户在下载完成之后仍然能够进行播放。
QT实现简单音乐播放器
QT实现简单⾳乐播放器基于QT实现⼀个多功能媒体播放器,它能播放⾳频(如mp3),视频媒体播放器界⾯,有进度条,可展⽰总播放时间、当前播放时间,进度条可拖动,有播放、暂停键,有快进、快退键,上⼀曲下⼀曲,静⾳,调节⾳量,双击播放歌曲,以及简单的歌词同步。
主界⾯如下:创建三个本地⽂件夹分别存放MV,歌词和⾳乐⽂件⼯程结构⽬录如下(整个结构没有设计好,所以每个视频都要单独创建⽂件):mainwindow.h代码如下:#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QMediaPlayer>#include <QMediaPlaylist>#include <QMediaPlayer>#include <QStringList>#include <QDir>#include <QTime>#include <QTimer>#include<videoplayer.h>#include<videoplayer_qr.h>#include<videoplayer_cq.h>QT_BEGIN_NAMESPACEnamespace Ui { class MainWindow; }QT_END_NAMESPACEclass MainWindow : public QMainWindow{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;VideoPlayer *v1;videoplayer_qr *v_qr;videoplayer_cq *v_cq;bool isPlay=false;bool ismute=false;QString MusicPath="C:\\Users\\44637\\Music\\QTMusic";QString LrcPath="C:\\Users\\44637\\Music\\QTLrc";QStringList fileList; //⽂件名称QStringList lrcList;QMediaPlaylist *PlayerList;QMediaPlayer *Player;int moved;int iCount=0;QTimer *timer2;QMap<int, QString> map;QMap<QString, QString> *map2;void getHeader(const char *str, QString &des);void getTime(QString line);//改动⼆private slots:void init();//初始化void addItem(QString name); //把歌名添加到musicname上QStringList getFileNames(const QString &path); //获取路径下所有⽂件名QStringList getLrcNames(const QString &path); //获取路径下所有⽂件名void slotButtonStart();//播放void slotButtonLast();//上⼀⾸void slotButtonNext();//下⼀⾸void slotShowCurrentMusic();//显⽰当前播放的歌曲void volumChange(int);//控制⾳量void positionChange(qint64 position);//进度条随着⾳乐播放变化void seekChange(int position); //滑动滑动条快进、倒退⾳乐,且⾳乐已播放时长也跟着变化 void musicTime();//歌曲总时间void slotShowCurrentLrc();void showWord(int time);//显⽰歌词void initlrc(const QString& fileName);//初始化歌词void button_style();//按钮样式void changestartbutton();void cleanmap();void playto(int i,int );//双击播放void video_click_wm();//播放相应视频void video_click_qr();void video_click_cq();void mute();//静⾳void fastForward();//快进void fastBack();//快退};#endif // MAINWINDOW_Hmainwindow.cpp代码如下:#include "mainwindow.h"#include "ui_mainwindow.h"#include <QDebug>#include <QFile>#include <QTextStream>#include <QTextCodec>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ui->setupUi(this);connect(ui->Buttonstart,&QPushButton::clicked,this,&MainWindow::slotButtonStart);connect(ui->Buttonlast,&QPushButton::clicked,this,&MainWindow::slotButtonLast);connect(ui->Buttonnext,&QPushButton::clicked,this,&MainWindow::slotButtonNext);connect(ui->Buttonstart,&QPushButton::clicked,this,&MainWindow::changestartbutton);connect(ui->Buttonvideo_wm,&QPushButton::clicked,this,&MainWindow::video_click_wm); connect(ui->Buttonvideo_qr,&QPushButton::clicked,this,&MainWindow::video_click_qr); connect(ui->Buttonvideo_cq,&QPushButton::clicked,this,&MainWindow::video_click_cq); connect(ui->Buttonmute,&QPushButton::clicked,this,&MainWindow::mute);connect(ui->fastButton,&QPushButton::clicked,this,&MainWindow::fastForward);connect(ui->fastbackButton,&QPushButton::clicked,this,&MainWindow::fastBack);init();}MainWindow::~MainWindow(){delete ui;}void MainWindow::init(){button_style();PlayerList = new QMediaPlaylist; //实例化播放器和播放列表Player = new QMediaPlayer;fileList = getFileNames(this->MusicPath); //获取⽂件夹下所有⾳乐⽂件lrcList = getLrcNames(this->LrcPath);moved = 0;qDebug()<<"ALL Music File \n"<<fileList;qDebug()<<"ALL Lrc File \n"<<lrcList;for(int i=0;i<fileList.size();i++){QString fileName=fileList.at(i);addItem(fileName);PlayerList->addMedia(QUrl::fromLocalFile(MusicPath+"\\"+fileName));}PlayerList->setCurrentIndex(0);Player->setPlaylist(PlayerList); //将播放列表加载到播放器connect(Player,&QMediaPlayer::currentMediaChanged,this,&MainWindow::slotShowCurrentMusic); connect(Player,&QMediaPlayer::currentMediaChanged,this,&MainWindow::slotShowCurrentLrc); connect(Player,&QMediaPlayer::currentMediaChanged,this,&MainWindow::cleanmap);connect(ui->Buttonstart,&QPushButton::clicked,this,&MainWindow::slotShowCurrentLrc);connect(ui->Buttonnext,&QPushButton::clicked,this,&MainWindow::slotShowCurrentLrc);connect(ui->Buttonlast,&QPushButton::clicked,this,&MainWindow::slotShowCurrentLrc);connect(ui->Buttonstart,&QPushButton::clicked,this,&MainWindow::slotShowCurrentMusic);connect(ui->Volumebar, SIGNAL(sliderMoved(int)), this, SLOT(volumChange(int)));connect(Player,SIGNAL(positionChanged(qint64)),this,SLOT(positionChange(qint64)));connect(Player,SIGNAL(durationChanged(qint64)),this,SLOT(musicTime()));connect(ui->Progressbar,SIGNAL(sliderMoved(int)),this,SLOT(seekChange(int)));connect(ui->musicname,SIGNAL(cellDoubleClicked(int,int)),this,SLOT(playto(int,int)));}QStringList MainWindow::getFileNames(const QString &path){QDir dir(path);QStringList nameFilters;nameFilters << "*.mp3";QStringList files = dir.entryList(nameFilters, QDir::Files|QDir::Readable, QDir::Name);return files;}QStringList MainWindow::getLrcNames(const QString &path){QDir dir(path);QStringList nameFilters;nameFilters <<"*.txt";QStringList files = dir.entryList(nameFilters, QDir::Files|QDir::Readable, QDir::Name);return files;}void MainWindow::addItem(QString name){int count = ui ->musicname->rowCount();ui->musicname->setRowCount(count+1);QTableWidgetItem *itemName = new QTableWidgetItem(name);itemName->setFlags(itemName->flags() & ~Qt::ItemIsEditable);ui->musicname->setItem(count,0,itemName);}void MainWindow::slotShowCurrentMusic(){int index=PlayerList->currentIndex();QString songName=fileList.at(index);ui->CurrentMusic->setText(songName);}void MainWindow::slotShowCurrentLrc(){int index=PlayerList->currentIndex();qDebug()<<index;QString musicLrc=lrcList.at(index);qDebug()<<musicLrc;initlrc(musicLrc);}void MainWindow::slotButtonStart(){if(!isPlay){isPlay=true;Player->setVolume(100);Player->play();musicTime();}else{isPlay=false;Player->pause();musicTime();}}void MainWindow::slotButtonLast(){int currentIndex = PlayerList->currentIndex();if(currentIndex == 0){currentIndex=PlayerList->mediaCount();}else{PlayerList->previous();PlayerList->previousIndex();musicTime();}}void MainWindow::slotButtonNext(){int currentIndex = PlayerList->currentIndex();if(++currentIndex == PlayerList->mediaCount()){currentIndex=0;}PlayerList->setCurrentIndex(currentIndex);musicTime();}void MainWindow::volumChange(int vol){Player -> setVolume(vol);}void MainWindow::positionChange(qint64 position){ui->Progressbar->setMaximum(Player->duration() / 1000);//设置滑块的长度范围为⾳乐长.00度 ui->Progressbar->setValue(position / 1000);//如果⾳乐进度改变,则改变滑块显⽰位置moved = position;//让播放时间等于⾳乐进度(毫秒)QTime moveTime(0,(moved/60000) % 60,(moved / 1000) % 60);//设置时间ui->showPro ->setText(moveTime.toString("mm:ss"));//显⽰时间QString t=moveTime.toString("mm:ss");QString mm = t.mid(0,2);QString ss = t.mid(3, 2);int m = mm.toInt();int s = ss.toInt();int time = m*60*1000 + s*1000;showWord(time);}void MainWindow::seekChange(int position){Player -> setPosition(position * 1000);//如果滑块改变位置,则改变⾳乐进度moved = position * 1000;//让播放时间等于⾳乐进度(毫秒)QTime moveTime(0,(moved/60000) % 60,(moved / 1000) % 60);//设置时间ui->showPro ->setText(moveTime.toString("mm:ss"));//显⽰时间}void MainWindow::musicTime(){qint64 time = Player->duration();QTime Time(0,(time % (1000 * 60 * 60)) / (1000 * 60),(time % (1000 * 60)) / 1000);ui->MusicTime->setText(Time.toString("mm:ss"));qDebug()<<"time:"<<Time;}void MainWindow::showWord(int time){if(map.contains(time)){ui->label1->setText(map.value(time));}else{qDebug()<<"继续上⼀句歌词";}}void MainWindow::getHeader(const char *str, QString &des){des = des.remove(str);des = des.remove("]");}void MainWindow::getTime(QString line)//获取lrc⽂件的每句的时间{if(line.startsWith("[")){int index = line.indexOf("]");QString t = line.mid(1, index - 1);QString mm = t.mid(0,2);QString ss = t.mid(3, 2);int m = mm.toInt();int s = ss.toInt();int time = m*60*1000 + s*1000;t = line.mid(index + 1);index = stIndexOf("]");if(index < 0){map.insert(time, t);}else{t = t.mid(index + 1);map.insert(time, t);getTime(t);qDebug()<<"time123:"<<time;}}}void MainWindow::initlrc(const QString& fileName){QMap<int, QString> map;QString l;QFile file("C:\\Users\\44637\\Music\\QTLrc\\"+fileName);if(file.exists()){qDebug()<<"⽂件存在";}else{qDebug()<<"⽂件不存在";}if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){return;}QTextCodec *codec = QTextCodec::codecForName("GBK");while(!file.atEnd()){QString line = codec->toUnicode(file.readLine());QString s(line);if(s.length()<4)continue;if(s.startsWith("[ti:")){getHeader("[ti:", s);map.insert(0, s);ui->topmusicname->setText(s);continue;}else if(s.startsWith("[ar:")){getHeader("[ar:", s);map.insert(1000, s);ui->singer->setText("歌⼿:"+s);continue;}else if(s.startsWith("[al:")){getHeader("[al:", s);map.insert(2000, s);ui->album->setText("专辑:"+s);continue;}else if(s.startsWith("[by:")){getHeader("[by:", s);map.insert(3000, s);continue;}else{getTime(s);}}file.close();}void MainWindow::button_style(){ui->Buttonstart->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\start.jpg"));ui->Buttonlast->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\last.jpg"));ui->Buttonnext->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\next.png"));ui->Buttonmute->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\volume.jpg")); ui->Buttonvideo_qr->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\MV.png")); ui->Buttonvideo_wm->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\MV.png")); ui->Buttonvideo_cq->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\MV.png")); }void MainWindow::changestartbutton(){if(isPlay)ui->Buttonstart->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\pause.jpg"));elseui->Buttonstart->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\start.jpg"));}void MainWindow::cleanmap(){map.clear();}void MainWindow::playto(int i,int ){PlayerList->setCurrentIndex(i);isPlay=true;changestartbutton();QString musicLrc=lrcList.at(i);initlrc(musicLrc);Player->play();}void MainWindow::video_click_wm(){v1= new VideoPlayer(this);v1->setModal(false);v1->show();}void MainWindow::video_click_qr(){v_qr= new videoplayer_qr(this);v_qr->setModal(false);v_qr->show();}void MainWindow::video_click_cq(){v_cq= new videoplayer_cq(this);v_cq->setModal(false);v_cq->show();}void MainWindow::mute(){if(!ismute){Player -> setVolume(0);//ui->voiceslider->value();ui->Buttonmute->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\mute.png"));ismute=true;}else{Player -> setVolume(100);ui->Buttonmute->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\volume.jpg")); ismute=false;}}void MainWindow::fastForward(){qint64 position=Player->position();qDebug()<<"position"<<position;position=position+5000;ui->Progressbar->setValue(position/1000);Player -> setPosition(position);//如果滑块改变位置,则改变⾳乐进度}void MainWindow::fastBack(){qint64 position=Player->position();qDebug()<<"position"<<position;position=position-5000;ui->Progressbar->setValue(position/1000);Player -> setPosition(position);//如果滑块改变位置,则改变⾳乐进度}videoplayer.h代码如下(视频播放和⾳乐播放差不多):#ifndef VIDEOPLAYER_H#define VIDEOPLAYER_H#include <QDialog>#include <QMediaPlayer>#include <QVideoWidget>#include <QMediaPlaylist>#include <QTime>#include <QTimer>namespace Ui {class VideoPlayer;}class VideoPlayer : public QDialog{Q_OBJECTpublic:explicit VideoPlayer(QWidget *parent = nullptr);~VideoPlayer();public slots:void init();void slotButtonStart();void slotstop();void closeEvent(QCloseEvent *);void volumChange(int);void positionChange(qint64 position);void seekChange(int position); //滑动滑动条快进、倒退⾳乐,且⾳乐已播放时长也跟着变化 void videoTime();void changestartbutton();void button_style();void mute();private:QMediaPlayer* player;QVideoWidget* videoWidget;QMediaPlaylist* playlist;Ui::VideoPlayer *ui;bool isPlay_wm=false;bool ismute=false;int moved;};#endif // VIDEOPLAYER_Hvideoplayer.cpp代码如下:#include "videoplayer.h"#include "ui_videoplayer.h"#include <QDebug>#include <QFile>#include <QCloseEvent>VideoPlayer::VideoPlayer(QWidget *parent) :QDialog(parent),ui(new Ui::VideoPlayer){ui->setupUi(this);qDebug()<<"执⾏到此处";connect(ui->Buttonstart,&QPushButton::clicked,this,&VideoPlayer::changestartbutton);connect(ui->Buttonmute,&QPushButton::clicked,this,&VideoPlayer::mute);init();connect(ui->Buttonstart,&QPushButton::clicked,this,&VideoPlayer::slotButtonStart);connect(ui->voiceSlider, SIGNAL(sliderMoved(int)), this, SLOT(volumChange(int)));connect(player,SIGNAL(positionChanged(qint64)),this,SLOT(positionChange(qint64)));connect(ui->timeSlider,SIGNAL(sliderMoved(int)),this,SLOT(seekChange(int)));connect(player,SIGNAL(durationChanged(qint64)),this,SLOT(videoTime()));}VideoPlayer::~VideoPlayer(){slotstop();delete ui;}void VideoPlayer::init(){//widget=new QWidget;button_style();player= new QMediaPlayer;videoWidget=new QVideoWidget;playlist=new QMediaPlaylist;playlist->clear();playlist->addMedia(QUrl::fromLocalFile("C:\\Users\\44637\\Music\\MV\\陈奕迅-我们MV.mp4")); player->setPlaylist(playlist);QFile file("C:\\Users\\44637\\Music\\MV\\陈奕迅-我们MV.mp4");if(!file.open(QIODevice::ReadOnly))qDebug() << "Could not open file";player->setVideoOutput(videoWidget);player->setPlaylist(playlist);videoWidget->setAutoFillBackground(true);QPalette qplte;qplte.setColor(QPalette::Window, QColor(0,0,0));videoWidget->setPalette(qplte);ui->verticalLayout->addWidget(videoWidget);player->play();isPlay_wm=true;}void VideoPlayer::slotButtonStart(){if(!isPlay_wm){isPlay_wm=true;//Player->setVolume(100);player->play();//musicTime();//qApp->quit();}else{isPlay_wm=false;player->pause();//musicTime();}}void VideoPlayer::slotstop(){player->stop();playlist->clear();//player->}void VideoPlayer::closeEvent(QCloseEvent *event){slotstop();event->accept();}void VideoPlayer::volumChange(int vol){player -> setVolume(vol);}void VideoPlayer::positionChange(qint64 position){ui->timeSlider->setMaximum(player->duration() / 1000);//设置滑块的长度范围为⾳乐长.00度 ui->timeSlider->setValue(position / 1000);//如果⾳乐进度改变,则改变滑块显⽰位置moved = position;//让播放时间等于⾳乐进度(毫秒)QTime moveTime(0,(moved/60000) % 60,(moved / 1000) % 60);//设置时间ui->currenttime ->setText(moveTime.toString("mm:ss"));//显⽰时间QString t=moveTime.toString("mm:ss");QString mm = t.mid(0,2);QString ss = t.mid(3, 2);int m = mm.toInt();int s = ss.toInt();int time = m*60*1000 + s*1000;qDebug()<<"int"<<time;}void VideoPlayer::seekChange(int position){player -> setPosition(position * 1000);//如果滑块改变位置,则改变⾳乐进度moved = position * 1000;//让播放时间等于⾳乐进度(毫秒)QTime moveTime(0,(moved/60000) % 60,(moved / 1000) % 60);//设置时间}void VideoPlayer::videoTime(){qint64 time = player->duration();QTime Time(0,(time % (1000 * 60 * 60)) / (1000 * 60),(time % (1000 * 60)) / 1000); ui->videotime->setText(Time.toString("mm:ss"));qDebug()<<"time:"<<Time;}void VideoPlayer::changestartbutton(){if(!isPlay_wm)ui->Buttonstart->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\pause.jpg"));elseui->Buttonstart->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\start.jpg"));}void VideoPlayer::button_style(){ui->Buttonstart->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\pause.jpg"));ui->Buttonmute->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\volume.jpg")); }void VideoPlayer::mute(){if(!ismute){player -> setVolume(0);ui->Buttonmute->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\mute.png"));ismute=true;}else{player -> setVolume(100);ui->Buttonmute->setIcon(QIcon("E:\\QT\\QTcode\\MusicPlayer\\icon\\volume.jpg")); ismute=false;}}总体运⾏界⾯如下:⼀些关键⽅法和思路:(1)导⼊歌曲:从本地⽂件将歌曲名和歌曲的歌词导⼊,获取⽂件路径下所有的⾳乐⽂件和歌词⽂件,⽣成两个QStringList类型的列表。
前端开发实训案例实现一个简单的音乐播放器
前端开发实训案例实现一个简单的音乐播放器在本案例中,我们将一步步实现一个简单的音乐播放器,通过前端开发实训的方式,让大家掌握基本的前端开发技能和工具的使用。
下面是实现过程的详细步骤。
一、准备工作在开始实现音乐播放器之前,我们需要准备一些必要的工作。
首先,我们需要一个 HTML 页面来显示播放器的界面,可以通过创建一个名为index.html的文件来实现。
然后,我们需要下载一个适合的音乐播放器的样式文件和脚本文件,可以在一些开源的网站上找到并下载。
二、项目结构在开始编写代码之前,我们需要创建一个合理的项目结构。
在该案例中,我们可以创建以下几个文件夹和文件:- css文件夹:用于存放样式文件- js文件夹:用于存放脚本文件- img文件夹:用于存放图片资源- index.html:HTML页面的入口文件三、实现播放器界面1. 引入样式文件在index.html文件的头部,使用<link>标签引入样式文件。
例如:```html<link rel="stylesheet" href="css/player.css">```2. 创建播放器容器在index.html文件的<body>标签内,创建一个用于显示音乐播放器的容器。
例如:```html<div class="player-container"><!-- 在这里添加其他播放器相关的元素 --></div>```3. 添加播放器控制按钮在播放器容器中,添加用于控制音乐播放的按钮。
例如,添加播放按钮、暂停按钮和上一首、下一首按钮:```html<div class="player-container"><button id="play-btn">播放</button><button id="pause-btn">暂停</button><button id="prev-btn">上一首</button><button id="next-btn">下一首</button></div>```4. 显示音乐信息在播放器容器中,添加显示音乐信息的元素。
实验十七开发简易MP3播放器(精)
Adroid移动开发
实验步骤
1、创建MP3PlayerActivity及布局文件; 2、定义相关成员变量; 3、编写搜索MP3文件的方法,读取MP3文件刷新列表; 4、开发自动播放功能; 5、开发各按钮事件;
Adroid移动开发
实验注意点
1、播放上一首和下一首时注意判断当前播放的音乐是否 已经是第一首或最后一首;
2、MediaPlayer在设置新的音乐文件前,调用reset()方 法,重置数据源;
Adroid移动开发
开始试验
Adroid移动开发
实验十七 开发简易MP3播放器
Adroid移动开发
实验目的
1、掌握使用MediaPlayer类开发音乐播放器 的基本方式;
2、综合练习MediaPlayer类播放音乐的各类 方法。Adroid移动ຫໍສະໝຸດ 发实验任务与要求任务:
使用MediaPlayer类开发MP3播
放器,包括暂停、停止、继续、
下一首、上一首等功能。
2、MediaPlayer播放结束事件:
mPlayer.setOnCompletionListener(new OnCompletionListener() { public void onCompletion(MediaPlayer arg0) {//播放完成一首之后进行下一首} }
3、查找SD卡根目录下的所有MP3文件:
播放器实验报告(3篇)
第1篇一、实验目的1. 熟悉播放器的基本原理和功能模块。
2. 掌握音频、视频文件的解码与播放技术。
3. 提高编程能力和项目实践能力。
二、实验环境1. 操作系统:Windows 102. 开发工具:Visual Studio 20193. 编程语言:C++4. 常用库:FFmpeg三、实验内容1. 播放器界面设计2. 音频、视频文件解码3. 音频、视频同步播放4. 控制功能实现四、实验步骤1. 播放器界面设计(1)创建项目,添加所需控件(2)设置控件属性,包括大小、位置、颜色等(3)添加播放按钮、暂停按钮、停止按钮等控制按钮2. 音频、视频文件解码(1)引入FFmpeg库(2)加载音频、视频文件(3)解码音频、视频数据3. 音频、视频同步播放(1)创建音频、视频播放线程(2)实现音频、视频数据同步(3)调整播放进度4. 控制功能实现(1)添加播放按钮、暂停按钮、停止按钮等事件处理函数(2)实现播放、暂停、停止等功能五、实验结果与分析1. 播放器界面设计本实验成功实现了播放器界面设计,包括播放区域、控制按钮、进度条等。
界面简洁美观,用户操作方便。
2. 音频、视频文件解码通过引入FFmpeg库,成功实现了音频、视频文件的解码。
在解码过程中,我们提取了音频、视频的采样率、码率、帧率等关键信息,为后续同步播放提供了依据。
3. 音频、视频同步播放在实现音频、视频同步播放时,我们采用了线程同步技术。
通过创建音频、视频播放线程,分别处理音频、视频数据的播放,确保了音频、视频播放的同步性。
同时,我们还实现了播放进度调整功能,方便用户实时查看和调整播放进度。
4. 控制功能实现本实验成功实现了播放、暂停、停止等功能。
用户可以通过控制按钮,轻松实现播放器的控制操作。
六、实验总结通过本次实验,我们掌握了播放器的基本原理和功能模块,熟悉了音频、视频文件的解码与播放技术。
同时,我们还提高了编程能力和项目实践能力。
以下为实验过程中总结的一些心得体会:1. 熟练掌握FFmpeg库的使用,能够实现音频、视频文件的解码与播放。
实现一个简单的音乐播放器程序
实现一个简单的音乐播放器程序随着数字音乐的普及,越来越多的人开始喜欢听音乐,并需要一个好用的音乐播放器来管理和播放音乐。
在本文中,我将介绍如何实现一个简单的音乐播放器程序。
1. 确定需求在开始编写程序之前,我们需要先确定我们的需求。
一个好的音乐播放器应该具备以下基本功能:播放、暂停、停止、上一首、下一首、列表循环、单曲循环、随机播放等。
此外,我们还可以考虑增加一些可选的高级功能,比如音量调节、歌词显示、可视化效果等。
2. 选择编程语言和开发环境选择一种熟悉的编程语言,比如Java、C#、Python等,以及一个好用的集成开发环境,比如Eclipse、vscode、PyCharm等。
在本文中,我选择使用Java语言和Eclipse开发环境。
3. 设计程序架构在开始编写程序之前,我们需要先设计程序的架构。
通常情况下,一个音乐播放器应该包含两个主要的模块:界面模块和播放模块。
其中,界面模块负责展示界面和处理用户输入,播放模块负责播放音乐和控制播放器的行为。
4. 实现界面模块首先,我们需要设计出音乐播放器的界面,并实现对应的界面代码。
在这里,我们可以使用JavaFX框架来实现,它提供了很多常用的UI组件,比如按钮、标签、文本框、进度条等。
同时,JavaFX还提供了FXML文件的支持,可以将UI和后台代码分离,使程序更加清晰易懂。
5. 实现播放模块接下来,我们需要实现播放模块。
通常情况下,我们可以使用Java内置的MediaPlayer类来实现音乐播放功能。
这个类提供了播放、暂停、停止、上一首、下一首、列表循环、单曲循环、随机播放等功能,可以满足我们的大部分需求。
同时,我们还可以通过监听器等方式来实现一些可选的高级功能,比如音量调节、歌词显示、可视化效果等。
6. 调试和优化最后,我们需要进行调试和优化,确保程序能够正常运行,并且没有明显的问题,比如歌曲播放异常、界面卡顿等。
如果有问题,我们需要及时修改代码,并重新测试,直到程序能够正常运行。
单片机音乐播放器应用 实现简单的音乐播放功能
单片机音乐播放器应用实现简单的音乐播放功能单片机音乐播放器应用音乐是人们生活中不可或缺的一部分,而在现代科技的不断发展下,单片机音乐播放器应用已经成为许多人追求的目标。
本文将介绍如何实现一个简单的单片机音乐播放器功能,让您能够轻松享受音乐的魅力。
一、硬件准备在开始之前,我们需要准备一些硬件设备,以确保音乐播放器能够正常工作。
首先,我们需要一块单片机开发板,例如STC89C52,这是一款常用的单片机开发板;其次,我们需要一个音频解码模块,例如DFPlayer Mini,他可以轻松解码并播放存储卡上的音乐文件;最后,我们还需要一个音箱或者耳机,用于输出音乐。
二、软件编程1. 搭建开发环境首先,我们需要安装MIDE-51集成开发环境,它是STC89C52单片机所使用的开发工具。
安装完成后,可以通过打开MIDE-51来创建一个新的工程。
2. 编写代码首先,我们需要在代码中包含一些必要的库文件,以便使用一些功能函数。
例如,我们可以通过以下代码片段引入DFPlayer Mini音频库文件:```c#include <DFPlayer_Mini_Mp3.h>```接下来,我们可以通过定义一些常量或变量来控制音乐的播放,例如:```cconst int playButton = 2; // 播放按钮连接到单片机的2号引脚const int nextButton = 3; // 下一首按钮连接到单片机的3号引脚const int previousButton = 4; // 上一首按钮连接到单片机的4号引脚```然后,我们可以在主循环中不断检测按钮的状态,并根据按钮的状态来控制音乐的播放:```cvoid loop() {if (digitalRead(playButton) == HIGH) { // 如果播放按钮被按下DFPlayer_Mini_Mp3.play(); // 播放音乐}if (digitalRead(nextButton) == HIGH) { // 如果下一首按钮被按下 DFPlayer_Mini_Mp3.next(); // 播放下一首音乐}if (digitalRead(previousButton) == HIGH) { // 如果上一首按钮被按下DFPlayer_Mini_Mp3.previous(); // 播放上一首音乐}}```通过上述代码,我们可以实现简单的音乐播放功能。
15.35、USB实现PC音频播放器实验
15.35、USB实现PC音频播放器实验USB实现PC音频播放器实验z意义与作用现在的智能终端已经逐步由按键+指示灯或数码管发展为触摸屏+音频输出,前面已经介绍了神舟系列STM开发板的触摸屏,本章节我们来学习一下如何使用神舟系列STM开发板的USB接口和I2S音频接口在PC侧实现一个免驱动音频声卡功能。
本实验USB工作在同步传输模式。
通过该实现使大家了解如何使用STM32的USB的同步传输模式实现即插即用的功能,以及如何使用STM32的I2S音频接口实现音频播放功能。
z实验原理在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等。
更详细的说明请参看USB HID 协议,该协议可从下载。
关于STM32的USB知识可以参考附件的《STM32 USB固件的中文资料.pdf 》和《STM32的USB详解.pdf》等文档。
本实验音频部分主要是初始化DA芯片PCM1770,设置STM32的I2S接口的参数,然后将来自USB接口的音频数据通过I2S2接口送给DA芯片PCM1770播放。
PCM1770简介:神舟系列STM开发板采用TI公司的进口原装音频DA芯片PCM1770。
PCM1770是一款具有耳机放大器的24位低功耗立体声音频DAC。
可直接驱动耳机,具有软件控制音量大小、芯片模式和模拟语音合成等功能。
该芯片的功能框图如下:PCM1770支持工业标准音频数据格式(industry-standard audio data formats),包括标准模式(standard)、I2S飞利浦标准、MSB对齐标准(left-justified)。
本次实验PCM1770为从设备模式和MSB对齐标准(left-justified)。
PCM1770的I2S共需要4信号:● SD:串行数据,用来接收2路(左右声道)时分复用通道的数据;● WS:字选(左右声道选择),从模式下作为输入;● CK:串行位时钟,从模式下作为输入。
Java综合实验-简易音乐播放器-实验报告
Java综合实验实验报告一、实验要求根据下列描述:为某音乐爱好者开发音乐管理系统,该系统可以为音乐爱好者对已有的音乐信息检索、音乐播放、音乐收藏进行管理。
(1)音乐检索:对指定音乐名称进行检索,获取音乐的基本信息。
(2)音乐播放:对已有音源的音乐进行播放音乐收藏:对喜欢的音乐进行收藏管理,记录音源的位置等;二、核心思想利用MVC模式,结合javafx和SceneBuilder开发音乐管理系统三、实验原理四、实验环境Window 11、JDK-17、Intellij IDEA、JavaFX Scene Builder 2.0五、核心代码:1.业务逻辑:①User类package prehensiveExperiment.logic;import java.util.ArrayList;import java.util.List;/*** 用户类* 这个类记录了用户信息:账号、密码以及自己维护的音乐收藏*/public class User {private String account;private String password;private List<Music> musicCollection;public User(String account, String password) {this.account = account;this.password = password;musicCollection = new ArrayList<>();}public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}/*** 获取音乐收藏* @return musicCollection*/public List<Music> getMusicCollection() {return musicCollection;}/*** 收藏歌曲* @param music*/public void addMusic(Music music){musicCollection.add(music);}/*** 取消收藏* @param music*/public void deleteMusic(Music music){musicCollection.remove(music);}@Overridepublic String toString() {return "User{" +"account='" + account + '\'' +", password='" + password + '\'' +", musicCollection=" + musicCollection +'}';}}②Music类:package prehensiveExperiment.logic;/*** 音乐类* 这个类记录了歌曲的信息:歌曲名、歌手、歌曲时长、大小、发行时间、专辑*/public class Music implements Comparable<Music>{private String name;private String singer;private String totalTime;private String size;private String startTime;private String album;public Music(String name, String singer, String totalTime, String size, String startTime, String album) { = name;this.singer = singer;this.totalTime = totalTime;this.size = size;this.startTime = startTime;this.album = album;}public String getName() {return name;}public void setName(String name) { = name;}public String getSinger() {return singer;}public void setSinger(String singer) {this.singer = singer;}public String getTotalTime() {return totalTime;}public void setTotalTime(String totalTime) {this.totalTime = totalTime;}public String getSize() {return size;}public void setSize(String size) {this.size = size;}public String getStartTime() {return startTime;}public void setStartTime(String startTime) {this.startTime = startTime;}public String getAlbum() {return album;}public void setAlbum(String album) {this.album = album;}/*** 默认按歌手排序* @param o* @return*/@Overridepublic int compareTo(Music o){return pareTo(o.singer);}@Overridepublic String toString() {return "Music{" +"name='" + name + '\'' +", singer='" + singer + '\'' +", totalTime='" + totalTime + '\'' +", size='" + size + '\'' +", startTime='" + startTime + '\'' +", album='" + album + '\'' +'}';}}③MusicSys类:package prehensiveExperiment.logic;import java.io.File;import java.io.FileNotFoundException;import java.util.ArrayList;import parator;import java.util.List;import java.util.Scanner;/*** 音乐管理系统* 这个类维护了用户音乐收藏、本地音乐以及播放器的常规操作*/public class MusicSys {private Music currentMusic;private int index;//当前播放音乐的索引值private String state;private double volume;private List<User> users;//用户private int index2;//当前登录用户的索引值private List<Music> musics;//本地音乐private static MusicSys instance = null;//单例模式/*** 构造函数* 分别调用createUser()和createMusic()录入用户和音乐信息* 播放器初始状态:默认关闭(state = OFF),如果打开默认播放第一首歌(index=0),音量调至一半(volume = 0.5)* @throws FileNotFoundException*/private MusicSys() throws FileNotFoundException {users = new ArrayList<>();musics = new ArrayList<>();createUser();createMusic();index = 0;currentMusic = musics.get(index);state = "OFF";volume = 0.5;}/*** 单一工厂* @return instance* @throws FileNotFoundException*/public static MusicSys getInstance() throws FileNotFoundException {if(instance == null)instance = new MusicSys();return instance;}/*** 这个方法通过扫描事先写好的User.txt文件,将用户信息一条条录入。
音乐播放器的实验报告
一、实验目的1. 熟悉音乐播放器的基本原理和设计方法。
2. 掌握音乐播放器软件的开发流程和关键技术。
3. 培养学生的动手实践能力和团队协作精神。
二、实验环境1. 操作系统:Windows 102. 开发工具:Java Development Kit (JDK) 1.83. 开发环境:Eclipse IDE for Java Developers4. 音乐格式:MP3、WAV等三、实验内容1. 音乐播放器功能需求分析2. 音乐播放器系统设计3. 音乐播放器软件实现4. 音乐播放器测试与优化四、实验步骤1. 功能需求分析音乐播放器应具备以下功能:(1)播放音乐:支持MP3、WAV等音乐格式;(2)播放列表:支持添加、删除、排序音乐列表;(3)音量控制:支持音量调节;(4)播放模式:支持顺序播放、随机播放、单曲循环;(5)播放进度:显示当前播放时间和总时长;(6)播放界面:简洁、美观、易用。
2. 系统设计(1)模块划分音乐播放器系统分为以下模块:①音乐播放模块:负责播放音乐、控制播放进度、音量等;②播放列表模块:负责管理音乐列表、添加、删除、排序音乐;③用户界面模块:负责显示播放界面、交互操作等。
(2)技术选型①音乐播放模块:采用Java Media Framework (JMF) 进行音乐播放;②播放列表模块:使用ArrayList存储音乐信息;③用户界面模块:采用Swing组件实现。
3. 软件实现(1)音乐播放模块①导入JMF库,创建播放器实例;②设置播放器播放源(音乐文件);③实现播放、暂停、停止、音量调节等功能;④实现播放进度显示。
(2)播放列表模块①创建播放列表类,继承ArrayList;②添加、删除、排序音乐列表;③实现音乐列表的遍历和查找。
(3)用户界面模块①设计播放界面布局,包括播放按钮、进度条、音量条等;②实现播放器与用户界面的交互操作;③实现播放器功能的调用。
4. 测试与优化(1)功能测试①测试播放音乐功能,确保支持多种音乐格式;②测试播放列表功能,确保添加、删除、排序操作正常;③测试播放模式功能,确保顺序播放、随机播放、单曲循环正常;④测试音量控制功能,确保音量调节正常;⑤测试播放进度显示功能,确保播放时间与总时长准确。
实验实训报告音乐播放器
一、实验目的1. 了解音乐播放器的基本原理和组成。
2. 掌握音乐播放器的电路设计方法。
3. 熟悉音乐播放器中常用元器件的性能和应用。
4. 提高动手能力和实际操作技能。
二、实验原理音乐播放器是一种将数字音频信号转换为模拟音频信号,并通过扬声器播放出来的设备。
其基本原理如下:1. 数字音频信号:音乐播放器接收的数字音频信号通常为MP3、WMA等格式,这些格式经过压缩处理后存储在存储介质上。
2. 数字信号解码:音乐播放器内部有一个数字信号解码器,将数字音频信号解码成模拟音频信号。
3. 模拟信号放大:解码后的模拟音频信号需要经过放大器放大,以便驱动扬声器发声。
4. 扬声器发声:放大后的模拟音频信号通过扬声器发声,实现音乐播放。
三、实验内容1. 音乐播放器电路设计2. 元器件选型与测试3. 音乐播放器组装与调试四、实验步骤1. 音乐播放器电路设计(1)确定音乐播放器功能:根据需求确定音乐播放器功能,如播放、暂停、切换曲目等。
(2)选择主控芯片:根据功能需求选择合适的主控芯片,如ESP8266、STM32等。
(3)设计电路原理图:根据主控芯片和功能需求,设计电路原理图,包括数字信号解码、模拟信号放大、按键、显示屏等模块。
(4)绘制PCB板图:根据电路原理图,绘制PCB板图,确定元器件布局和走线。
2. 元器件选型与测试(1)主控芯片:根据电路设计,选择合适的主控芯片,如ESP8266。
(2)数字信号解码芯片:根据电路设计,选择合适的数字信号解码芯片,如DAC芯片。
(3)模拟信号放大芯片:根据电路设计,选择合适的模拟信号放大芯片,如运算放大器。
(4)按键、显示屏等元器件:根据电路设计,选择合适的按键、显示屏等元器件。
(5)测试元器件:对所选元器件进行测试,确保其性能符合设计要求。
3. 音乐播放器组装与调试(1)焊接PCB板:根据PCB板图,焊接元器件,完成音乐播放器组装。
(2)调试电路:检查电路连接是否正确,调整电路参数,确保电路正常工作。
实验简单音频播放器程序实现
实验2简单音频播放器程序实现1.上机实验报告二等文 四、实验内容用 MFC 设计具有一般能播放 *mp3,*wma,*mdi,*wav,*avi,*dat 件,还有具有播放、暂停、停止、音量调节等功能。
1、 点击“打开”,添加播放资源2、 单击“播放”,开始播放3、 点击“暂停”,暂停播放;之后点击“恢复”,播放器继续播放4、 单击“终止”,音乐播放停止5、滑动音量滑块调节音量大小五、调试过程及实验结果本次作业参考了优酷上的指导视频,然后仿照编写的。
在完成此次大作业的过程中遇到了很多问题,首先音量控制就是一个难点,最初完成的版本可以运行但音量无法控制,后来添加了一个函数解决问题:void CMUSIC_PLAYER_100511217Dlg::0 nCustomdrawSlider(NMHDR* pNMHDR, LRESULT* pResult){UpdateData(true);m_vol=m_slider.GetPos()/10;SetVolu mn (m_slider.GetPos());UpdateData(false); *pResult = 0;}最终成果:过完成这个简易的音乐播放器,掌握到了MFC编程的基本方法,使自己的编程能力得到进一步的提高,学会使用DirectSound实现音频播放程序的方法。
// DDX/DDV support#un def THIS_FILEstatic char THIS_FILE[] = __FILE__;#en difHWND m_hWnd;MCI_OPEN_PARMS mciope nparms;DWORD ItemLe ngth,ltemTo;DWORD item;/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data〃{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };〃}}AFX_DATA// ClassWizard gen erated virtual fun ctio n overrides〃{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExcha nge(CDataExcha nge* pDX);//}}AFX_VIRTUAL// Impleme ntati onprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExcha nge(CDataExcha nge* pDX){CDialog::DoDataExcha nge(pDX);〃{{AFX_DATA_MAP(CAboutDlg)〃}}AFX_DATA_MAPmciSe ndComma nd(mciope nparms.wDevicelD,MCI_SETAUDIO,MCI_DGV_SETAUDIO_ VALUE|MCI_DGV_SETAUDIO_ITEM,(DWORD)(LPVOID)&m cisetvolume);return 0;} void CMyDlg::O nabout()GetDlgltem(IDC_pause)->E nableWi ndow(true);GetDlgltem(IDC_stop)->E nableWi ndow(true); }Stop();m_process.SetPos(0);KillTimer(O);// TODO: Add your con trol no tificati on han dler code here}void CMyDlg::O nCustomdrawvolslider(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your con trol no tificati on han dler code hereUpdateData(true);m_in t=m_c on trolvol.GetPos()/15;setvolume(m_c on trolvol.GetPos());UpdateData(false);*pResult = 0;}16 / 16。
实验十 简易音乐播放器
4.特别注意:我们要找到的虚拟sdcard不是上图直接可以看到的那个sdcard文件夹,请无视它。重新找到mnt文件夹并展开,真正的sdcard文件夹在这个里面。
5.然后找到合适的文件夹,将歌曲文件传进去。这里是模拟Linux内核,因此不支持直接复制粘贴的,必ห้องสมุดไป่ตู้用右上角的按钮传输(第二个,箭头进入手机的按钮图标,表示将文件传输至手机中)。
android:gravity="center">
<ImageButton
android:id="@+id/b01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00000000"
int[] musics = {R.raw.canon, R.raw.test, R.raw.xianjian};
2)设置int i = 0;此时需要播放歌曲的地方可以直接使用musics[i]来表示当前歌曲
3)原先播放按钮对应的代码,修改后如下图
mp = MediaPlayer.create(MainActivity.this, musics[i]);
try {
mp.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CMyDlg dlg。
m_pMainWnd = &dlg。
int nResponse = dlg.DoModal()。
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
void CMUSIC_PLAYER_100511217Dlg::OnCustomdrawSlider(NMHDR* pNMHDR, LRESULT* pResult)
{
UpdateData(true)。
m_vol=m_slider.GetPos()/10。
SetVolumn(m_slider.GetPos())。
// The one and only CMyApp object
CMyApp theApp。
/////////////////////////////////////////////////////////////////////////////
// CMyApp initialization
BOOL CMyApp::InitInstance()
1、点击“打开”,添加播放资源
2、单击“播放”,开始播放
3、点击“暂停”,暂停播放;之后点击“恢复”,播放器继续播放
4、单击“终止”,音乐播放停止
5、滑动音量滑块调节音量大小
五、调试过程及实验结果
本次作业参考了优酷上的指导视频,然后仿照编写的。
在完成此次大作业的过程中遇到了很多问题,首先音量控制就是一个难点,最初完成的版本可以运行但音量无法控制,后来添加了一个函数解决问题:
UpdateData(false)。
*pResult = 0。
}
最终成果:
六、总结
过完成这个简易的音乐播放器,掌握到了MFC编程的基本方法,使自己的编程能力得到进一步的提高,学会使用DirectSound实现音频播放程序的方法。
7、附录
player.cpp
// player.cpp : Defines the class behaviors for the application.
{
AfxEnableControlContainer()。
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls()。// Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic()。// Call this when linking to MFC statically
实验2简单音频播放器程序实现
1.
课程名称:多媒体技术
班级:数媒**班
实验日期:2014.3.31-4.11
小组成员:
指导教师:
实验序号:02
实验成绩:
一、简单音频播放器程序实现
二、实验目的及要求
1、掌握使用DirectSound实现音频播放程序的方法;
2、掌握创建缓冲区的方法;
3、学会播放音频数据的方法;
// CMyApp construction
CMyApp::CMyApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
/////////////////////////////////////////////////////////////////////////////
//
#include "stdafx.h"
#include "player.h"
#include "playerDlg.h"
#if#undef THIS_FILE
static char THIS_FILE[] = __FILE__。
#endif
3、了解RIFF文件格式,学会读取WAV文件的方法;
4、开发一个简单的基于MFC框架的音频播放器。
三、实验环境
本次上机实践所使用的平台和相关软件
VS2012MFC\win7
四、实验内容
用MFC设计具有一般能播放*.mp3,*.wma,*.mdi,*.wav,*.avi,*.dat等文件,还有具有播放、暂停、停止、音量调节等功能。
/////////////////////////////////////////////////////////////////////////////
// CMyApp
BEGIN_MESSAGE_MAP(CMyApp, CWinApp)
//{{AFX_MSG_MAP(CMyApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the