|
5Qter豆
学校任务要做一个音频分析的软件,我是学语音音频的所以算法没问题,但是cpp和qt却是新手,求各位大神帮忙
问题是这样的,我想用QAudioOutput播放一个本地音乐文件。我但是我发现把播放的相关代码写到main里就没事。
但是写到其他函数里只要一调用播放的start函数程序就会崩溃。
求助!
下面是代码
main.cpp- #include "MyWidget.h"
- #include<QApplication>
- int main(int argc,char**argv)
- {
- QApplication app(argc,argv);
- MyWidget w;
- w.show();
- #if 0
- QFile inputFile;
- inputFile.setFileName("c:\\CBenhanced_CH01F049-white+5dB.raw");
- inputFile.open(QIODevice::ReadOnly);
- QAudioFormat format;
- format.setSampleRate(8000);
- format.setSampleSize(16);
- format.setSampleType(QAudioFormat::SignedInt);
- format.setCodec("audio/pcm");
- format.setByteOrder(QAudioFormat::LittleEndian);
- format.setChannelCount(1);
- format.setSampleType(QAudioFormat::UnSignedInt);
- QAudioOutput* audio = new QAudioOutput(format);
- #endif
- // connect(audio, SIGNAL(stateChanged(QAudio::State)), this, SLOT(handleStateChanged(QAudio::State)));
- // audio->start(&inputFile);
- return app.exec();
- }
复制代码 MyWidget.cpp- #include "MyWidget.h"
- #include<QApplication>
- #include<QLayout>
- #include<QPushButton>
- #include<QGroupBox>
- #include<QFileDialog>
- #include<QMainWindow>
- #include <QAudioOutput>
- #include <QAudioFormat>
- #include <QFile>
- #include<QAudio>
- #include<QDebug>
- MyWidget::MyWidget(QWidget *parent) :
- QWidget(parent)
- {
- //UI布局设计
- QGridLayout* layoutmain=new QGridLayout(this);
- QVBoxLayout* layoutleft,*layoutright;
- QPushButton *button1,*button2;
- QGroupBox *groupboxleft,*groupboxright;
- layoutmain->addWidget(groupboxleft=new QGroupBox("语谱图"),0,0,1,2);
- layoutmain->addWidget(groupboxright=new QGroupBox("选项"),0,2,1,1);
- groupboxleft->setLayout(layoutleft=new QVBoxLayout);
- groupboxright->setLayout(layoutright=new QVBoxLayout);
- layoutleft->addWidget(button1=new QPushButton("button1"));
- layoutright->addWidget(button2=new QPushButton("button2"));
- //slots函数
- connect(button1,SIGNAL(clicked()),this,SLOT(AddFiles()));
- connect(button2,SIGNAL(clicked()),this,SLOT(Playfiles()));
- }
复制代码 AddFiles.cpp- #include"MyWidget.h"
- #include<QApplication>
- #include<QWidget>
- #include<QString>
- #include<QFileDialog>
- #include<QDebug>
- #include <QAudioOutput>
- #include <QAudioFormat>
- #include <QFile>
- #include<QAudio>
- #include<QCoreApplication>
- #include<QApplication>
- void MyWidget::AddFiles()
- {
- //可以同时打开多个音频文件
- QString filename = QFileDialog::getOpenFileName(this, tr("打开音乐文件"));
- // QFile file(filename);
- QFile file("c:\\CBenhanced_CH01F049-white+5dB.raw");
- if(!file.open(QFile::ReadOnly))
- {
- qDebug() << "open file error";
- exit(0);
- }
- }
- void MyWidget::Playfiles()
- {
- /*
- * qDebug() << format.sampleRate();
- qDebug() << format.sampleSize();
- qDebug() << format.sampleType();
- qDebug() << format.codec();
- qDebug() << format.byteOrder();
- qDebug() << format.channelCount();
- 8000
- 8
- SignedInt
- "audio/pcm"
- LittleEndian
- 1
- */
- QFile inputFile;
- inputFile.setFileName("c:\\CBenhanced_CH01F049-white+5dB.raw");
- inputFile.open(QIODevice::ReadOnly);
- QAudioFormat format;
- format.setSampleRate(8000);
- format.setSampleSize(16);
- format.setSampleType(QAudioFormat::SignedInt);
- format.setCodec("audio/pcm");
- format.setByteOrder(QAudioFormat::LittleEndian);
- format.setChannelCount(1);
- format.setSampleType(QAudioFormat::UnSignedInt);
- QAudioOutput* audio = new QAudioOutput(format, this);
- // connect(audio, SIGNAL(stateChanged(QAudio::State)), this, SLOT(handleStateChanged(QAudio::State)));
- audio->start(&inputFile);
- }
复制代码 MyWidget.h- #ifndef MYWIDGET_H
- #define MYWIDGET_H
- #include <QWidget>
- #include<QAudioInput>
- #include<QAudioOutput>
- #include<QFile>
- class MyWidget : public QWidget
- {
- Q_OBJECT
- public:
- explicit MyWidget(QWidget *parent = 0);
- signals:
- private slots:
- void AddFiles();
- void Playfiles();
- private:
- QFile file;
- };
- #endif // MYWIDGET_H
复制代码 |
最佳答案
查看完整内容
这样直接贴代码,很少有人可以一眼看出来哪里的问题。建议先把程序简化,从最简单的功能开始测试,然后再一点一点添加功能,看是哪里出错了。现在看来应该是程序有问题。
|