From: Marco Gittler Date: Mon, 27 Sep 2010 20:14:41 +0000 (+0000) Subject: waveform display X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=ec00934b188e717301b9fe2477f9a0993f5fb982;p=kdenlive waveform display svn path=/trunk/kdenlive/; revision=4944 --- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8d38fad6..2c48801b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -217,6 +217,7 @@ set(kdenlive_SRCS monitorscene.cpp geometrywidget.cpp doubleparameterwidget.cpp + audiosignal.cpp ) diff --git a/src/monitor.cpp b/src/monitor.cpp index f7ae4644..f61ba571 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -26,6 +26,7 @@ #include "monitorscene.h" #include "abstractclipitem.h" #include "kdenlivesettings.h" +#include "audiosignal.h" #include #include @@ -48,6 +49,7 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget *parent) : QWidget(parent), render(NULL), + m_audiosignal(NULL), m_name(name), m_monitorManager(manager), m_currentClip(NULL), @@ -152,6 +154,9 @@ Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget render = new Render(m_name, (int) m_monitorRefresh->winId(), -1, profile, this); m_monitorRefresh->setRenderer(render); #endif + m_audiosignal= new AudioSignal(this); + rendererBox->addWidget(m_audiosignal); + connect(render, SIGNAL(showAudioSignal(QByteArray)), m_audiosignal, SLOT(showAudio(QByteArray))); connect(m_ruler, SIGNAL(seekRenderer(int)), this, SLOT(slotSeek(int))); connect(render, SIGNAL(durationChanged(int)), this, SLOT(adjustRulerSize(int))); diff --git a/src/monitor.h b/src/monitor.h index 8a2bd274..ddfe2804 100644 --- a/src/monitor.h +++ b/src/monitor.h @@ -45,6 +45,7 @@ class Transition; class ClipItem; class QGraphicsView; class QGraphicsPixmapItem; +class AudioSignal; class MonitorRefresh : public QWidget { @@ -142,6 +143,7 @@ private: #ifdef Q_WS_MAC VideoGLWidget *m_glWidget; #endif + AudioSignal *m_audiosignal; GenTime getSnapForPos(bool previous); diff --git a/src/renderer.cpp b/src/renderer.cpp index 600dcfad..80ae7c38 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -64,7 +64,7 @@ static void consumer_frame_show(mlt_consumer, Render * self, mlt_frame frame_ptr #ifdef Q_WS_MAC self->showFrame(frame); #endif - + self->showAudio(frame); self->emitFrameNumber(mlt_frame_get_position(frame_ptr)); if (self->sendFrameForAnalysis && frame_ptr->convert_image) { self->emitFrameUpdated(frame); @@ -1493,6 +1493,47 @@ void Render::showFrame(Mlt::Frame& frame) } #endif +void Render::showAudio(Mlt::Frame& frame) +{ + mlt_audio_format audio_format=mlt_audio_pcm; + int freq,num_channels,samples; + uint8_t* data=(uint8_t*)frame.get_audio(audio_format,freq,num_channels,samples); + if (!data) + return; + int value=0; + QByteArray channels; + + for (int i=0;i> 8 ); + break; + case 2: + value=( ((uint32_t*)data) [i] >> 16 ); + break; + case 3: + value=( ((float*)data) [i]*255); + break; + default: + value=0; + } + */ + long val=0; + int num_samples=20; + for (int s=0;s0) + emit showAudioSignal(channels); +} /* * MLT playlist direct manipulation. diff --git a/src/renderer.h b/src/renderer.h index 6c9c0b8b..60b9ed9e 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -262,6 +262,7 @@ Q_OBJECT public: #ifdef Q_WS_MAC void showFrame(Mlt::Frame&); #endif + void showAudio(Mlt::Frame&); /** @brief This property is used to decide if the renderer should convert it's frames to QImage for use in other Kdenlive widgets. */ bool sendFrameForAnalysis; QList checkTrackSequence(int); @@ -357,6 +358,7 @@ signals: * * Used in Mac OS X. */ void showImageSignal(QImage); + void showAudioSignal(QByteArray); /** @brief The renderer refreshed the current frame, but no seeking was done. */ void frameUpdated(QImage);