RenPy中文空间

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 300|回复: 2

[原创] [教程]音乐进度条显示,全长和已播放进度,附加播放/暂停.

[复制链接]
发表于 2021-2-15 13:27:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 blackpineapple 于 2021-2-23 15:12 编辑

下面代码的主要功能是把音乐的播放位置用进度条的形式显示出来。
使用AudioPositionValue来确定现在音乐播放的位置数值,参数是channel,缺省频道是music。

renpy.music.get_duration 函数可以获得设定channel播放音乐的总长度,单位是秒,类型是float。
renpy.music.get_pos 函数可以获得设定channel当前播放进度,单位是秒,类型是float。

audio相关函数请参考:https://www.renpy.cn/doc/audio.html#functions

convert_format 函数入参是秒,可以转换为12:01这样的形式。
renpy.music.get_pos函数在音乐是mp3的时候会不能正常工作,也不知道是为什么。

[RenPy] 纯文本查看 复制代码
init python:
    def get_audio_duration():
        duration = renpy.music.get_duration()
        return convert_format(int(duration))

    def get_audio_position():
        music_pos = renpy.music.get_pos()
        # music_pos can be None
        if music_pos:
            return convert_format(int(music_pos))
        return "0"

    def convert_format(second):
        minute = second // 60
        second = second % 60
        result = ""
        if minute:
            result = str(minute) + ":"
            if second < 10:
                result += '0'
        result += str(second)
        return result

screen audio:
    timer 0.1 action [Hide('audio'), Show('audio')]
    vbox:
        xpos 0.5
        ypos 0.2
        python:
            duration = get_audio_duration()
            music_pos = get_audio_position()
        hbox:
            spacing 20
            text music_pos
            text "/"
            text duration

        bar:
            value AudioPositionValue("music", update_interval=0.1)
            xalign 0.5
            yalign 0.5
            xsize 500
            xmaximum 500


本帖参考了:
https://lemmasoft.renai.us/forums/viewtopic.php?t=40989

评分

参与人数 1活力 +60 干货 +3 收起 理由
被诅咒的章鱼 + 60 + 3 感谢分享!

查看全部评分

 楼主| 发表于 2021-2-17 12:26:06 | 显示全部楼层
本帖最后由 blackpineapple 于 2021-2-17 12:27 编辑

实现了一个播放,暂停合一的按钮,基于文档里的music room代码。
[RenPy] 纯文本查看 复制代码
init python:

    #  步骤1,创建一个MusicRoom实例。
    mr = MusicRoom(fadeout=1.0)

    # Step 2. 添加音乐文件。
    mr.add("audio/1.ogg", always_unlocked=True)
    mr.add("audio/2.ogg", always_unlocked=True)
    mr.add("audio/3.ogg", always_unlocked=True)

    class PlayerButton:
        def __init__(self, channel='music', icon_path='gui/', mr=mr):
            self.channel = channel
            self.icon_path = icon_path
            self.mr = mr

        def get_icon(self):
            if not renpy.music.is_playing() and not renpy.music.get_pause():
                return self.icon_path + "play_%s.png"
            if renpy.music.get_pause(self.channel):
                return self.icon_path + "play_%s.png"
            return self.icon_path + "pause_%s.png"

        def click(self):
            if not renpy.music.is_playing() and not renpy.music.get_pause():
                self.mr.play()
                return
            renpy.music.set_pause(not renpy.music.get_pause(self.channel),
                channel=self.channel)

    play_button = PlayerButton(mr=mr)

label start:
    show screen music_room
    pause

# Step 3. 创建音乐空间界面。
screen music_room:
    timer 1 action [Hide('music_room'), Show('music_room')]

    frame:
        has vbox

        # 每条音轨的播放按钮。
        textbutton "Track 1" action mr.Play("audio/1.ogg")
        textbutton "Track 2" action mr.Play("audio/2.ogg")
        textbutton "Track 3" action mr.Play("audio/3.ogg")

        null height 20

        # 切换音轨按钮。
        textbutton "Next" action mr.Next()
        textbutton "Previous" action mr.Previous()

        null height 20

        # 用户退出音乐空间的按钮。
        textbutton "Main Menu" action ShowMenu("main_menu")
        python:
            duration = str(int(renpy.music.get_duration()))
            music_pos = renpy.music.get_pos()
            if not music_pos:
                music_pos = 0
            music_pos = str(int(music_pos))
        text duration
        text music_pos
        bar:
            value AudioPositionValue(channel='music', update_interval=0.1)
            xalign 0.5
            yalign 0.5
            xsize 500
            xmaximum 500

        fixed:
            pos(0.5, 0.6)
            hbox:
                vbox:
                    text str(renpy.music.get_pause())
                    imagebutton:
                        auto play_button.get_icon()
                        focus_mask True
                        action Function(play_button.click)

    # 音乐空间的音乐播放入口。
    on "replace" action mr.Stop()

    # 离开时恢复主菜单的音乐。
    on "replaced" action Play("music", "track1.ogg")

评分

参与人数 1干货 +3 收起 理由
BuErShen + 3 版区有你更精彩(*^_^*)

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2021-2-17 19:54:35 | 显示全部楼层
以后,山无棱、天地合,再在Q群里呼叫偶上线。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|RenPy中文空间 ( 苏ICP备17067825号 | 苏公网安备 32092302000068号 )

GMT+8, 2021-5-12 03:35 , Processed in 0.046116 second(s), 13 queries , File On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表