Ejemplo n.º 1
0
    def launch_music(self, music_wrapper, start_from=0):
        assert music_wrapper.is_ready()

        uri = music_wrapper.uri()

        self.log.info("bot: play music " + music_wrapper.format_debug_string())

        if var.config.getboolean('bot', 'announce_current_music'):
            self.send_channel_msg(music_wrapper.format_current_playing())

        if var.config.getboolean('debug', 'ffmpeg'):
            ffmpeg_debug = "debug"
        else:
            ffmpeg_debug = "warning"

        channels = 2 if self.stereo else 1
        self.pcm_buffer_size = 960 * channels

        command = ("ffmpeg", '-v', ffmpeg_debug, '-nostdin', '-i',
                   uri, '-ss', f"{start_from:f}", '-ac', str(channels), '-f', 's16le', '-ar', '48000', '-')
        self.log.debug("bot: execute ffmpeg command: " + " ".join(command))

        # The ffmpeg process is a thread
        # prepare pipe for catching stderr of ffmpeg
        if self.redirect_ffmpeg_log:
            pipe_rd, pipe_wd = util.pipe_no_wait()  # Let the pipe work in non-blocking mode
            self.thread_stderr = os.fdopen(pipe_rd)
        else:
            pipe_rd, pipe_wd = None, None

        self.thread = sp.Popen(command, stdout=sp.PIPE, stderr=pipe_wd, bufsize=self.pcm_buffer_size)
Ejemplo n.º 2
0
    def resume(self):
        if var.playlist.current_index == -1:
            var.playlist.next()

        music_wrapper = var.playlist.current_item()

        if not music_wrapper or not music_wrapper.id == self.pause_at_id or not music_wrapper.is_ready(
        ):
            self.is_pause = False
            self.playhead = 0
            return

        if var.config.getboolean('debug', 'ffmpeg'):
            ffmpeg_debug = "debug"
        else:
            ffmpeg_debug = "warning"

        self.log.info("bot: resume music at %.2f seconds" % self.playhead)

        uri = music_wrapper.uri()

        command = ("ffmpeg", '-v', ffmpeg_debug, '-nostdin', '-ss',
                   "%f" % self.playhead, '-i', uri, '-ac', '1', '-f', 's16le',
                   '-ar', '48000', '-')

        if var.config.getboolean('bot', 'announce_current_music'):
            self.send_channel_msg(
                var.playlist.current_item().format_current_playing())

        self.log.info("bot: execute ffmpeg command: " + " ".join(command))
        # The ffmpeg process is a thread
        # prepare pipe for catching stderr of ffmpeg
        pipe_rd, pipe_wd = os.pipe()
        util.pipe_no_wait(pipe_rd)  # Let the pipe work in non-blocking mode
        self.thread_stderr = os.fdopen(pipe_rd)
        self.thread = sp.Popen(command,
                               stdout=sp.PIPE,
                               stderr=pipe_wd,
                               bufsize=480)
        self.last_volume_cycle_time = time.time()
        self.pause_at_id = ""
        self.is_pause = False
Ejemplo n.º 3
0
    def launch_music(self):
        if var.playlist.is_empty():
            return
        assert self.wait_for_downloading is False

        music_wrapper = var.playlist.current_item()
        uri = music_wrapper.uri()

        self.log.info("bot: play music " + music_wrapper.format_debug_string())

        if var.config.getboolean('bot', 'announce_current_music'):
            self.send_msg(music_wrapper.format_current_playing())

        if var.config.getboolean('debug', 'ffmpeg'):
            ffmpeg_debug = "debug"
        else:
            ffmpeg_debug = "warning"

        command = ("ffmpeg", '-v', ffmpeg_debug, '-nostdin', '-i', uri, '-ac',
                   '1', '-f', 's16le', '-ar', '48000', '-')
        self.log.debug("bot: execute ffmpeg command: " + " ".join(command))

        # The ffmpeg process is a thread
        # prepare pipe for catching stderr of ffmpeg
        pipe_rd, pipe_wd = os.pipe()
        util.pipe_no_wait(pipe_rd)  # Let the pipe work in non-blocking mode
        self.thread_stderr = os.fdopen(pipe_rd)
        self.thread = sp.Popen(command,
                               stdout=sp.PIPE,
                               stderr=pipe_wd,
                               bufsize=480)
        self.is_pause = False
        self.read_pcm_size = 0
        self.song_start_at = -1
        self.playhead = 0
        self.last_volume_cycle_time = time.time()