2013-11-27 6 views
0

QAudioRecorder을 사용하는 데 문제가있어서 QMainWindow을 사용하지 않았습니다.QMainWindow를 사용하지 않고 오디오를 녹음 할 수 없습니다.

int main(int argc, char *argv[]){ 
    QAudioRecorder q; 
    q.setAudioInput(q.audioInputs()[0]); 
    q.setOutputLocation(QUrl::fromLocalFile("simon.amr")); 
    q.record(); 
    Sleep(10000); 
} 

이 작품 반면 :

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

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

QAudioRecorder q; 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent) 
{ 
    std::cout << "DEFAULT: " << q.defaultAudioInput().toStdString() << std::endl; 
    std::cout << "List: " << q.audioInputs().join(',').toStdString() << std::endl; 
    std::cout << "STATUS 0: " << q.status() << std::endl; 
    std::cout << "Location: " << QUrl::fromLocalFile("simon.amr").path().toStdString() << std::endl; 
    q.setAudioInput(q.audioInputs()[0]); 
    q.setOutputLocation(QUrl::fromLocalFile("simon.amr")); 
    q.record(); 

    std::cout << "STATUS 1: " << q.status() << std::endl; 
} 

MainWindow::~MainWindow() 
{ 
    std::cout << "STATUS 2: " << q.status() << std::endl; 
} 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    MainWindow recorder; 
    recorder.show(); 

    return app.exec(); 
} 

어떻게 QMainWindow없이 QAudioRecorder을 사용할 수 있습니다 그것은 여기에이 스크립트를 실행 한 후 가장 일반적인 미디어 플레이어로 재생할 수 없습니다 0 바이트로 파일을 만들 것인가? 내가 뭔가 잘못하고 있는거야?

+3

'QAudioRecorder'는 이벤트 루프가 필요하기 때문에'QCoreApplication' 또는'QApplication'을 사용해야합니다. – Nazar554

+0

: o 그럴 수도 있습니다. 내가 그것을 밖으로 시도하자. – swtdrgn

답변

2

QAudioRecorder의 내부 상태는 신호와 슬롯을 통해 관리됩니다. 이렇게하려면 실행중인 이벤트 루프가 필요합니다.

QCoreApplication은 콘솔 응용 프로그램에 사용해야합니다.

QApplication은 GUI 응용 프로그램에 사용해야합니다.

위 예제에서 MainWindow는 필요하지 않습니다. 마술이 발생하는 곳은 app.exec()입니다.

0
int main(int argc, char *argv[]) 
{ 
    QCoreApplication app(argc, argv); 

    QAudioRecorder q; 
    q.setAudioInput(q.audioInputs()[0]);  
    q.setOutputLocation(QUrl::fromLocalFile("simon.amr"));  
    q.record(); 

    return app.exec(); 
} 

qt 이벤트 루프가 필요합니다. Sleep은 QCoreApplication이 제공하는 이벤트 및 신호 처리를 제공하지 않습니다.

Qt 핵심 기술자이므로 Qt를 읽으십시오. 그렇지 않으면 멀리 오지 않을 것입니다.

프로젝트가 성공적으로 완료되었습니다.