Changed the audio library to SFML. Now working in qt5.3.2.
This commit is contained in:
parent
37835e7571
commit
1dd20c9b05
11 changed files with 143 additions and 319 deletions
|
@ -1,5 +1,5 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<dmxSettings fileVersion="1" layersNumber="3" path="/home/santi/lo_que_vio_el_mayordomo/sound" universeNumber="1">
|
||||
<dmxSettings fileVersion="1" layersNumber="3" path="/home/santi/audio" universeNumber="1">
|
||||
<layer0 dmx="1" universe="1" />
|
||||
<layer1 dmx="21" universe="1" />
|
||||
<layer2 dmx="41" universe="1" />
|
||||
|
|
|
@ -1,55 +0,0 @@
|
|||
^皾湏毄讍悊€潫憙嚈曀寑剛扰臓崙櫗泛疮鷼岸沪瓲驖か<EFBFBD><EFBFBD><EFBFBD><EFBFBD>堪彪Й,称蛽咴斕与栧蚜赁尬履匾娤了脜绿衼祧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>雠疰鬻惆<EFBFBD><<EFBFBD>
|
||||
堀阜刀ā相槜灜鬯勖
|
||||
и拍媚菀<EFBFBD>彏帶寣巼秮憯剴€煥覆蝶趱毤丁窚但К煯缚<EFBFBD>溟驷钽伿谠訖<EFBFBD>
|
||||
増唵檮儌劀煘潨嚉櫂棅晹搾崘<EFBFBD><EFBFBD><EFBFBD>┅沪イ⒕ 榭〖缓垢范胆
|
||||
≡顡嫄欃稚惹婆拿禽肋掭苒谫<EFBFBD>
|
||||
哦剨廖研镱盱腓蹊珂邃汊帱
|
||||
韴<EFBFBD><EFBFBD>魂膂豸篁耩崚崒媻増噺<EFBFBD>
|
||||
桋圯諐倽湜殭槜攭敁拺惎<EFBFBD><EFBFBD>
|
||||
故貔铘赭<EFBFBD>綘烤郊缓护范荡巢睘<EFBFBD>
|
||||
呖敂崐槡棕寐晾咿蒉勤儇字赵佄
|
||||
枚安ū菌勘钩鼬汊徉<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鲺趔<EFBFBD>
|
||||
銋咽吓浭盅俾棙儌亐煘潥嚉櫂棖晹悗
|
||||
冨耜镥皇鲴<EFBFBD>狄<EFBFBD>臣烤郊缓归<EFBFBD>荡巢毕脱
|
||||
拶稚惹婆拿垒肋掭苒谯<EFBFBD>
|
||||
拍稍右研镱镳腙殍珂彐<EFBFBD>
|
||||
痼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鲺趔蝰饙<EFBFBD>
|
||||
煘棅増噯厔仦亐煘潨洏<EFBFBD>
|
||||
妳姇敁拺惎<EFBFBD><EFBFBD><EFBFBD>ěΗ<EFBFBD>
|
||||
卑綘烤郊缓护范荡巢蓖<EFBFBD>
|
||||
咿资扇瞧拍赁晾咿蒈圬<EFBFBD>
|
||||
刈中扔已畜铐潆鲩桤琦溷赆<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>牾趔黜饛帊悑妷帥唴寖<EFBFBD>
|
||||
亐煔亷<EFBFBD>妊厞晹搾崘<EFBFBD>グ<EFBFBD>┅沪イ"<EFBFBD>竣
|
||||
郊痪オ则牯‘毕夏兴适邵婆穆蘖肋掭苒谂
|
||||
刈盅攘皠摢掣<EFBFBD>觊脲<EFBFBD>溏除<EFBFBD><EFBFBD><EFBFBD>帑<EFBFBD><EFBFBD>鲺麸
|
||||
蝰饖挓筝軟攪唴劅倎仐倽湜泤槜枙敁拺<EFBFBD>
|
||||
<EFBFBD><EFBFBD>犯婶鲲黪瘗臣烤嫉Ш够丢荡吵<EFBFBD>瓮趟噬熔
|
||||
婆拿铝肋<EFBFBD>
|
||||
蒈圳儇字稍右研镱眇腙殍珂邃<EFBFBD>忉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>纟<EFBFBD>鲺趔蝽饛帊寢妷攪唴剝倎€優潨洑櫂棅晹搾憪<EFBFBD>爆<EFBFBD>┄Еジ"<EFBFBD>烤郊Ш垢范荡钞毕瓮趟噬郧婆拿铝烂掭苒谫刈收杂已酗铖
|
||||
<EFBFBD>鲩桤驽溷恺<EFBFBD><EFBFBD><EFBFBD>帑<EFBFBD><EFBFBD>鲺趔铖饛帒寢妷<EFBFBD>
|
||||
噯厔儌亣優湝泦櫃枱墧捛悓
|
||||
<EFBFBD><EFBFBD><EFBFBD>┊沪が><EFBFBD>烤〖翰工
|
||||
范荡巢馍彝趟收惹婆孛铝烂
|
||||
掭苒谫嬓收杂彝酗铐痣觊棼
|
||||
驽溷忉锄恺<EFBFBD><EFBFBD><EFBFBD>鲺梵篑驌
|
||||
帊寢妷蹆殔厓倽€煘潃洓櫂<EFBFBD>
|
||||
枙敁拺惃箔<EFBFBD><EFBFBD>ěΕ福)牐
|
||||
窘蓟汗攵<EFBFBD>闯箔衔吞资扇勤
|
||||
拍寐晾屵淋圳倌字赵弦研矧
|
||||
盱腙殍存<EFBFBD>汊狳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
豸篁耩軒憣媻墧噯厔焸亐焸
|
||||
潨洑櫂臇墧搾憣<EFBFBD><EFBFBD>藩┄Ш
|
||||
イ"<EFBFBD>炀〖缓工范荡<EFBFBD>毕窝
|
||||
趟噬惹暸孛铝烂掭苒瀑刈稚
|
||||
杂已酗巾痣觊棼驽溷<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD>ヵ梵蝰饟帊寢枆垏啓
|
||||
柵偀€湆<EFBFBD>
|
||||
湜殭剠剦唩巸偝<EFBFBD><EFBFBD>订ěЧぃⅰ伎窘姬汗缚<EFBFBD>闯脖衔托
|
||||
耸扇瞧牌<EFBFBD>
|
||||
杏芡塘紊<EFBFBD>
|
||||
倨字赵右托耦盱腙轸瑛邃汊徉泾泓<EFBFBD><EFBFBD>麝蹶篁耩弾憣晩増噯厴
|
||||
憪潃煘潃
|
||||
泦檮棅晥搸憣<EFBFBD><EFBFBD><EFBFBD>┄Еイ<EFBFBD>
|
||||
⒔牐尽姬亥斧订疮箔弦托
|
||||
酥稍勤
|
||||
咆<EFBFBD>
|
|
@ -1,5 +1,7 @@
|
|||
#include "audiolayerwidget.h"
|
||||
|
||||
#include<iostream>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QVBoxLayout>
|
||||
#include <QFile>
|
||||
|
@ -10,36 +12,16 @@
|
|||
AudioLayerWidget::AudioLayerWidget(QWidget *parent, QString name):
|
||||
QGroupBox(parent)
|
||||
, m_suspendResumeButton(0)
|
||||
, m_deviceBox(0)
|
||||
, m_watchDMX(new QTimer(this))
|
||||
, m_pullTimer(new QTimer(this))
|
||||
, m_device(QAudioDeviceInfo::defaultOutputDevice())
|
||||
, m_audioOutput(0)
|
||||
, m_output(0)
|
||||
, m_buffer(BufferSize, 0)
|
||||
, m_decoder(0)
|
||||
, m_progressCounter(new QTime(0,0,0,1))
|
||||
, m_progressMs(0)
|
||||
, m_currentMedia(" ")
|
||||
, m_running(false)
|
||||
, m_emptyBuffer()
|
||||
{
|
||||
this->setTitle(name);
|
||||
|
||||
QVBoxLayout *layout = new QVBoxLayout;
|
||||
|
||||
m_deviceBox = new QComboBox(this);
|
||||
const QAudioDeviceInfo &defaultDeviceInfo = QAudioDeviceInfo::defaultOutputDevice();
|
||||
m_deviceBox->addItem(defaultDeviceInfo.deviceName(), qVariantFromValue(defaultDeviceInfo));
|
||||
foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)) {
|
||||
if (deviceInfo != defaultDeviceInfo)
|
||||
m_deviceBox->addItem(deviceInfo.deviceName(), qVariantFromValue(deviceInfo));
|
||||
}
|
||||
m_deviceBox->setMaximumWidth(250);
|
||||
connect(m_deviceBox,SIGNAL(activated(int)),
|
||||
this, SLOT(deviceChanged(int)));
|
||||
layout->addWidget(m_deviceBox);
|
||||
|
||||
QHBoxLayout *status = new QHBoxLayout;
|
||||
m_statusLabel = new QLabel;
|
||||
m_statusLabel->setText(STATUS_LABEL);
|
||||
|
@ -118,35 +100,9 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, QString name):
|
|||
|
||||
this->setLayout(layout);
|
||||
|
||||
m_format.setSampleRate(DataSampleRateHz);
|
||||
m_format.setChannelCount(2);
|
||||
m_format.setSampleSize(16);
|
||||
m_format.setCodec("audio/pcm");
|
||||
m_format.setByteOrder(QAudioFormat::LittleEndian);
|
||||
m_format.setSampleType(QAudioFormat::SignedInt);
|
||||
|
||||
// Init the silent buffer
|
||||
QAudioBuffer *abuf = new QAudioBuffer(44100, m_format, -1);
|
||||
QByteArray ba((const char*)abuf->data(), abuf->byteCount());
|
||||
m_emptyBuffer.append(ba);
|
||||
|
||||
QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
|
||||
if (!info.isFormatSupported(m_format)) {
|
||||
qWarning("Default format not supported - trying to use nearest");
|
||||
m_format = info.nearestFormat(m_format);
|
||||
}
|
||||
m_decoder = new AudioDecoder(m_format, this);
|
||||
m_decoder->start();
|
||||
connect(m_decoder, SIGNAL(totalTimeChanged(qint64)),
|
||||
this, SLOT(durationChanged(qint64)));
|
||||
connect(m_pullTimer, SIGNAL(timeout()),
|
||||
this, SLOT(pullTimerExpired()));
|
||||
|
||||
connect(m_watchDMX, SIGNAL(timeout()),
|
||||
this, SLOT(watchDMXExpired()));
|
||||
m_watchDMX->start(1000);
|
||||
|
||||
createAudioOutput();
|
||||
m_watchDMX->start(200);
|
||||
}
|
||||
|
||||
AudioLayerWidget::~AudioLayerWidget()
|
||||
|
@ -154,54 +110,46 @@ AudioLayerWidget::~AudioLayerWidget()
|
|||
|
||||
}
|
||||
|
||||
void AudioLayerWidget::createAudioOutput()
|
||||
{
|
||||
m_audioOutput = new QAudioOutput(m_device, m_format, this);
|
||||
Q_CHECK_PTR(m_audioOutput);
|
||||
m_audioOutput->setNotifyInterval(NOTIFY_INTERVAL);
|
||||
m_audioOutput->setCategory("LibreMediaServer");
|
||||
connect(m_audioOutput, SIGNAL(notify()), SLOT(notified()));
|
||||
m_output = m_audioOutput->start();
|
||||
Q_CHECK_PTR(m_output);
|
||||
m_statusValue->setText(PAUSE_LABEL);
|
||||
connect(m_audioOutput, SIGNAL(stateChanged(QAudio::State)), SLOT(handleStateChanged(QAudio::State)));
|
||||
m_pullTimer->start(PULL_TIMER_INTERVAL);
|
||||
}
|
||||
|
||||
void AudioLayerWidget::deviceChanged(int index)
|
||||
{
|
||||
m_pullTimer->stop();
|
||||
m_audioOutput->stop();
|
||||
m_audioOutput->disconnect(this);
|
||||
m_device = m_deviceBox->itemData(index).value<QAudioDeviceInfo>();
|
||||
createAudioOutput();
|
||||
}
|
||||
|
||||
void AudioLayerWidget::volumeChanged(int value)
|
||||
{
|
||||
if (m_audioOutput)
|
||||
m_audioOutput->setVolume(qreal(value/100.0f));
|
||||
m_music.setVolume(value);
|
||||
}
|
||||
|
||||
// volume range 0 -100
|
||||
void AudioLayerWidget::setVol(qreal vol)
|
||||
{
|
||||
m_audioOutput->setVolume(vol);
|
||||
m_music.setVolume(vol);
|
||||
m_volumeSlider->blockSignals(true);
|
||||
int volume = vol * 100;
|
||||
m_volumeSlider->setValue(volume);
|
||||
m_volumeSlider->setValue(vol);
|
||||
m_volumeSlider->blockSignals(false);
|
||||
}
|
||||
|
||||
void AudioLayerWidget::loadMedia(QString file)
|
||||
{
|
||||
if (m_currentMedia == file)
|
||||
return;
|
||||
if (QFile::exists(file)){
|
||||
m_decoder->loadMedia(file);
|
||||
setInitPosition();
|
||||
m_currentMedia = file;
|
||||
if (m_currentMedia == file ) {
|
||||
fileLoaded(file);
|
||||
return;
|
||||
}
|
||||
if (!QFile::exists(file)) {
|
||||
qWarning("Can not access to file %s", file.toLatin1().constData());
|
||||
return;
|
||||
}
|
||||
// Load an ogg music file
|
||||
if (!m_music.openFromFile(file.toStdString())) {
|
||||
qWarning("Can not open file %s", file.toLatin1().constData());
|
||||
return;
|
||||
}
|
||||
m_music.setAttenuation(0);
|
||||
|
||||
m_progressCounter->restart();
|
||||
durationChanged(m_music.getDuration().asMilliseconds());
|
||||
fileLoaded(file);
|
||||
|
||||
// Display music informations
|
||||
std::cout << file.toLatin1().constData() << " : " << std::endl;
|
||||
std::cout << " " << m_music.getDuration().asSeconds() << " seconds" << std::endl;
|
||||
std::cout << " " << m_music.getSampleRate() << " samples / sec" << std::endl;
|
||||
std::cout << " " << m_music.getChannelCount() << " channels" << std::endl;
|
||||
}
|
||||
|
||||
void AudioLayerWidget::fileLoaded(QString file)
|
||||
|
@ -212,133 +160,37 @@ void AudioLayerWidget::fileLoaded(QString file)
|
|||
m_folderValue->setText(list.at(size - 2));
|
||||
m_fileValue->setText(list.at(size - 1));
|
||||
}
|
||||
m_progressMs = 0;
|
||||
m_progressTime->setTime(QTime::fromMSecsSinceStartOfDay(m_progressMs));
|
||||
}
|
||||
|
||||
void AudioLayerWidget::notified()
|
||||
{
|
||||
m_progressMs += m_progressCounter->restart();
|
||||
m_progressTime->setTime(QTime::fromMSecsSinceStartOfDay(m_progressMs));
|
||||
m_progressSlider->setValue(m_progressMs);
|
||||
/* qDebug() << "bytesFree = " << m_audioOutput->bytesFree()
|
||||
<< ", " << "elapsedUSecs = " << m_audioOutput->elapsedUSecs()
|
||||
<< ", " << "processedUSecs = " << m_audioOutput->processedUSecs();
|
||||
*/
|
||||
}
|
||||
|
||||
void AudioLayerWidget::pullTimerExpired()
|
||||
{
|
||||
if (m_audioOutput && m_audioOutput->state() != QAudio::StoppedState) {
|
||||
int chunks = m_audioOutput->bytesFree() / m_audioOutput->periodSize();
|
||||
while (chunks) {
|
||||
if (m_running) {
|
||||
const qint64 len = m_decoder->read(m_buffer.data(), m_audioOutput->periodSize());
|
||||
if ( len == -1) {
|
||||
stop();
|
||||
qDebug("End of file %s", this->title().toLatin1().constData());
|
||||
break;
|
||||
}
|
||||
if (len) {
|
||||
m_output->write(m_buffer.data(), len);
|
||||
}
|
||||
if (len != m_audioOutput->periodSize())
|
||||
break;
|
||||
} else {
|
||||
m_output->write(m_emptyBuffer.data(), m_audioOutput->periodSize());
|
||||
}
|
||||
--chunks;
|
||||
}
|
||||
}
|
||||
}
|
||||
void AudioLayerWidget::toggleSuspendResume()
|
||||
{
|
||||
if (m_audioOutput->state() == QAudio::SuspendedState) {
|
||||
resume();
|
||||
} else if (m_audioOutput->state() == QAudio::ActiveState) {
|
||||
pause();
|
||||
} else if (m_audioOutput->state() == QAudio::StoppedState) {
|
||||
play();
|
||||
} else if (m_audioOutput->state() == QAudio::IdleState) {
|
||||
qWarning("%s: IdleState", this->title().toLatin1().constData());
|
||||
reset();
|
||||
resume();
|
||||
}
|
||||
}
|
||||
|
||||
void AudioLayerWidget::handleStateChanged(QAudio::State state)
|
||||
{
|
||||
if (state == QAudio::SuspendedState) {
|
||||
m_statusValue->setText(PAUSE_LABEL);
|
||||
qDebug("Pause");
|
||||
} else if (state == QAudio::ActiveState) {
|
||||
m_statusValue->setText(PLAY_LABEL);
|
||||
qDebug("Play");
|
||||
} else if (m_audioOutput->state() == QAudio::StoppedState) {
|
||||
m_statusValue->setText(STOP_LABEL);
|
||||
qDebug("Stop");
|
||||
} else if (state == QAudio::IdleState) {
|
||||
m_statusValue->setText(IDDLE_LABEL);
|
||||
qDebug("Iddle");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// duration in miliseconds
|
||||
void AudioLayerWidget::durationChanged(qint64 dur)
|
||||
{
|
||||
if (dur == -1)
|
||||
return;
|
||||
m_totalTimeValue->setTime(QTime::fromMSecsSinceStartOfDay(dur));
|
||||
m_progressSlider->setMaximum(dur);
|
||||
m_totalTimeValue->setTime(QTime::fromMSecsSinceStartOfDay(dur));
|
||||
}
|
||||
|
||||
void AudioLayerWidget::play()
|
||||
{
|
||||
setInitPosition();
|
||||
// m_pullTimer->start(PULL_TIMER_INTERVAL);
|
||||
// m_audioOutput->resume();
|
||||
m_running = true;
|
||||
pullTimerExpired();
|
||||
m_progressCounter->start();
|
||||
m_suspendResumeButton->setText(tr(SUSPEND_LABEL));
|
||||
m_music.play();
|
||||
m_progressCounter->restart();
|
||||
}
|
||||
|
||||
void AudioLayerWidget::pause()
|
||||
{
|
||||
// m_pullTimer->stop();
|
||||
// m_audioOutput->suspend();
|
||||
m_running = false;
|
||||
m_suspendResumeButton->setText(tr(RESUME_LABEL));
|
||||
}
|
||||
|
||||
void AudioLayerWidget::resume()
|
||||
{
|
||||
// m_pullTimer->start(PULL_TIMER_INTERVAL);
|
||||
// m_audioOutput->resume();
|
||||
m_running = true;
|
||||
pullTimerExpired();
|
||||
m_progressCounter->start();
|
||||
m_suspendResumeButton->setText(tr(SUSPEND_LABEL));
|
||||
m_music.pause();
|
||||
m_progressCounter->restart();
|
||||
}
|
||||
|
||||
void AudioLayerWidget::stop()
|
||||
{
|
||||
m_running = false;
|
||||
setInitPosition();
|
||||
}
|
||||
|
||||
void AudioLayerWidget::reset()
|
||||
{
|
||||
m_pullTimer->stop();
|
||||
m_audioOutput->reset();
|
||||
m_output = m_audioOutput->start();
|
||||
Q_CHECK_PTR(m_output);
|
||||
}
|
||||
|
||||
void AudioLayerWidget::setInitPosition()
|
||||
{
|
||||
// reset();
|
||||
m_decoder->setPos(0);
|
||||
m_progressMs = 0;
|
||||
m_progressTime->setTime(QTime::fromMSecsSinceStartOfDay(m_progressMs));
|
||||
m_progressSlider->setValue(m_progressMs);
|
||||
m_music.stop();
|
||||
}
|
||||
|
||||
void AudioLayerWidget::watchDMXExpired() {
|
||||
|
@ -348,9 +200,26 @@ void AudioLayerWidget::watchDMXExpired() {
|
|||
void AudioLayerWidget::updateWatchDMX(bool b)
|
||||
{
|
||||
m_receiveDMX->setChecked(b);
|
||||
switch (m_music.getStatus()) {
|
||||
case sf::SoundSource::Playing:
|
||||
m_progressMs += m_progressCounter->restart();
|
||||
m_progressTime->setTime(QTime::fromMSecsSinceStartOfDay(m_progressMs));
|
||||
m_statusValue->setText(PLAY_LABEL);
|
||||
break;
|
||||
case sf::SoundSource::Paused:
|
||||
m_statusValue->setText(PAUSE_LABEL);
|
||||
break;
|
||||
case sf::SoundSource::Stopped:
|
||||
m_progressCounter->restart();
|
||||
m_progressMs = 0;
|
||||
m_progressTime->setTime(QTime::fromMSecsSinceStartOfDay(m_progressMs));
|
||||
m_statusValue->setText(STOP_LABEL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void AudioLayerWidget::flushBuffer()
|
||||
void AudioLayerWidget::toggleSuspendResume()
|
||||
{
|
||||
// Esto es una chapuza para arreglar que reset() no limpia el buffer realmente
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
#ifndef AUDIOLAYERWIDGET_H
|
||||
#define AUDIOLAYERWIDGET_H
|
||||
|
||||
#include <QAudioOutput>
|
||||
#include <QByteArray>
|
||||
#include <QComboBox>
|
||||
|
||||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
#include <QSlider>
|
||||
|
@ -13,7 +12,9 @@
|
|||
#include <QGroupBox>
|
||||
#include <QCheckBox>
|
||||
|
||||
#include "audiodecoder.h"
|
||||
#include "SFML/Audio.hpp"
|
||||
#include "SFML/System.hpp"
|
||||
|
||||
#include "defines.h"
|
||||
|
||||
class AudioLayerWidget : public QGroupBox
|
||||
|
@ -31,8 +32,8 @@ public:
|
|||
void pause();
|
||||
void setVol(qreal vol);
|
||||
void resume();
|
||||
|
||||
void updateWatchDMX(bool b);
|
||||
|
||||
public slots:
|
||||
|
||||
void toggleSuspendResume();
|
||||
|
@ -40,7 +41,6 @@ public slots:
|
|||
|
||||
private:
|
||||
QPushButton *m_suspendResumeButton;
|
||||
QComboBox *m_deviceBox;
|
||||
|
||||
QLabel *m_statusLabel;
|
||||
QLabel * m_statusValue;
|
||||
|
@ -66,14 +66,6 @@ private:
|
|||
QCheckBox *m_receiveDMX;
|
||||
QTimer *m_watchDMX;
|
||||
|
||||
QTimer *m_pullTimer;
|
||||
QAudioDeviceInfo m_device;
|
||||
QAudioOutput *m_audioOutput;
|
||||
QIODevice *m_output; // not owned
|
||||
QAudioFormat m_format;
|
||||
QByteArray m_buffer;
|
||||
AudioDecoder *m_decoder;
|
||||
|
||||
QTime *m_progressCounter;
|
||||
quint64 m_progressMs;
|
||||
|
||||
|
@ -81,20 +73,11 @@ private:
|
|||
|
||||
bool m_running;
|
||||
|
||||
QByteArray m_emptyBuffer;
|
||||
sf::Music m_music;
|
||||
|
||||
void createAudioOutput();
|
||||
|
||||
void reset();
|
||||
void setInitPosition();
|
||||
|
||||
void flushBuffer();
|
||||
private slots:
|
||||
void notified();
|
||||
void pullTimerExpired();
|
||||
void fileLoaded(QString file);
|
||||
void handleStateChanged(QAudio::State state);
|
||||
void deviceChanged(int index);
|
||||
void durationChanged(qint64 dur);
|
||||
void watchDMXExpired();
|
||||
};
|
||||
|
|
|
@ -1,20 +1,40 @@
|
|||
#include "audiomasterwidget.h"
|
||||
|
||||
#include <QVBoxLayout>
|
||||
|
||||
AudioMasterWidget::AudioMasterWidget(QWidget *parent) :
|
||||
QGroupBox(parent)
|
||||
, m_file(new QLabel)
|
||||
, m_folder(new QLabel)
|
||||
, m_vol(new QSlider)
|
||||
, m_mute(new QCheckBox)
|
||||
, m_status(new QLabel)
|
||||
, m_receiveDMX(new QCheckBox)
|
||||
, m_watchDMX(new QTimer)
|
||||
{
|
||||
status = new QLabel(this);
|
||||
vol = new QSlider(this);
|
||||
mute = new QCheckBox(this);
|
||||
|
||||
QVBoxLayout *vbox = new QVBoxLayout;
|
||||
vbox->addWidget(status);
|
||||
vbox->addWidget(vol);
|
||||
vbox->addWidget(mute);
|
||||
// vbox->addWidget(status);
|
||||
// vbox->addWidget(vol);
|
||||
// vbox->addWidget(mute);
|
||||
m_receiveDMX->setText("Receiving DMX");
|
||||
vbox->addWidget(m_receiveDMX);
|
||||
this->setLayout(vbox);
|
||||
connect(m_watchDMX, SIGNAL(timeout()),
|
||||
this, SLOT(watchDMXExpired()));
|
||||
m_watchDMX->start(1000);
|
||||
|
||||
}
|
||||
|
||||
AudioMasterWidget::~AudioMasterWidget()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void AudioMasterWidget::watchDMXExpired() {
|
||||
m_receiveDMX->setChecked(false);
|
||||
}
|
||||
|
||||
void AudioMasterWidget::updateWatchDMX()
|
||||
{
|
||||
m_receiveDMX->setChecked(true);
|
||||
}
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
#ifndef AUDIOMASTERWIDGET_H
|
||||
#define AUDIOMASTERWIDGET_H
|
||||
|
||||
#include <QLabel>
|
||||
#include <QtGui>
|
||||
#include <QGroupBox>
|
||||
#include <QLabel>
|
||||
#include <QSlider>
|
||||
#include <QCheckBox>
|
||||
#include <QVBoxLayout>
|
||||
#include <QGroupBox>
|
||||
|
||||
//#include "ui_audiomasterwidget.h"
|
||||
|
||||
|
@ -24,14 +23,22 @@ public:
|
|||
|
||||
~AudioMasterWidget();
|
||||
|
||||
private:
|
||||
public slots:
|
||||
void updateWatchDMX();
|
||||
|
||||
private:
|
||||
QLabel *m_file;
|
||||
QLabel *m_folder;
|
||||
QSlider *m_vol;
|
||||
QCheckBox *m_mute;
|
||||
QLabel *m_status;
|
||||
QCheckBox *m_receiveDMX;
|
||||
QTimer *m_watchDMX;
|
||||
|
||||
private slots:
|
||||
void watchDMXExpired();
|
||||
|
||||
|
||||
QLabel *file;
|
||||
QLabel *folder;
|
||||
QSlider *vol;
|
||||
QCheckBox *mute;
|
||||
QLabel *status;
|
||||
};
|
||||
|
||||
|
||||
#endif // AUDIOMASTERWIDGET_H
|
||||
|
|
|
@ -27,19 +27,18 @@ void AudioWidget::volChanged(int layer, qreal vol) {
|
|||
dynamic_cast<AudioLayerWidget *>(item->widget())->setVol(vol);
|
||||
}
|
||||
|
||||
void AudioWidget::playbackChanged(int layer, QAudio::State state)
|
||||
void AudioWidget::playbackChanged(int layer, Status status)
|
||||
{
|
||||
QLayoutItem * const item = layout->itemAt(layer);
|
||||
switch (state) {
|
||||
case QAudio::ActiveState:
|
||||
switch (status) {
|
||||
case Playing:
|
||||
dynamic_cast<AudioLayerWidget *>(item->widget())->play();
|
||||
break;
|
||||
case QAudio::StoppedState:
|
||||
dynamic_cast<AudioLayerWidget *>(item->widget())->pause();
|
||||
case Stopped:
|
||||
dynamic_cast<AudioLayerWidget *>(item->widget())->stop();
|
||||
break;
|
||||
case QAudio::SuspendedState:
|
||||
dynamic_cast<AudioLayerWidget *>(item->widget())->resume();
|
||||
case QAudio::IdleState:
|
||||
case Paused:
|
||||
dynamic_cast<AudioLayerWidget *>(item->widget())->pause();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
#include "audiolayerwidget.h"
|
||||
#include "defines.h"
|
||||
|
||||
#include "SFML/Audio/SoundSource.hpp"
|
||||
|
||||
class AudioWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -23,7 +25,7 @@ signals:
|
|||
public slots:
|
||||
void mediaLoaded(int layer, QString media );
|
||||
void volChanged(int layer, qreal vol);
|
||||
void playbackChanged(int layer, QAudio::State state);
|
||||
void playbackChanged(int layer, Status status);
|
||||
void layerReceived(int layer);
|
||||
};
|
||||
|
||||
|
|
|
@ -57,5 +57,12 @@ struct MediaFolder {
|
|||
QList<MediaFile> m_MediaInformation; // Pointer to the Medias Information List of this Library
|
||||
};
|
||||
|
||||
enum Status
|
||||
{
|
||||
Stopped, ///< Sound is not playing
|
||||
Paused, ///< Sound is paused
|
||||
Playing ///< Sound is playing
|
||||
};
|
||||
|
||||
#endif // DEFINES_H
|
||||
|
||||
|
|
|
@ -20,9 +20,6 @@
|
|||
|
||||
QTextEdit * libreMediaServerAudio::textEdit = 0;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
/ Constructor
|
||||
*/
|
||||
|
@ -70,13 +67,12 @@ libreMediaServerAudio::libreMediaServerAudio(QStringList args, QWidget *parent)
|
|||
textEdit, SLOT(append(QString)), Qt::QueuedConnection);
|
||||
*/
|
||||
// Inicia el widget Master. No implementado todavía
|
||||
/*
|
||||
amw = new AudioMasterWidget(this);
|
||||
QDockWidget *topWidget = new QDockWidget(tr("Master"), this);
|
||||
topWidget->setAllowedAreas(Qt::TopDockWidgetArea);
|
||||
topWidget->setWidget(amw);
|
||||
addDockWidget(Qt::TopDockWidgetArea, topWidget);
|
||||
*/
|
||||
|
||||
// Conectamos los menus
|
||||
connect(ui.actionOpen_conf, SIGNAL(triggered()), this, SLOT(openFile()));
|
||||
connect(ui.actionSave_conf, SIGNAL(triggered()), this, SLOT(saveFile()));
|
||||
|
@ -196,7 +192,7 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value)
|
|||
break;
|
||||
case VOLUME_COARSE:
|
||||
f = ( value * 0x100 ) + ola->getValue(layer, VOLUME_FINE);
|
||||
aw->volChanged(layer, f / 65535);
|
||||
aw->volChanged(layer, f / 655.35);
|
||||
break;
|
||||
case VOLUME_FINE:
|
||||
f = ( ola->getValue(layer, VOLUME_COARSE) * 0x100 ) + value;
|
||||
|
@ -211,13 +207,13 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value)
|
|||
aux = value / 25;
|
||||
switch (aux) {
|
||||
case 0 :
|
||||
aw->playbackChanged(layer, QAudio::ActiveState);
|
||||
aw->playbackChanged(layer, Playing);
|
||||
break;
|
||||
case 1 :
|
||||
aw->playbackChanged(layer, QAudio::StoppedState);
|
||||
aw->playbackChanged(layer, Stopped);
|
||||
break;
|
||||
case 2 :
|
||||
aw->playbackChanged(layer, QAudio::SuspendedState);
|
||||
aw->playbackChanged(layer, Paused);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
TEMPLATE = app
|
||||
TARGET = libremediaserver-audio
|
||||
|
||||
QT += network script webkitwidgets widgets multimedia
|
||||
QT += webkitwidgets widgets
|
||||
|
||||
CONFIG += debug
|
||||
DESTDIR = ./debug
|
||||
|
@ -14,8 +14,7 @@ HEADERS += libremediaserver-audio.h \
|
|||
audiowidget.h \
|
||||
audiomasterwidget.h \
|
||||
defines.h \
|
||||
settings.h \
|
||||
audiodecoder.h
|
||||
settings.h
|
||||
|
||||
SOURCES += main.cpp \
|
||||
libremediaserver-audio.cpp \
|
||||
|
@ -24,23 +23,12 @@ SOURCES += main.cpp \
|
|||
audiolayerwidget.cpp \
|
||||
audiowidget.cpp \
|
||||
audiomasterwidget.cpp \
|
||||
settings.cpp \
|
||||
audiodecoder.cpp
|
||||
settings.cpp
|
||||
|
||||
FORMS += \
|
||||
libremediaserver-audio.ui
|
||||
|
||||
#INCLUDEPATH += ./
|
||||
|
||||
LIBS += -lola -lolacommon
|
||||
# -L./debug
|
||||
|
||||
#win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../debug/release/ -lcitp
|
||||
#else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../debug/debug/ -lcitp
|
||||
#else:symbian: LIBS += -lcitp
|
||||
#else:unix: LIBS += -L$$PWD/../debug/ -lcitp
|
||||
#INCLUDEPATH += $$PWD/../debug
|
||||
#DEPENDPATH += $$PWD/../debug
|
||||
|
||||
RESOURCES =
|
||||
|
||||
|
@ -51,3 +39,11 @@ OTHER_FILES += \
|
|||
../compiling.txt \
|
||||
../changelog.txt \
|
||||
../lms-audio.xlm
|
||||
|
||||
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/SFML/lib/release/ -lsfml-audio
|
||||
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/SFML/lib/debug/ -lsfml-audio
|
||||
else:symbian: LIBS += -lsfml-audio
|
||||
else:unix: LIBS += -L$$PWD/SFML/lib/ -lsfml-audio -lsfml-system
|
||||
|
||||
INCLUDEPATH += $$PWD/SFML/include
|
||||
DEPENDPATH += $$PWD/SFML/include
|
||||
|
|
Loading…
Add table
Reference in a new issue