Hi all, i am trying to record,stop and play an audio file.What i am expecting is:when i click on the record button the slider should start moving showing the time duration and when i click on the stop button the slider should stop as required.
This is my code and what i had tried so far:
main.qml: import QtQuick 1.0
import com.nokia.symbian 1.0
import Qt 4.7
Page {
id: mainPage
Button{
id: rec
x: 0
y: 440
width: 93
height: 50
text: "Record"
anchors.bottomMargin: 210
anchors.leftMargin: 0
onClicked: {
StringHelper.record();
}
}
Button{
id: b
x: 98
y: 440
width: 86
height: 50
text: "Pause"
anchors.bottomMargin: 210
anchors.leftMargin: 0
onClicked: {
StringHelper.pause();
}
}
Button{
id: stp
x: 188
y: 440
width: 82
height: 50
text: "Stop"
anchors.bottomMargin: 210
anchors.leftMargin: 30
onClicked: {
StringHelper.stop()
}
}
Button{
id: ply
x: 272
y: 440
width: 89
height: 50
text: "Play"
anchors.bottomMargin: 210
anchors.leftMargin: 25
onClicked: {
StringHelper.play()
}
}
Button{
id: exit
x: 295
y: 22
text: "Exit"
MouseArea {id: mouseArea6;
anchors.fill: parent
onClicked: {Qt.quit();
}
}
}
TextEdit {
id: text
x: 82
y: 22
width: 142
height: 30
color: "#1339f5"
text: qsTr("Voice Recorder")
font.family: "Times New Roman"
textFormat: TextEdit.RichText
font.pixelSize: 30
}
Image {
id: image
x: 0
y: 115
width: 360
height: 306
source: "img.jpg"
}
Slider {
id: slider
x: 0
y: 57
width: 360
height: 59
orientation: 1
stepSize: 1
minimumValue: 0
maximumValue: 30
valueIndicatorVisible: true
value: StringHelper.sliderValue
}
}
stringhelper.h:
#include <QObject>
#include <QAudioCaptureSource>
#include <QMediaRecorder>
class StringHelper : public QObject
{
Q_OBJECT
Q_PROPERTY (double sliderValue READ sliderValue WRITE setSliderValue NOTIFY sliderValueChanged)
public:
StringHelper();
~StringHelper();
inline double sliderValue() const {return m_sliderValue;}
public slots:
void stop();
void play();
void record();
QUrl generateAudioFilePath();
void pause();
void setSliderValue(double);
signals:
void sliderValueChanged(double newValue);
private:
QAudioCaptureSource *audioSource;
QMediaRecorder *capture;
bool active;
double m_sliderValue;
};
#endif // STRINGHELPER_H
stringhelper.cpp:
#include "stringhelper.h
#include<QSlider>
#include<QMediaPlayer>
#include<QDir>
StringHelper::StringHelper()
{
audioSource = new QAudioCaptureSource();
capture = new QMediaRecorder(audioSource);
QAudioEncoderSettings es;
es.setCodec("audio/mp3");
es.setSampleRate(96000);
capture->setEncodingSettings(es);
capture->setOutputLocation(generateAudioFilePath());
active = false;
}
StringHelper::~StringHelper()
{
delete audioSource;
delete capture;
}
void StringHelper::record()
{
capture->record();
active = true;
setSliderValue(30); (from this code i was able to move the slider and recording is done but i am in need to move the slider by 1 as recording is done....?????????
}
void StringHelper::stop()
{
capture->stop();
active = false;
}
void StringHelper:ause()
{
capture->pause();
}
void StringHelper:lay()
{
QMediaPlayer *player = new QMediaPlayer;
QUrl url = QUrl::fromLocalFile("myvoice");
player->setMedia(url);
player->setVolume(100);
player->play();
}
void StringHelper::setSliderValue(double value)
{
if (value == m_sliderValue)
return;
m_sliderValue = value;
emit sliderValueChanged(m_sliderValue);
}
QUrl StringHelper::generateAudioFilePath()
{
QDir outputDir(QDir::rootPath());
int lastImage = 0;
int fileCount = 0;
foreach(QString fileName, outputDir.entryList(QStringList() << "myvoice_*")) {
int imgNumber = fileName.mid(5, fileName.size() - 9).toInt();
lastImage = qMax(lastImage, imgNumber);
if (outputDir.exists(fileName))
fileCount += 1;
}
lastImage += fileCount;
QUrl location(QDir::toNativeSeparators(outputDir.canoni calPath() + QString("/myvoice_%1").arg(lastImage + 1, 4, 10, QLatin1Char('0'))));
return location;
}
main.cpp:
#include <QtGui/QApplication>
#include <QDeclarativeContext>
#include "qmlapplicationviewer.h"
#include "stringhelper.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QmlApplicationViewer viewer;
viewer.setOrientation(QmlApplicationViewer::Screen OrientationAuto);
viewer.setMainQmlFile(QLatin1String("qml/Audio/main.qml"));
QDeclarativeContext *context = viewer.rootContext();
StringHelper myclass;
context->setContextProperty("StringHelper", &myclass);
viewer.showExpanded();
return app.exec();
}
I have no idea how to link the slider to the button.Could you help me in finding the solution??
Regards,
Harish.
Bookmarks