Qtのfreshgirlです。 (同様にC++)オーディオ入力の例が機能しません - QAudioInput:IOError
私はQAudioInputクラスの参照からの例を見て、コンパイルを渡すために、私は(コンパイルの最初に失敗したので、あなたが例に私のコードから見る全ての差がある)少し変更を行いました。
私はインターネットで多くを見つめて、まだ何も得ていません。そして、http://doc.qt.io/archives/qt-4.7/multimedia-audioinput-audioinput-h.html の例が機能します。そして私は注意深く読んでいます。私がファイルに保存することを除いて、そしてバッファに保存すること以外は何も変わりません。
QAudioInputを引き起こす原因は何ですか?IOError(IOデバイスに問題がありますが、何が問題なのですか?) 2、どのようにコードを動作させることができますか?ここで
はコードです:
//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();
}
ありがとう、それはまさに問題です。私は生成されたファイルのパスの形式を知らなかったので、十分な注意を払っていませんでした。しかし、もう少し小さな疑問があります。もし私がskypeのような最終的なプログラムを作ってみたいのであれば、ユーザーは同時に話して聞いています - これにはマルチスレッドプログラミングが必要ですか? – Tiina
Qtではこれを行うためにマルチスレッドは必要ありません。 QAudioInputのreadyRead信号を接続してサウンドを受信し、QAudioOutputに書き込むだけでサウンドを送信できます。これを管理するQtライブラリについては、QXmpp(http://code.google.com/p/qxmpp/)をご覧ください。それが正しい場合は、回答を受け入れてください:-) –