写录音程序出现“using null input device, none available”无法录音,新手求教

lilyjoke777 2013-04-06 08:41:40
写录音程序出现“using null input device, none available”无法录音,新手求教
代码如下
widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
void Widget::stopRecording()
{
audio->stop();
outputFile.close();
delete audio;
cout <<"record end!" << endl;
}

void Widget::on_record_clicked() //recod
{
outputFile.setFileName("/test.raw");
outputFile.open( QIODevice::WriteOnly | QIODevice::Truncate );
QAudioFormat format;
// set up the format you want, eg.
format.setFrequency(8000);
format.setChannels(1);
format.setSampleSize(8);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::UnSignedInt);
QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice();
if (!info.isFormatSupported(format)) {
qWarning()<<"default format not supported try to use nearest";
format = info.nearestFormat(format);
}
audio = new QAudioInput(format, this);
QTimer::singleShot(10000, this, SLOT(stopRecording()));
audio->start(&outputFile);
// Records audio for 10000ms
cout <<"record begin!" << endl;
}
void Widget::on_play_clicked() //play
{
inputFile.setFileName("/test.wav");
inputFile.open(QIODevice::ReadOnly);

QAudioFormat format2;
// Set up the format, eg.
format2.setFrequency(8000);
format2.setChannels(1);
format2.setSampleSize(8);
format2.setCodec("audio/pcm");
format2.setByteOrder(QAudioFormat::LittleEndian);
format2.setSampleType(QAudioFormat::UnSignedInt);
QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
if (!info.isFormatSupported(format2)) {
qWarning()<<"raw audio format not supported by backend, cannot play audio.";
// return;
}
audioOutput = new QAudioOutput(format2, this);
connect(audioOutput,SIGNAL(stateChanged(QAudio::State)),SLOT(finishedPlaying(QAudio::State)));
audioOutput->start(&inputFile);
cout <<"play begin!" << endl;

}
void Widget::finishedPlaying(QAudio::State state) //finish playing
{
if(state == QAudio::IdleState) {
audioOutput->stop();
inputFile.close();
delete audioOutput;
}
cout << "play end!" << endl;
}

Widget::~Widget() //finish porgm
{
delete ui;
}


widget.h


#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QtGui>
#include <QAudioInput> //QT += multimedia?
#include <QAudioOutput>
#include <iostream>
using namespace std;

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
Q_OBJECT

public:
explicit Widget(QWidget *parent = 0);
~Widget();

private slots:
void on_play_clicked();
void on_record_clicked();
void finishedPlaying(QAudio::State state);
void stopRecording();

//void on_pushButton_clicked();

private:
Ui::Widget *ui;
QFile outputFile; // class member.
QAudioInput* audio; // class member.
QAudioOutput* audioOutput;
QFile inputFile; // class member.
};

#endif // WIDGET_H


编译结果无错但是出现
default format not supported try to use nearest
record begin
record end

点击开始播放
出现
play begin
play end
但是存储的test文件为0kb


若把播放路径换成根目录下本来就有的音乐路径,也播放不出来。
新手求解答。


...全文
732 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liacat 2013-08-22
  • 打赏
  • 举报
回复
这个问题我也遇上了,按以下步骤解决: 1 下载alsa的开发包并安装 先查看内核中alsa driver版本:alsactl -v. 再到官方网站www.alsa-project.org/下载对应的开发包 开发包在ftp://ftp.alsa-project.org/pub/lib/ 解压后./configure make install直接就可以安装上 2 重新编译qt库, ./configure -multimedia -v > out.txt configure完之后在文件out.txt中查看有无这一行字Alsa support ........... yes 如果为yes,则步骤1中的开发包装成功了的,如果为no,则步骤1可能有问题 楼主出现的问题是因为没有执行步骤1. 之后make make install都是一样的 各位好运
thebestfei 2013-05-21
  • 打赏
  • 举报
回复
跟楼主一样的问题,不知道有木有人知道 啊
雲天之巔 2013-04-07
  • 打赏
  • 举报
回复
就是驱动没安装 Qt貌似是通过调用oss来实现的 所以需要安装OSS。
lilyjoke777 2013-04-07
  • 打赏
  • 举报
回复
引用 2 楼 qq214517703 的回复:
就是驱动没安装 Qt貌似是通过调用oss来实现的 所以需要安装OSS。
新手再求问,如果是驱动没安装,是什么的驱动?声卡的驱动吗?那么直接播放根目录下的歌曲为什么能放出声音来呢?
lilyjoke777 2013-04-06
  • 打赏
  • 举报
回复
修改程序检查了,说是没有可用的设备,怎么解决?是不是声卡驱动没装?但是如直接通过板子播放音乐是可以发声的???

21,464

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧