--- a/qtmobility/examples/audiorecorder/audiorecorder.cpp Fri Apr 16 15:51:22 2010 +0300
+++ b/qtmobility/examples/audiorecorder/audiorecorder.cpp Mon May 03 13:18:40 2010 +0300
@@ -54,11 +54,14 @@
audiosource = new QAudioCaptureSource;
capture = new QMediaRecorder(audiosource);
- QAudioEncoderSettings audioSettings;
- audioSettings.setQuality(QtMedia::LowQuality);
- audioSettings.setEncodingMode(QtMedia::ConstantQualityEncoding);
- audioSettings.setCodec(capture->supportedAudioCodecs().first());
- capture->setEncodingSettings(audioSettings,QVideoEncoderSettings(),capture->supportedContainers().first());
+ if (capture->supportedAudioCodecs().size() > 0) {
+ QAudioEncoderSettings audioSettings;
+ audioSettings.setQuality(QtMedia::LowQuality);
+ audioSettings.setEncodingMode(QtMedia::ConstantQualityEncoding);
+ audioSettings.setCodec(capture->supportedAudioCodecs().first());
+ capture->setEncodingSettings(audioSettings,QVideoEncoderSettings(),
+ capture->supportedContainers().first());
+ }
// set a default file
#ifdef Q_OS_SYMBIAN
@@ -68,27 +71,34 @@
#endif
QWidget *window = new QWidget;
+ window->setMinimumSize(320,240);
+ window->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);
+
QGridLayout* layout = new QGridLayout;
QLabel* deviceLabel = new QLabel;
- deviceLabel->setText("Devices");
+ deviceLabel->setText(tr("Audio Device"));
deviceBox = new QComboBox(this);
- deviceBox->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
+ deviceBox->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Fixed);
+ deviceBox->setMinimumSize(200,10);
QLabel* containerLabel = new QLabel;
- containerLabel->setText("Container");
+ containerLabel->setText(tr("File Container"));
containersBox = new QComboBox(this);
- containersBox->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
+ containersBox->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Fixed);
+ containersBox->setMinimumSize(200,10);
QLabel* codecLabel = new QLabel;
- codecLabel->setText("Codec");
+ codecLabel->setText(tr("Audio Codec"));
codecsBox = new QComboBox(this);
- codecsBox->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
+ codecsBox->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Fixed);
+ codecsBox->setMinimumSize(200,10);
QLabel* qualityLabel = new QLabel;
- qualityLabel->setText("Quality");
+ qualityLabel->setText(tr("Audio Quality"));
qualityBox = new QComboBox(this);
- qualityBox->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
+ qualityBox->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Fixed);
+ qualityBox->setMinimumSize(200,10);
QList<QString> inputs = audiosource->audioInputs();
for(int i = 0; i < inputs.size(); i++)
@@ -102,12 +112,13 @@
for(int i = 0; i < containers.count(); i++)
containersBox->addItem(containers.at(i));
- qualityBox->addItem("Low");
- qualityBox->addItem("Medium");
- qualityBox->addItem("High");
+ qualityBox->addItem(tr("Low"));
+ qualityBox->addItem(tr("Medium"));
+ qualityBox->addItem(tr("High"));
connect(capture, SIGNAL(durationChanged(qint64)), this, SLOT(updateProgress(qint64)));
connect(capture, SIGNAL(stateChanged(QMediaRecorder::State)), this, SLOT(stateChanged(QMediaRecorder::State)));
+ connect(capture, SIGNAL(error(QMediaRecorder::Error)), this, SLOT(errorChanged(QMediaRecorder::Error)));
layout->addWidget(deviceLabel,0,0,Qt::AlignHCenter);
connect(deviceBox,SIGNAL(activated(int)),SLOT(deviceChanged(int)));
@@ -115,29 +126,39 @@
layout->addWidget(containerLabel,1,0,Qt::AlignHCenter);
connect(containersBox,SIGNAL(activated(int)),SLOT(containerChanged(int)));
- layout->addWidget(containersBox,1,1,Qt::AlignLeft);
+ layout->addWidget(containersBox,1,1,1,3,Qt::AlignLeft);
- layout->addWidget(codecLabel,1,2,Qt::AlignHCenter);
+ layout->addWidget(codecLabel,2,0,Qt::AlignHCenter);
connect(codecsBox,SIGNAL(activated(int)),SLOT(codecChanged(int)));
- layout->addWidget(codecsBox,1,3,Qt::AlignLeft);
+ layout->addWidget(codecsBox,2,1,1,3,Qt::AlignLeft);
- layout->addWidget(qualityLabel,2,0,Qt::AlignHCenter);
+ layout->addWidget(qualityLabel,3,0,Qt::AlignHCenter);
connect(qualityBox,SIGNAL(activated(int)),SLOT(qualityChanged(int)));
- layout->addWidget(qualityBox,2,1,Qt::AlignLeft);
+ layout->addWidget(qualityBox,3,1,1,3,Qt::AlignLeft);
fileButton = new QPushButton(this);
fileButton->setText(tr("Output File"));
connect(fileButton,SIGNAL(clicked()),SLOT(selectOutputFile()));
- layout->addWidget(fileButton,3,0,Qt::AlignHCenter);
+ layout->addWidget(fileButton,4,0,Qt::AlignHCenter);
button = new QPushButton(this);
button->setText(tr("Record"));
connect(button,SIGNAL(clicked()),SLOT(toggleRecord()));
- layout->addWidget(button,3,1,Qt::AlignHCenter);
+ layout->addWidget(button,4,1,Qt::AlignHCenter);
+
+ QLabel* durationLabel = new QLabel;
+ durationLabel->setText(tr("Duration"));
+ layout->addWidget(durationLabel,4,2,Qt::AlignRight);
recTime = new QLabel;
- recTime->setText("0 sec");
- layout->addWidget(recTime,4,0,Qt::AlignHCenter);
+ layout->addWidget(recTime,4,3,Qt::AlignLeft);
+
+ statusLabel = new QLabel;
+ statusLabel->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Fixed);
+ statusLabel->setMinimumSize(270,10);
+ statusLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);
+ statusLabel->setLineWidth(1);
+ layout->addWidget(statusLabel,5,0,1,4,Qt::AlignHCenter);
window->setLayout(layout);
setCentralWidget(window);
@@ -156,13 +177,26 @@
{
currentTime = pos;
if(currentTime == 0) currentTime = 1;
- QString text = QString("%1 secs").arg(currentTime/1000);
+ QString text = QString("%1").arg(currentTime/1000);
recTime->setText(text);
}
void AudioRecorder::stateChanged(QMediaRecorder::State state)
{
- Q_UNUSED(state)
+ if (capture->error() != QMediaRecorder::NoError)
+ return;
+
+ switch(state) {
+ case QMediaRecorder::RecordingState: {
+ statusLabel->setText(tr("Recording"));
+ button->setText(tr("Stop"));
+ break;
+ }
+ default: {
+ statusLabel->setText(tr("Stopped"));
+ button->setText(tr("Record"));
+ }
+ }
}
void AudioRecorder::deviceChanged(int idx)
@@ -186,12 +220,15 @@
void AudioRecorder::qualityChanged(int idx)
{
QAudioEncoderSettings settings = capture->audioSettings();
- if(qualityBox->itemText(idx).compare("Low") == 0) {
- settings.setQuality(QtMedia::LowQuality);
- } else if(qualityBox->itemText(idx).compare("Medium") == 0) {
- settings.setQuality(QtMedia::NormalQuality);
- } else if(qualityBox->itemText(idx).compare("High") == 0) {
- settings.setQuality(QtMedia::HighQuality);
+ switch(idx) {
+ case 0:
+ settings.setQuality(QtMedia::LowQuality);
+ break;
+ case 1:
+ settings.setQuality(QtMedia::NormalQuality);
+ break;
+ default:
+ settings.setQuality(QtMedia::HighQuality);
}
capture->setEncodingSettings(settings);
}
@@ -199,15 +236,12 @@
void AudioRecorder::toggleRecord()
{
if(!active) {
- recTime->setText("0 sec");
+ recTime->setText("0");
currentTime = 0;
- capture->record();
-
- button->setText(tr("Stop"));
+ capture->record();
active = true;
} else {
- capture->stop();
- button->setText(tr("Record"));
+ capture->stop();
active = false;
}
}
@@ -225,3 +259,12 @@
if(fileNames.size() > 0)
capture->setOutputLocation(QUrl(fileNames.first()));
}
+
+void AudioRecorder::errorChanged(QMediaRecorder::Error err)
+{
+ Q_UNUSED(err)
+
+ statusLabel->setText(capture->errorString());
+}
+
+