]> git.sesse.net Git - kdenlive/commitdiff
Show audio wave when playing audio clip instead of boring white
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 13 Oct 2012 16:54:31 +0000 (18:54 +0200)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 13 Oct 2012 16:54:31 +0000 (18:54 +0200)
src/docclipbase.cpp
src/renderer.cpp

index 9b55d6b16ab75209a302b3bd320909807d055fb9..09494c9e83944845e7cba057f2c08f22df7e25eb 100644 (file)
@@ -672,6 +672,9 @@ Mlt::Producer *DocClipBase::getCloneProducer()
             if (m_properties.contains("duration")) prod->set("length", m_properties.value("duration").toInt());
             if (m_properties.contains("out"))prod->set("out", m_properties.value("out").toInt());
         }
+        if (m_clipType == AUDIO) {
+           prod->set("_audioclip", 1);
+       }
     }
     return prod;
 }
index 65706cbed34c96dc32f7cbb49acc7f5e3fcad969..7572a6b96cda27b62d73bb5fa6028b2d51fe16d1 100644 (file)
@@ -1118,9 +1118,38 @@ int Render::setProducer(Mlt::Producer *producer, int position)
     emit stopped();
     if (position == -1 && producer->get("id") == currentId) position = consumerPosition;
     if (position != -1) producer->seek(position);
+    m_fps = producer->get_fps();
     int volume = KdenliveSettings::volume();
+    if (producer->get_int("_audioclip") == 1) {
+       // This is an audio only clip, create fake multitrack to apply audiowave filter
+       Mlt::Tractor *tractor = new Mlt::Tractor();
+       Mlt::Producer *color= new Mlt::Producer(*m_mltProfile, "color:red");
+       color->set_in_and_out(0, producer->get_out());
+       tractor->set_track(*producer, 0);
+       tractor->set_track(*color, 1);
+
+       Mlt::Consumer xmlConsumer(*m_mltProfile, "xml:audio_hack");
+       if (!xmlConsumer.is_valid()) return -1;
+       xmlConsumer.set("terminate_on_pause", 1);
+       xmlConsumer.connect(tractor->parent());
+       xmlConsumer.run();
+       delete tractor;
+       delete color;
+       delete producer;
+       QString playlist = QString::fromUtf8(xmlConsumer.get("audio_hack"));
+       
+       Mlt::Producer *result = new Mlt::Producer(*m_mltProfile, "xml-string", playlist.toUtf8().constData());
+       Mlt::Filter *filter = new Mlt::Filter(*m_mltProfile, "audiowave");
+       result->attach(*filter);
+       tractor = new Mlt::Tractor();
+       tractor->set_track(*result, 0);
+       delete result;
+       delete filter;
+       producer = &(tractor->parent());
+       m_mltConsumer->connect(*producer);
+    }
+    
     producer->set("meta.volume", (double)volume / 100);
-    m_fps = producer->get_fps();
     blockSignals(false);
     m_mltConsumer->connect(*producer);