#include "audioEnvelope.h"
#include "audioStreamInfo.h"
+#include <QDebug>
#include <QImage>
#include <QTime>
#include <cmath>
-#include <iostream>
-AudioEnvelope::AudioEnvelope(Mlt::Producer *producer, int offset, int length) :
+AudioEnvelope::AudioEnvelope(const QString &url, Mlt::Producer *producer, int offset, int length) :
m_envelope(NULL),
m_offset(offset),
m_length(length),
m_envelopeIsNormalized(false)
{
// make a copy of the producer to avoid audio playback issues
- m_producer = new Mlt::Producer(*(producer->profile()), producer->get("resource"));
+ QString path = QString::fromUtf8(producer->get("resource"));
+ if (path == QLatin1String("<playlist>") || path == QLatin1String("<tractor>") || path ==QLatin1String( "<producer>"))
+ path = url;
+ m_producer = new Mlt::Producer(*(producer->profile()), path.toUtf8().constData());
+ if (!m_producer || !m_producer->is_valid()) {
+ qDebug()<<"// Cannot create envelope for producer: "<<path;
+ }
m_info = new AudioInfo(m_producer);
Q_ASSERT(m_offset >= 0);
{
Q_ASSERT(m_envelope == NULL);
- std::cout << "Loading envelope ..." << std::endl;
+ qDebug() << "Loading envelope ...";
int samplingRate = m_info->info(0)->samplingRate();
mlt_audio_format format_s16 = mlt_audio_s16;
int count = 0;
m_producer->seek(m_offset);
m_producer->set_speed(1.0); // This is necessary, otherwise we don't get any new frames in the 2nd run.
- for (int i = 0; i < m_envelopeSize; i++) {
+ for (int i = 0; i < m_envelopeSize; ++i) {
frame = m_producer->get_frame(i);
position = mlt_frame_get_position(frame->get_frame());
m_envelopeMax = sum;
}
-// std::cout << position << "|" << m_producer->get_playtime()
+// qDebug() << position << "|" << m_producer->get_playtime()
// << "-" << m_producer->get_in() << "+" << m_producer->get_out() << " ";
delete frame;
}
}
m_envelopeMean /= m_envelopeSize;
- std::cout << "Calculating the envelope (" << m_envelopeSize << " frames) took "
- << t.elapsed() << " ms." << std::endl;
+ qDebug() << "Calculating the envelope (" << m_envelopeSize << " frames) took "
+ << t.elapsed() << " ms.";
}
int64_t AudioEnvelope::loadStdDev()
{
if (m_envelopeStdDevCalculated) {
- std::cout << "Standard deviation already calculated, not re-calculating." << std::endl;
+ qDebug() << "Standard deviation already calculated, not re-calculating.";
} else {
if (m_envelope == NULL) {
}
m_envelopeStdDev = 0;
- for (int i = 0; i < m_envelopeSize; i++) {
+ for (int i = 0; i < m_envelopeSize; ++i) {
m_envelopeStdDev += sqrt((m_envelope[i]-m_envelopeMean)*(m_envelope[i]-m_envelopeMean)/m_envelopeSize);
}
m_envelopeStdDevCalculated = true;
m_envelopeMax = 0;
int64_t newMean = 0;
- for (int i = 0; i < m_envelopeSize; i++) {
+ for (int i = 0; i < m_envelopeSize; ++i) {
m_envelope[i] -= m_envelopeMean;
void AudioEnvelope::dumpInfo() const
{
if (m_envelope == NULL) {
- std::cout << "Envelope not generated, no information available." << std::endl;
+ qDebug() << "Envelope not generated, no information available.";
} else {
- std::cout << "Envelope info" << std::endl
- << "* size = " << m_envelopeSize << std::endl
- << "* max = " << m_envelopeMax << std::endl
- << "* µ = " << m_envelopeMean << std::endl
- ;
+ qDebug() << "Envelope info"
+ << "\n* size = " << m_envelopeSize
+ << "\n* max = " << m_envelopeMax
+ << "\n* µ = " << m_envelopeMean;
if (m_envelopeStdDevCalculated) {
- std::cout << "* s = " << m_envelopeStdDev << std::endl;
+ qDebug() << "* s = " << m_envelopeStdDev;
}
}
}