parser.add_argument( '--sync', type=float, default=0.3, help='lyrics scroll-ahead time') parser.add_argument( '--variant', type=int, default=0, help='song variant') parser.add_argument( '--length', type=float, help='render only this long') parser.add_argument( 'ffmpeg_opts', metavar='OPTS', nargs=argparse.REMAINDER, help='ffmpeg options') opts = util.get_opts() opts.display = "surfaceless" opts.mpv_ao = "null" if not opts.video: opts.mpv_vo = "null" s = song.Song(opts.songpath) display = graphics.Display(opts.width, opts.height) import OpenGL.GLES3 as gl renderer = graphics.get_renderer().KaraokeRenderer(display) layout = layout.SongLayout(s, list(s.variants.keys())[opts.variant], renderer) # Get duration of the audio path mpv = mpvplayer.Player(display) mpv.load_song(s) duration = mpv.duration or mpv.file_duration # Now run for rendering using only video mpv = mpvplayer.Player(display, rendering=True)
from blitzloop import graphics, layout, mpvplayer, song, util parser = util.get_argparser() parser.add_argument( 'songpath', metavar='SONGPATH', help='path to the song file') parser.add_argument( 'quant', metavar='QUANT', type=int, help='quantization of the song') parser.add_argument( '--speed', default=1.0, type=float, help='divisor of the audio speed') parser.add_argument( '--position', default=0.0, type=float, help='starting position in the song, in seconds') opts = util.get_opts() s = song.Song(opts.songpath, ignore_steps=True) display = graphics.Display(1280,720) renderer = graphics.get_renderer().KaraokeRenderer(display) layout = layout.SongLayout(s, list(s.variants.keys())[-1], renderer) step = 0 cur_beat = 0 compound = None compounds = iter(s.compounds) mpv = mpvplayer.Player(None) mpv.load_song(s) mpv.set_speed(opts.speed)
def entry(): parser = util.get_argparser() parser.add_argument('songpath', metavar='SONGPATH', help='path to the song file') parser.add_argument('--show-timings', dest='st', action='store_true', help='show mpv timings') parser.add_argument('--offset', type=float, default=0.0, help='song offset') parser.add_argument('--variant', type=int, default=0, help='song variant') opts = util.get_opts() fullscreen = opts.fullscreen s = song.Song(opts.songpath) headstart = 0.3 if fullscreen: display = graphics.Display(1920, 1200, fullscreen, None) else: display = graphics.Display(1280, 720, fullscreen, None) print(display.width, display.height) mpv = mpvplayer.Player(display) mpv.load_song(s) display.set_aspect(mpv.aspect) renderer = graphics.get_renderer().KaraokeRenderer(display) song_layout = layout.SongLayout(s, list(s.variants.keys())[opts.variant], renderer) song_time = -10 speed_i = 0 pitch_i = 0 channels_i = s.channel_defaults for idx, val in enumerate(channels_i): mpv.set_channel(idx, val / 10.0) if opts.offset: mpv.seek_to(opts.offset) def render(): t = time.time() nonlocal song_time while not mpv.eof_reached(): graphics.get_renderer().clear(0, 0, 0, 1) t1 = time.time() mpv.draw() dt = time.time() - t1 mpv.poll() song_time = mpv.get_song_time() or song_time mpv.draw_fade(song_time) renderer.draw(song_time + headstart * 2**(speed_i / 12.0), song_layout) yield None t2 = time.time() if opts.st: print("T:%7.3f/%7.3f B:%7.3f FPS:%.2f draw:%.3f" % (song_time, mpv.duration, s.timing.time2beat(song_time), (1.0 / (t2 - t)), dt)) t = t2 mpv.flip() mpv.shutdown() os._exit(0) pause = False CH_UP = "+456" CH_DOWN = "-123" def key(k): nonlocal speed_i, pitch_i, pause if k == 'KEY_ESCAPE': mpv.shutdown() os._exit(0) elif k == 'f': display.toggle_fullscreen() elif k == '[' and speed_i > -12: speed_i -= 1 print("Speed: %d" % speed_i) mpv.set_speed(2**(-speed_i / 12.0)) elif k == ']' and speed_i < 12: speed_i += 1 print("Speed: %d" % speed_i) mpv.set_speed(2**(-speed_i / 12.0)) elif k == 'KEY_UP' and pitch_i < 12: pitch_i += 1 print("Pitch: %d" % pitch_i) mpv.set_pitch(2**(pitch_i / 12.0)) elif k == 'KEY_DOWN' and pitch_i > -12: pitch_i -= 1 print("Pitch: %d" % pitch_i) mpv.set_pitch(2**(pitch_i / 12.0)) elif k in CH_UP: idx = CH_UP.index(k) if len(channels_i) > idx and channels_i[idx] < 30: channels_i[idx] += 1 print("Channel %d: %d" % (idx, channels_i[idx])) mpv.set_channel(idx, channels_i[idx] / 10.0) elif k in CH_DOWN: idx = CH_DOWN.index(k) if len(channels_i) > idx and channels_i[idx] > 0: channels_i[idx] -= 1 print("Channel %d: %d" % (idx, channels_i[idx])) mpv.set_channel(idx, channels_i[idx] / 10.0) elif k == 'KEY_LEFT': mpv.seek(-10) elif k == 'KEY_RIGHT': mpv.seek(10) elif k == ' ': pause = not pause t = time.time() mpv.set_pause(pause) print("P %.03f" % (time.time() - t)) mpv.play() display.set_render_gen(render) display.set_keyboard_handler(key) display.main_loop() mpv.shutdown()
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA import OpenGL.GL as gl import os import subprocess import sys from blitzloop import ffmsvideo, graphics, layout, mpvplayer, song s = song.Song(sys.argv[1]) output = sys.argv[2] width = int(sys.argv[3]) height = int(sys.argv[4]) fps = float(sys.argv[5]) variant = int(sys.argv[6]) if len(sys.argv) > 6 else 0 headstart = 0.3 display = graphics.Display(width,height,False) renderer = layout.Renderer(display) layout = layout.SongLayout(s, list(s.variants.keys())[variant], renderer) mpv = mpvplayer.Player(None) mpv.load_song(s)