+ /* Emit any audio that is ready */
+
+ pair<shared_ptr<AudioBuffers>, DCPTime> audio = _audio_merger.pull (earliest_position);
+ if (audio.first->frames() > 0) {
+ DCPOMATIC_ASSERT (audio.second >= _last_audio_time);
+ DCPTime t = _last_audio_time;
+ while (t < audio.second) {
+ /* Silence up to the time of this new audio */
+ DCPTime block = min (DCPTime::from_seconds (0.5), audio.second - t);
+ shared_ptr<AudioBuffers> silence (new AudioBuffers (_film->audio_channels(), block.frames_round(_film->audio_frame_rate())));
+ silence->make_silent ();
+ Audio (silence, t);
+ t += block;
+ }
+
+ Audio (audio.first, audio.second);
+ _last_audio_time = audio.second;
+ }
+
+ return false;