《四》实现动态时间、歌曲信息动态字幕和总结

上一期我们实现了切换歌曲,进度条等操作,那么这一期就是最后一期,把所有操作都实现。

实现动态时间:

void MainWindow::HandleLCDNumberTimeChangeFunc(qint64 duration)
{
    int Second=duration/1000;
    int Minute=Second/60;
    Second=Second%60;
    QString strSongTime=QString::asprintf("%d%d",Minute,Second);
    ui->lcdNumber_time->display(strSongTime);
}

 首先获取歌曲的总时长(s),根据总秒数,获取分钟及剩余秒数。然后把总时间放到显示上就可以了。

void MainWindow::HandleProgressTimeChangeFunc(qint64 dration)
{
    //设置进度条最大值
    ui->horizontalSlider_Play->setMaximum(dration);

}

void MainWindow::HandlePositionChangeFunc(qint64 position)
{
    if(ui->horizontalSlider_Play->isSliderDown()){
        return;
    }
    //设置滑动条位置
    ui->horizontalSlider_Play->setSliderPosition(position);
}

这两个函数就是实现根据进度条的变化调整播放歌曲位置。

实现动态展示:

实现动态字幕显示我们要专门去定义变量和槽函数:

public:
    //处理动态字幕
    QString strTitles;
    int iTitleChar;

    //自定义槽函数
public slots:
    //处理播放歌曲字幕
    void TitleMoveCaptionChar();

还要添加一个控件去放置这个字幕。

直接在ui文件中添加一个label就可以,把他的风格设置成跟下面的一样即可:

风格:

font-size:14px;\ncolor:rgb(255,255,255);\nbackground-color: rgba(255, 255,255, 50);

我们在cpp文件里去实现:

void MainWindow::HandleProgressTimeChangeFunc(qint64 dration)
{
    //设置进度条最大值
    ui->horizontalSlider_Play->setMaximum(dration);

    int Value=P_Playerlist->currentIndex();
    QTextBlock qtextblock=docTextObject->findBlockByNumber(Value);
    QString strTtile=qtextblock.text();
    ui->label_MusicDisp->setText(strTtile);
}

我们之前定义的进度条最大值,下面value是用来获取当前歌曲的id,再通过QTextBlock函数获取文本内容,放到我们设置的label中。

这样的话我们会发现这个字幕不是动态显示的,

所以我们要在构造函数里去实现。

//处理标题显示歌曲信息显示字幕
    ui->label_MusicDisp->setFont(QFont("宋体",14,QFont::Normal));
    strTitles=ui->label_MusicDisp->text();
    //使用定时器来移动标题
    QTimer *p_moveTitle=new QTimer(this);
    connect(p_moveTitle,SIGNAL(timeout()),this,SLOT(TitleMoveCaptionChar()));
    p_moveTitle->start(1000);
  • 设置要显示文本的格式
  • 用定时器来连接这个显示字幕的槽函数
  • 定时器,启动!

这样就能够完成了。

进度条美化:

在构造函数中:

QString qss= "QSlider{"
                   "border: 1px solid rgb(16, 135, 209);"
                   "background: rgba(248,248,255,180);"
                   "border-radius: 6px; }"
                   "QSlider::chunk:enabled {"
                   "border-radius: 4px; "
                   "background: qlineargradient(x1:0, y1:0, x2:1, y2:0" ;
    qss.append(");}");
    ui->horizontalSlider_Play->setStyleSheet(qss);

可以设置很多风格,大家可以根据自己喜欢的来。

总结:

新手尝试,还有很多地方不足,比如:当你搜索的歌曲无法播放时,进程可能会卡死退出,也没有任何提示,搜是搜得到,后续也会慢慢去改进。

本篇内容也是对之前学习的总结,也能帮助更好的去学习如何使用api去实现自己想要的功能。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Python实现基于剪映草稿的图片和字幕文件的时间对齐,你可以使用剪映API和Python编程语言进行开发。以下是一个简单的示例代码,演示如何使用剪映API来实现该功能: ```python import requests # 剪映API的接口地址 url = "https://api.video.qq.com/filmora/v1/project/export" # 剪映草稿ID draft_id = "your_draft_id" # 图片文件列表 image_files = ["image1.jpg", "image2.jpg", "image3.jpg"] # 字幕文本列表 subtitle_texts = ["Subtitle 1", "Subtitle 2", "Subtitle 3"] # 时间对齐参数列表,单位为毫秒 time_alignments = [0, 1000, 2000] # 示例中每个图片和字幕时间对齐参数为1秒 # 发送请求,生成视频 response = requests.post(url, json={ "draft_id": draft_id, "image_files": image_files, "subtitle_texts": subtitle_texts, "time_alignments": time_alignments }) # 处理响应结果 if response.status_code == 200: video_url = response.json()["video_url"] print("视频生成成功,下载链接:", video_url) else: print("视频生成失败,错误信息:", response.text) ``` 在上述示例中,你需要将`your_draft_id`替换为你的剪映草稿ID。然后,将图片文件列表、字幕文本列表和时间对齐参数列表替换为你要对齐的具体内容。 此示例使用requests库发送POST请求到剪映API的导出接口。API将根据提供的图像文件、字幕文本和时间对齐参数生成视频,并返回视频的下载链接。你可以根据需要调整时间对齐参数来实现图片和字幕的对齐效果。 请确保在使用剪映API之前,你已经获得了相应的API密钥和访问权限。具体的API文档和使用说明可以在剪映API的官方网站上找到。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值