私は Qt の初心者です。(C++も同様)
QAudioInput クラス リファレンスの例を見て、コンパイルに合格するために少し変更を加えました (私のコードと例の違いはすべて、コンパイルが最初に失敗したためです)。
私はインターネットでたくさん調べましたが、まだ何も得られませんでした。そして例http://doc.qt.io/archives/qt-4.7/multimedia-audioinput-audioinput-h.html は機能します。そして、私はそれを注意深く読みましたが、ファイルに保存することと、それをバッファに保存すること以外に違いはありません。
それで、私を助けてください 1. QAudioInput: IOError を引き起こす理由は何ですか (IO デバイスに問題があることは知っていますが、何が問題なのですか?)
コードは次のとおりです。
//audioprocess.h
#ifndef AUDIOPROCESS_H
#define AUDIOPROCESS_H
#include <QAudioInput>
#include <QFile>
#include <QDebug>
#include <QTimer>
#include <QObject>
class audioprocess : public QObject
{
Q_OBJECT
public:
void startRecording();
private slots:
void stopRecording();
private:
QFile outputFile; // class member.
QAudioInput *audioInput; // class member.
};
#endif // AUDIOPROCESS_H
//----------------------------------------------
//audioprocess.cpp
#include "audioprocess.h"
void audioprocess::startRecording()
{
outputFile.setFileName("/audio_qt.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);
}
audioInput = new QAudioInput(format,reinterpret_cast<QObject*>(this));
QTimer::singleShot(100, reinterpret_cast<QObject*>(this), SLOT(stopRecording()));
audioInput->start(&outputFile);
// Records audio for 3000ms
}
void audioprocess::stopRecording()
{
audioInput->stop();
outputFile.close();
delete audioInput;
}
//--------------------------------------------------------
//main.cpp
#include <QtGui/QApplication>
#include "audioprocess.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
audioprocess audiorecord;
audiorecord.startRecording();
return a.exec();
}