#include "kws.h"
#include "init.h"
#include "thread.h"
#include "myaudio.h"
#include "edit.h"
KWS::KWS(QWidget *parent) : QWidget(parent),ui(new Ui::KWS) {
ui->setupUi(this);
init(ui, &qDialog); //初始化内部控件
init_widgetButton(); //初始化窗口关闭、最小化按钮
init_dict(); //初始化字典
init_dialog();
ui->pushButton_2->installEventFilter(this);
ui->horizontalSlider->installEventFilter(this);
connect(ui->closeButton, SIGNAL(clicked()), this, SLOT(windowclose()) ); //窗口关闭
connect(ui->minButton, SIGNAL(clicked()), this, SLOT(windowmin())); //窗口最小化
player = new QMediaPlayer();
connect(ui->horizontalSlider, SIGNAL(sliderMoved(int)), this, SLOT(setPosition(int)));
connect(ui->horizontalSlider_2,SIGNAL(sliderMoved(int)), this, SLOT(setVoice(int)));
connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(positionChanged(qint64)));
connect(player, SIGNAL(durationChanged(qint64)), this, SLOT(durationChanged(qint64)));
connect(player, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(handlePlayerStateChanged(QMediaPlayer::State)));
}
KWS::~KWS(){
delete ui;
}
//播放器模块
void KWS::on_pushButton_clicked(){ //提取音频的mfcc参数,并初始化播放器
audio_path = QFileDialog::getOpenFileName(this,"open this document",QDir::currentPath(),"allfiles(*.*)");
if(audio_path != ""){
ui->lineEdit->setText(audio_path);
player->setMedia(QUrl::fromLocalFile(audio_path)); //初始化播放器
ui->horizontalSlider->setEnabled(true);
ui->horizontalSlider_2->setEnabled(true);
ui->horizontalSlider->setMouseTracking(true);
ui->pushButton_2->setEnabled(true);
}
}
void KWS::on_pushButton_2_clicked(){ //播放和暂停
if(ok){
player->play();
ok = false;
}else{
player->pause();
ok = true;
}
}
bool KWS::eventFilter(QObject *obj, QEvent *e){
if(obj == ui->pushButton_2){
QIcon icon;
QPixmap pixmap1;
if(e->type() == QEvent::Enter){
if(ui->pushButton_2->whatsThis() == "pause")
pixmap1.load(":/image/play2.png");
else
pixmap1.load(":/image/pause2.png");
icon.addPixmap(pixmap1);
ui->pushButton_2->setIcon(icon);
ui->pushButton_2->setIconSize(QSize(40,40));
}
if(e->type() == QEvent::Leave){
if(ui->pushButton_2->whatsThis() == "play")
pixmap1.load(":/image/pause1.png");
else
pixmap1.load(":/image/play1.png");
icon.addPixmap(pixmap1);
ui->pushButton_2->setIcon(icon);
ui->pushButton_2->setIconSize(QSize(40,40));
}
}
if(obj == ui->horizontalSlider){
if(e->type() == QEvent::MouseButtonPress){
QMouseEvent *mevent;
mevent = static_cast<QMouseEvent *>(e);
qint64 position = mevent->pos().x()/701.0 * durat;
setPosition(position);
}
}
return QWidget::eventFilter(obj, e);
}
void KWS::positionChanged(qint64 position){ //监听当前播放时长是否发生变化
ui->horizontalSlider->setValue(position);
int seconds = (position/1000) % 60;
int minutes = (position/60000) % 60;
int hours = (position/3600000) % 24;
QTime time(hours, minutes,seconds);
ui->label_2->setText(time.toString());
}
void KWS::durationChanged(qint64 duration){ //监听音频总时长是否发生变化
ui->horizontalSlider->setRange(0, duration);
int seconds = (duration/1000) % 60;
int minutes = (duration/60000) % 60;
int hours = (duration/3600000) % 24;
QTime time(hours, minutes,seconds);
ui->label_3->setText(time.toString());
durat = duration;
}
void KWS::handleSliderPressed(){
}
void KWS::handlePlayerStateChanged(QMediaPlayer::State state){ //监听播放器的状态并进行相应的操作
QIcon icon;
switch (state) {
case QMediaPlayer::StoppedState:{
QPixmap pixmap2(":/image/play1.png");
icon.addPixmap(pixmap2);
ui->pushButton_2->setIcon(icon);
ui->pushButton_2->setWhatsThis("pause");
ok = true;
break;
}
case QMediaPlayer::PausedState:{
QPixmap pixmap2(":/image/play1.png");
icon.addPixmap(pixmap2);
ui->pushButton_2->setIcon(icon);
ui->pushButton_2->setWhatsThis("pause");
break;
}
case QMediaPlayer::PlayingState:{
QPixmap pixmap2(":/image/pause1.png");
icon.addPixmap(pixmap2);
ui->pushButton_2->setIcon(icon);
ui->pushButton_2->setWhatsThis("play");
break;
}
default:
break;
}
}
void KWS::setPosition(int position){ //设置播放当前时间点的音频
player->setPosition(position);
}
void KWS::setVoice(int position){ //播放器音量控制
player->setVolume(position);
QPixmap voice;
if(position == 0)
voice.load(":/image/volume0.png");
if(position > 0 && position <= 30)
voice.load(":/image/volume1.png");
if(position > 30 && position <= 70)
voice.load(":/image/volume2.png");
if(position > 70)
voice.load(":/image/volume3.png");
QPixmap scaledPixmap = voice.scaled(QSize(27,27),Qt::KeepAspectRatio);
ui->label_6->setPixmap(scaledPixmap);
}
//写入待检索拼音模块
void KWS::on_pushButton_5_clicked(){ //写入拼音并提交到listWidget
QString input = ui->lineEdit_2->text();
if(input == ""){
QMessageBox::information(this,"提示","不可输入空字符串!!!",QMessageBox::Ok);
return;
}
if(!isInDict(input)){ //判断输入是否合法
QMessageBox::information(this,"提示","请输入合法的拼音!!!",QMessageBox::Ok);
return;
}
QWidget *wgtContainter = new QWidget;
QHBoxLayout *hLayout = new QHBoxLayout(wgtContainter);
QToolButton *pDeleteBtn = new QToolButton;
QPixmap closePix = style()->standardPixmap(QStyle::SP_TitleBarCloseButton);
pDeleteBtn->setIcon(closePix);
connect(pDeleteBtn,SIGNAL(clicked()),this,SLOT(handlepDeleteBtnClick()));
QLabel *filename = new QLabel(input);
filename->setStyleSheet("font-family:微软雅黑");
pDeleteBtn->resize(45,20);
pDeleteBtn->setCursor(Qt::PointingHandCursor);
pDeleteBtn->setWhatsThis(QString::number(ui->listWidget->count(),10));
hLayout->addWidget(filename);
hLayout->addStretch(1);
hLayout->addWidget(pDeleteBtn);
hLayout->setContentsMargins(5,0,0,5);
wgtContainter->setLayout(hLayout);
wgtContainter->show();
QListWidgetItem *fileItem = new QListWidgetItem(ui->listWidget);
ui->listWidget->setItemWidget(fileItem,wgtContainter);
fileItem->setSizeHint(QSize(100,40));
ui->listWidget->item(ui->listWidget->count()-1)->setWhatsThis(input);
ui->lineEdit_2->setText("");
}
bool KWS::isInDict(QString input){
QStringList inputlist = input.split(" ");
int i,j;
for(i=0; i<inputlist.length(); i++){
for(j=0; j<dict.size(); j++)
if(inputlist[i] == dict[j])
break;
if(j >= dict.size())
return false;
}
return true;
}
void KWS::handlepDeleteBtnClick(){ //删除拼音操作
QToolButton *button = (QToolButton*)sender();
int m = button->whatsThis().toInt();
QList<QToolButton *> pDelbtn = ui->listWidget->findChildren<QToolButton *>();
for(int q=m+1; q<pDelbtn.length(); q++){
int n = pDelbtn[q]->whatsThis().toInt();
pDelbtn[q]->setWhatsThis(QString::number(n-1,10));
}
for(int i=m; i<ui->listWidget->count()-1; i++){
dist[i].clear();
for(int j=0; j<dist[i+1].size(); j++)
dist[i].push_back(dist[i+1][j
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
KWS-master.zip (42个子文件)
KWS-master
Project.rc 54B
KWS.pro 1KB
thread.h 311B
myaudio.cpp 5KB
qss.qrc 586B
myaudio.h 714B
image
voice2.png 16KB
background.jpg 19KB
volume3.png 22KB
volume2.png 4KB
play2.png 435KB
pause1.png 26KB
loading.gif 4KB
voice1.png 14KB
speaker1.png 5KB
volume1.png 21KB
add.png 5KB
play.png 9KB
voice3.png 23KB
delete.png 6KB
pause2.png 409KB
pause.png 10KB
speaker.png 454B
Project.ico 32KB
play1.png 13KB
dialog.gif 17KB
volume0.png 21KB
style.qss 72B
init.cpp 4KB
KWS.pro.user 18KB
edit.cpp 927B
mydialog.cpp 1KB
kws.h 3KB
main.cpp 560B
thread.cpp 280B
style
style.qss 4KB
main.h 726B
init.h 509B
mydialog.h 384B
kws.cpp 28KB
kws.ui 15KB
edit.h 109B
共 42 条
- 1
资源评论
博士僧小星
- 粉丝: 1922
- 资源: 5884
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功