|
From: Tapio V. <aa...@us...> - 2011-01-19 08:31:33
|
Module: editor
Branch: master
Commit: 5cc517e4dd6f0f082a6e021c03a4630b54ae9ab1
Author: Tapio Vierros <tap...@gm...>
Date: Wed Jan 19 10:30:14 2011 +0200
Use Phonon instead of QtMultimediaKit.
For both playback & metadata resolving.
---
CMakeLists.txt | 8 +-------
editorapp.cc | 47 +++++++++++++++++++++++++++++------------------
editorapp.hh | 13 ++++++++-----
3 files changed, 38 insertions(+), 30 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 013c270..860dd55 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -28,16 +28,10 @@ find_package(Boost 1.36 REQUIRED COMPONENTS thread regex filesystem system)
include_directories(${Boost_INCLUDE_DIRS})
list(APPEND LIBS ${Boost_LIBRARIES})
-find_package(Qt4 COMPONENTS QtCore QtGui QtXml QtNetwork QtMultimediaKit REQUIRED)
+find_package(Qt4 COMPONENTS QtCore QtGui QtXml Phonon REQUIRED)
include(${QT_USE_FILE})
list(APPEND LIBS ${QT_LIBRARIES})
-# Not used directly but is a dep of QtMultimediaKit
-if(${CMAKE_SYSTEM_NAME} MATCHES Linux)
- find_package(LibPulse REQUIRED)
- list(APPEND LIBS ${LibPulse_LIBRARIES})
-endif()
-
# Headers that need MOC need to be defined separately
file(GLOB MOC_HEADER_FILES "editorapp.hh" "notelabel.hh" "notegraphwidget.hh")
diff --git a/editorapp.cc b/editorapp.cc
index c3042f3..614ff9c 100644
--- a/editorapp.cc
+++ b/editorapp.cc
@@ -1,4 +1,6 @@
#include <QtGui>
+#include <phonon/MediaObject>
+#include <phonon/AudioOutput>
#include <iostream>
#include "editorapp.hh"
#include "notelabel.hh"
@@ -41,8 +43,6 @@ EditorApp::EditorApp(QWidget *parent): QMainWindow(parent), projectFileName(), h
updateNoteInfo(NULL);
song.reset(new Song);
- player.reset(new QMediaPlayer);
- connect(player.data(), SIGNAL(metaDataChanged()), this, SLOT(metaDataChanged()));
// Some icons to menus to make them prettier
ui.actionNew->setIcon(QIcon::fromTheme("document-new"));
@@ -60,6 +60,15 @@ EditorApp::EditorApp(QWidget *parent): QMainWindow(parent), projectFileName(), h
hasUnsavedChanges = false;
updateMenuStates();
+
+ // Audio stuff
+ player = new Phonon::MediaObject(this);
+ audioOutput = new Phonon::AudioOutput(this);
+ player->setTickInterval(500);
+ Phonon::createPath(player, audioOutput);
+ // Audio signals
+ connect(player, SIGNAL(tick(qint64)), this, SLOT(audioTick(qint64)));
+ connect(player, SIGNAL(metaDataChanged()), this, SLOT(metaDataChanged()));
}
void EditorApp::operationDone(const Operation &op)
@@ -344,14 +353,9 @@ void EditorApp::on_actionMusicFile_triggered()
ui.valMusicFile->setText(fileName);
ui.tabWidget->setCurrentIndex(1); // Switch to song properties tab
// Metadata is updated when it becomes available (signal)
- QBuffer stream;
- stream.open(QBuffer::ReadWrite);
- player->setMedia(QUrl::fromLocalFile(fileName), &stream);
- std::cout << stream.size() << std::endl;
- char lol;
- stream.getChar(&lol);
+ player->setCurrentSource(Phonon::MediaSource(QUrl::fromLocalFile(fileName)));
// FIXME: Temporary test
- player->setVolume(50);
+ audioOutput->setVolume(50);
player->play();
// TODO: Extract the raw data and fire up an analyzer
}
@@ -437,19 +441,26 @@ void EditorApp::updateSongMeta(bool readFromSongToUI)
void EditorApp::metaDataChanged()
{
- if (!player.isNull()) {
- if (player->metaData(QtMultimediaKit::Title).isValid())
- song->title = player->metaData(QtMultimediaKit::Title).toString().toStdString();
- if (player->metaData(QtMultimediaKit::AlbumArtist).isValid())
- song->artist = player->metaData(QtMultimediaKit::AlbumArtist).toString().toStdString();
- if (player->metaData(QtMultimediaKit::Genre).isValid())
- song->genre = player->metaData(QtMultimediaKit::Genre).toString().toStdString();
- if (player->metaData(QtMultimediaKit::Year).isValid())
- song->year = player->metaData(QtMultimediaKit::Year).toString().toStdString();
+ if (player) {
+ if (!player->metaData(Phonon::TitleMetaData).isEmpty())
+ song->title = player->metaData(Phonon::TitleMetaData).join(", ").toStdString();
+ if (!player->metaData(Phonon::ArtistMetaData).isEmpty())
+ song->artist = player->metaData(Phonon::ArtistMetaData).join(", ").toStdString();
+ if (!player->metaData(Phonon::GenreMetaData).isEmpty())
+ song->genre = player->metaData(Phonon::GenreMetaData).join(", ").toStdString();
+ if (!player->metaData("DATE").isEmpty())
+ song->year = player->metaData("DATE").join(", ").toStdString();
updateSongMeta(true);
}
}
+void EditorApp::audioTick(qint64 time)
+{
+ // TODO: Update a cursor in NoteGraphWidget
+ // (the cursor needs to be first implemented)
+}
+
+
void EditorApp::on_txtTitle_editingFinished() { updateSongMeta(); }
void EditorApp::on_txtArtist_editingFinished() { updateSongMeta(); }
void EditorApp::on_txtGenre_editingFinished() { updateSongMeta(); }
diff --git a/editorapp.hh b/editorapp.hh
index 4f72627..9e64861 100644
--- a/editorapp.hh
+++ b/editorapp.hh
@@ -1,14 +1,15 @@
#pragma once
-#include <QtMultimediaKit/QMediaPlayer>
-#include <QMessageBox>
#include "ui_editor.h"
#include "operation.hh"
#include "song.hh"
class NoteLabel;
class NoteGraphWidget;
-class QMediaPlayer;
+namespace Phonon {
+ class MediaObject;
+ class AudioOutput;
+}
class EditorApp: public QMainWindow
{
@@ -29,6 +30,7 @@ public slots:
void operationDone(const Operation &op);
void updateNoteInfo(NoteLabel *note);
void metaDataChanged();
+ void audioTick(qint64 time);
// Automatic slots
@@ -65,11 +67,12 @@ public slots:
private:
Ui::EditorApp ui;
- NoteGraphWidget* noteGraph;
+ NoteGraphWidget *noteGraph;
OperationStack opStack;
OperationStack redoStack;
QScopedPointer<Song> song;
- QScopedPointer<QMediaPlayer> player;
+ Phonon::MediaObject *player;
+ Phonon::AudioOutput *audioOutput;
QString projectFileName;
bool hasUnsavedChanges;
};
|