Guest User

Untitled

a guest
Aug 7th, 2024
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.14 KB | None | 0 0
  1. #include "lib.h"
  2.  
  3. #include <unordered_map>
  4. #include <set>
  5.  
  6. using namespace std;
  7. using namespace Mlt;
  8.  
  9. /// Gets multiple, previously linked and synced assets
  10. /// Joins all audio together, but focuses only the video tracks whose audio track is more active
  11. Mlt::Consumer *podcast_mix(std::vector<Mlt::Tractor> tractors, PodcastConfiguration config) {
  12.     auto profile = Mlt::Profile();
  13.     auto playlist = Mlt::Playlist();
  14.  
  15.     // {
  16.     //   sample number 0: [
  17.     //     (track1, average 1dB),
  18.     //     (track2, average 0dB)
  19.     //   ],
  20.     //   sample number 1: [...]
  21.     // }
  22.     std::unordered_map<int, std::vector<std::set<Mlt::Track, int>>> tracksSamplesAverages();
  23.  
  24.     auto i = 0;
  25.     for (auto& tractor : tractors) {
  26.         // Incorrect code. Just for reference. This should be get_track()
  27.         // But how am I supposed to get the audio and video specifically and not just get_track(someInteger)?
  28.         auto audio = tractor.get_audio_track();
  29.         auto video = tractor.get_video_track();
  30.         // This code would divide audio in provided-second length (default: 0.5sec)
  31.         // And writes video accordingly
  32.         auto audio_samples = audio.divide(config.sampleRate);
  33.         auto video_samples = audio.divide(config.sampleRate);
  34.  
  35.         auto j = 0;
  36.         for (auto& audio_sample : audio_samples) {
  37.             tracksSamplesAverages[i].add(
  38.                 (audio_sample, calculate_average_db(&audio_sample))
  39.             );
  40.  
  41.             j++;
  42.         }
  43.  
  44.         i++;
  45.     }
  46.  
  47.     // Write video
  48.     // Sort hashmap
  49.  
  50.     for (auto& sample : tracksSamplesAverages) {
  51.         // Sort tracks by average db
  52.         auto track = std::sort(std::map(sample, [_, db] db));
  53.         // Get biggest dB value
  54.         auto video_track = tractors[track[0]].get_video_track();
  55.         playlist.add(video_track);
  56.     }
  57.  
  58.     // Finally, "join" all audio tracks together
  59.  
  60.     playlist.add(std::map(tractors, |tractor| tractor.get_audio_track()));
  61.  
  62.     // Connect to Consumer and return
  63.  
  64.     auto consumer = Mlt::Factory::consumer(profile, nullptr, nullptr);
  65.  
  66.     consumer.connect(playlist);
  67.  
  68.     return consumer;
  69. };
  70.  
Advertisement
Add Comment
Please, Sign In to add comment