From: <g-...@us...> - 2010-09-27 20:14:48
|
Revision: 4944 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=4944&view=rev Author: g-marco Date: 2010-09-27 20:14:41 +0000 (Mon, 27 Sep 2010) Log Message: ----------- waveform display Modified Paths: -------------- trunk/kdenlive/src/CMakeLists.txt trunk/kdenlive/src/monitor.cpp trunk/kdenlive/src/monitor.h trunk/kdenlive/src/renderer.cpp trunk/kdenlive/src/renderer.h Modified: trunk/kdenlive/src/CMakeLists.txt =================================================================== --- trunk/kdenlive/src/CMakeLists.txt 2010-09-27 17:30:58 UTC (rev 4943) +++ trunk/kdenlive/src/CMakeLists.txt 2010-09-27 20:14:41 UTC (rev 4944) @@ -217,6 +217,7 @@ monitorscene.cpp geometrywidget.cpp doubleparameterwidget.cpp + audiosignal.cpp ) Modified: trunk/kdenlive/src/monitor.cpp =================================================================== --- trunk/kdenlive/src/monitor.cpp 2010-09-27 17:30:58 UTC (rev 4943) +++ trunk/kdenlive/src/monitor.cpp 2010-09-27 20:14:41 UTC (rev 4944) @@ -26,6 +26,7 @@ #include "monitorscene.h" #include "abstractclipitem.h" #include "kdenlivesettings.h" +#include "audiosignal.h" #include <KDebug> #include <KLocale> @@ -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 @@ 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))); Modified: trunk/kdenlive/src/monitor.h =================================================================== --- trunk/kdenlive/src/monitor.h 2010-09-27 17:30:58 UTC (rev 4943) +++ trunk/kdenlive/src/monitor.h 2010-09-27 20:14:41 UTC (rev 4944) @@ -45,6 +45,7 @@ class ClipItem; class QGraphicsView; class QGraphicsPixmapItem; +class AudioSignal; class MonitorRefresh : public QWidget { @@ -142,6 +143,7 @@ #ifdef Q_WS_MAC VideoGLWidget *m_glWidget; #endif + AudioSignal *m_audiosignal; GenTime getSnapForPos(bool previous); Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2010-09-27 17:30:58 UTC (rev 4943) +++ trunk/kdenlive/src/renderer.cpp 2010-09-27 20:14:41 UTC (rev 4944) @@ -64,7 +64,7 @@ #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,7 +1493,48 @@ } #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<num_channels;i++){ + /* switch (audio_format) + { + case 0: + value=( ( (uint8_t*)data) [i] ); + break; + case 1: + value=( ( (uint16_t*)data) [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;s<samples;s+=samples/num_samples){ + val+=(data[i+s*num_channels]- 127); + } + channels.append(val/num_samples); + } + + + if (samples>0) + emit showAudioSignal(channels); +} + /* * MLT playlist direct manipulation. */ Modified: trunk/kdenlive/src/renderer.h =================================================================== --- trunk/kdenlive/src/renderer.h 2010-09-27 17:30:58 UTC (rev 4943) +++ trunk/kdenlive/src/renderer.h 2010-09-27 20:14:41 UTC (rev 4944) @@ -262,6 +262,7 @@ #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 <int> checkTrackSequence(int); @@ -357,6 +358,7 @@ * * 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); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |