monitorscene.cpp
geometrywidget.cpp
doubleparameterwidget.cpp
+ audiosignal.cpp
)
#include "monitorscene.h"
#include "abstractclipitem.h"
#include "kdenlivesettings.h"
+#include "audiosignal.h"
#include <KDebug>
#include <KLocale>
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),
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)));
class ClipItem;
class QGraphicsView;
class QGraphicsPixmapItem;
+class AudioSignal;
class MonitorRefresh : public QWidget
{
#ifdef Q_WS_MAC
VideoGLWidget *m_glWidget;
#endif
+ AudioSignal *m_audiosignal;
GenTime getSnapForPos(bool previous);
#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);
}
#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.
#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);
*
* 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);