python实现的音乐播放器
python实现的音乐播放器
音乐播放器,原来写过一个简陋的例子,可见
https://blog.csdn.net/cnds123/article/details/137874107
那个不能拖动播放进度条上的滑块到新的位置播放。下面介绍的可以拖动播放进度条上的滑块到新的位置播放。
简单实用的音乐播放器
这个简单实用的音乐播放器,运行界面:
需要安装,PyQt6这个第三方库。
源码如下:
import sys
import os
from PyQt6.QtWidgets import (QApplication, QWidget, QLabel, QPushButton, QSlider, QHBoxLayout, QVBoxLayout, QFileDialog, QListWidget, QListWidgetItem
)
from PyQt6.QtCore import Qt, QTimer, QUrl
from PyQt6.QtGui import QPixmap, QPainter, QTransform, QPainterPath
from PyQt6.QtMultimedia import QMediaPlayer, QAudioOutputclass MP3Player(QWidget):def __init__(self):super().__init__()self.song_list = []self.current_index = -1self.init_ui()self.setup_player()def init_ui(self):self.setWindowTitle("音乐播放器 V1.0.2")self.setGeometry(300, 300, 600, 400)# 控件初始化self.playlist = QListWidget()self.playlist.itemDoubleClicked.connect(self.play_selected)self.play_btn = QPushButton("▶")self.prev_btn = QPushButton("⏮")self.next_btn = QPushButton("⏭")self.stop_btn = QPushButton("⏹")self.slider = QSlider(Qt.Orientation.Horizontal)self.time_label = QLabel("00:00 / 00:00")# 按钮样式btn_style = """QPushButton {font-size: 20px;min-width: 40px;min-height: 40px;border-radius: 20px;background: #666;color: white;}QPushButton:hover { background: #09f; }"""for btn in [self.play_btn, self.prev_btn, self.next_btn, self.stop_btn]:btn.setStyleSheet(btn_style)# 布局control_layout = QHBoxLayout()control_layout.addWidget(self.prev_btn)control_layout.addWidget(self.play_btn)control_layout.addWidget(self.next_btn)control_layout.addWidget(self.stop_btn)main_layout = QVBoxLayout()main_layout.addWidget(self.playlist)main_layout.addWidget(self.slider)main_layout.addWidget(self.time_label)main_layout.addLayout(control_layout)# 功能按钮buttons_layout = QHBoxLayout()# 添加文件按钮add_file_btn = QPushButton("添加文件")add_file_btn.clicked.connect(self.add_files)buttons_layout.addWidget(add_file_btn)# 删除文件按钮delete_file_btn = QPushButton("删除文件")delete_file_btn.clicked.connect(self.delete_file)buttons_layout.addWidget(delete_file_btn)# 帮助按钮help_btn = QPushButton("帮助")help_btn.clicked.connect(self.show_help)buttons_layout.addWidget(help_btn)main_layout.addLayout(buttons_layout)# 添加音量控制self.volume_slider = QSlider(Qt.Orientation.Horizontal)self.volume_slider.setRange(0, 100)self.volume_slider.setValue(70) # 默认音量70%self.volume_slider.valueChanged.connect(self.change_volume)volume_layout = QHBoxLayout()volume_layout.addWidget(QLabel("音量:"))volume_layout.addWidget(self.volume_slider)main_layout.addLayout(volume_layout)self.setLayout(main_layout)# 连接信号self.play_btn.clicked.connect(self.toggle_play)self.prev_btn.clicked.connect(self.play_prev)self.next_btn.clicked.connect(self.play_next)self.stop_btn.clicked.connect(self.stop)self.slider.sliderMoved.connect(self.seek_position)def delete_file(self):# 获取当前选中的项目current_items = self.playlist.selectedItems()if not current_items:return# 逐一删除所选项目for item in current_items:index = self.playlist.row(item)# 如果删除的是正在播放的歌曲,先停止播放if index == self.current_index:self.player.stop()self.current_index = -1# 从列表和界面中删除项目self.playlist.takeItem(index)self.song_list.pop(index)# 如果正在播放的歌曲在被删除的歌曲之后,需要调整索引if index < self.current_index:self.current_index -= 1# 如果删除后列表为空,重置界面if not self.song_list:self.time_label.setText("00:00 / 00:00")self.slider.setValue(0)self.update_play_button(QMediaPlayer.PlaybackState.StoppedState)def show_help(self):# 创建帮助消息help_text = """<h3>音乐播放器使用帮助</h3><p><b>播放控制:</b></p><ul><li>播放/暂停:点击 ▶/⏸ 按钮</li><li>上一首:点击 ⏮ 按钮</li><li>下一首:点击 ⏭ 按钮</li><li>停止:点击 ⏹ 按钮</li></ul><p><b>播放列表:</b></p><ul><li>添加文件:点击"添加文件"按钮</li><li>删除文件:选择文件后点击"删除文件"按钮</li><li>播放指定歌曲:双击列表中的歌曲</li></ul><p><b>其他控制:</b></p><ul><li>调整进度:拖动进度条</li><li>调整音量:拖动音量滑块</li></ul>"""# 导入需要的组件from PyQt6.QtWidgets import QMessageBox# 显示帮助对话框help_dialog = QMessageBox(self)help_dialog.setWindowTitle("帮助")help_dialog.setTextFormat(Qt.TextFormat.RichText)help_dialog.setText(help_text)help_dialog.setIcon(QMessageBox.Icon.Information)help_dialog.exec()def change_volume(self, value):self.audio_output.setVolume(value / 100.0)def setup_player(self):self.player = QMediaPlayer()self.audio_output = QAudioOutput()self.audio_output.setVolume(0.7) # 默认音量设置self.player.setAudioOutput(self.audio_output)# 定时器更新进度self.timer = QTimer()self.timer.timeout.connect(self.update_progress)self.timer.start(1000)# 播放状态变化self.player.playbackStateChanged.connect(self.update_play_button)# 添加媒体结束时的信号连接self.player.mediaStatusChanged.connect(self.handle_media_status_change)# 添加媒体时长变化的信号连接self.player.durationChanged.connect(self.duration_changed)self.player.errorOccurred.connect(self.handle_error)## def handle_media_status_change(self, status):
## # 使用 QTimer.singleShot 来避免潜在的递归调用或信号冲突
## if status == QMediaPlayer.MediaStatus.EndOfMedia:
## QTimer.singleShot(10, self.play_next)def handle_media_status_change(self, status):# 仅当媒体结束且不是暂停状态时处理if status == QMediaPlayer.MediaStatus.EndOfMedia:# 检查是否只有一首歌曲if len(self.song_list) == 1:# 只有一首歌曲时,重置到开始位置而不是尝试播放"下一首"self.player.setPosition(0)self.player.stop()self.update_play_button(QMediaPlayer.PlaybackState.StoppedState)# 重新播放if self.player.position() >= self.player.duration() - 100 and self.player.duration() > 0:self.player.setPosition(0)self.player.play()else:# 多首歌曲时,播放下一首QTimer.singleShot(10, self.play_next)def add_files(self):files, _ = QFileDialog.getOpenFileNames(self, "选择音频文件", "", "音频文件 (*.mp3 *.wav *.flac)")for file in files:if file not in self.song_list:self.song_list.append(file)self.playlist.addItem(os.path.basename(file))def play_selected(self, item):self.current_index = self.playlist.row(item)self.play()def duration_changed(self, duration):self.slider.setRange(0, duration)def handle_error(self, error, error_string):print(f"播放器错误: {error_string}")def play(self):if self.current_index < 0 and self.song_list:self.current_index = 0if 0 <= self.current_index < len(self.song_list):# 高亮当前播放的歌曲self.playlist.setCurrentRow(self.current_index)try:file = self.song_list[self.current_index]self.player.setSource(QUrl.fromLocalFile(file))self.player.play()except Exception as e:print(f"播放错误: {e}")def toggle_play(self):if self.player.isPlaying():self.player.pause()else:if self.player.position() == self.player.duration():self.play()else:self.player.play()def update_play_button(self, state):if state == QMediaPlayer.PlaybackState.PlayingState:self.play_btn.setText("⏸")else:self.play_btn.setText("▶")def update_progress(self):duration = self.player.duration()if duration > 0: # 确保时长大于0current = self.player.position()self.slider.setValue(int(current))self.time_label.setText(f"{self.format_time(current)} / {self.format_time(duration)}")def seek_position(self, position):self.player.setPosition(position)def play_prev(self):if self.song_list:self.current_index = (self.current_index - 1) % len(self.song_list)self.play()def play_next(self):if not self.song_list:return# 先停止当前播放self.player.stop()# 然后切换到下一首self.current_index = (self.current_index + 1) % len(self.song_list)# 使用短延迟来确保状态已正确更新QTimer.singleShot(50, self.play)def stop(self):self.player.stop()self.slider.setValue(0)self.time_label.setText("00:00 / 00:00")def format_time(self, ms):seconds = ms // 1000minutes = seconds // 60seconds = seconds % 60return f"{minutes:02d}:{seconds:02d}"if __name__ == "__main__":app = QApplication(sys.argv)player = MP3Player()player.show()sys.exit(app.exec())
专业级别的音乐播放器
下面这个音乐播放器,源码来源于网络,适当修改,转载记录于此。
需要安装PyQt6、python-vlc、mutagen 这3个第三方库。
还需要安装 VLC 播放器(python-vlc 是 VLC 的 Python 绑定,需依赖系统安装的 VLC),访问 VLC 官网Official download of VLC media player, the best Open Source player - VideoLAN ,下载并安装对应系统的版本。否则 程序运行时提示 vlc.dll not found。
运行效果:
源码如下:
import sys
import os
from PyQt6.QtWidgets import (QApplication, QWidget, QLabel, QPushButton, QSlider, QHBoxLayout, QVBoxLayout, QGridLayout, QFileDialog, QListWidget, QListWidgetItem, QMenu
)
from PyQt6.QtCore import Qt, QTimer, QUrl, QByteArray, pyqtSignal
from PyQt6.QtGui import QPixmap, QPainter, QTransform, QPainterPath, QFont, QColor, QLinearGradient, QBrush, QPen, QCursor, QScreen
from mutagen.mp3 import MP3
from mutagen.id3 import ID3, APIC
from PyQt6.QtMultimedia import QMediaPlayer, QAudioOutput
import vlc
import redef resource_path(relative_path):if hasattr(sys, '_MEIPASS'):return os.path.join(sys._MEIPASS, relative_path)return os.path.join(os.path.abspath("."), relative_path)# 旋转封面控件
class RotatingCover(QLabel):def __init__(self, song_path, default_cover="fm.png"):super().__init__()self.angle = 0self.pixmap = self.load_cover(song_path, default_cover)if self.
相关文章:
python实现的音乐播放器
python实现的音乐播放器 音乐播放器,原来写过一个简陋的例子,可见 https://blog.csdn.net/cnds123/article/details/137874107 那个不能拖动播放进度条上的滑块到新的位置播放。下面介绍的可以拖动播放进度条上的滑块到新的位置播放。 简单实用的音乐播放器 这个简单实用的…...
SMT贴片工艺核心优化与生产实践
内容概要 作为现代电子制造的核心环节,SMT贴片工艺的优化直接决定了产品可靠性与生产效率。本文系统性梳理工艺链中的关键控制点,从锡膏印刷精度到回流焊温度曲线,再到AOI检测技术升级,形成覆盖全流程的优化框架。针对行业普遍存…...
趣味编程:爱心
概述:五月十一号就是母亲节了,本篇博客主要是为母亲所写,这是属于程序员的浪漫,这篇博客是对母亲这么多年无微不至爱的情书。 目录 1. 效果展示 2. 源码展示 3. 代码逻辑详解 3.1 头文件与常量定义 3.2 心形曲线参数方程 3.…...
C语言—指针2
1. const 修饰变量 1.1 const修饰变量 变量被const修饰时,变量此时为常变量,本质为常量,语法上不可被修改,但是如果此时需要修改变量值,可以通过指针的方式修改。 虽然此时通过指针的方式确实修改了变量的值ÿ…...
66、微服务保姆教程(九)微服务的高可用性
微服务的高可用性与扩展 服务的高可用性 集群搭建与负载均衡。服务的故障容错与自愈。分布式事务与一致性 分布式事务的挑战与解决方案。使用 RocketMQ 实现分布式事务。微服务的监控与可观测性 metrics 和日志的收集与分析。sentinel 的监控功能。容器化与云原生 将微服务部署…...
主场景 工具栏 植物卡牌的渲染
前置知识:使用easyx图形库 1.IMAGE内存变量存储的是一张位图(图像),存储了像素数据(颜色,尺寸等) 2.loadimage(&变量名,"加载的文件路径")表示从文件中加载图像到变量中 3. saveimage("文件路径", &变…...
超详细!RxSwift 中的 BehaviorRelay 使用教程(含原理 + 示例 + 实战)
目录 前言 1.什么是 BehaviorRelay 2.基本使用方式 3.BehaviorRelay的常用API 4.BehaviorRelay 和其它类型的对比 5.BehaviorRelay的使用场景 1.绑定UITableView 2.MVVM 场景下使用 BehaviorRelay 6.使用注意事项以及建议 1.注意事项 2.使用建议总结 7.推荐阅读 前…...
【软件测试学习day7】Junit5
Junit 是单元测试框架,本期掌握 Junit5 的基础用法。 1. 注解 首先引入 Junit 依赖: <dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.9.1</version…...
前端实战中的单例模式:以医疗药敏管理为例
目录 一、什么是单例模式?1. 状态共享性 —— 数据唯一,任意访问,任意修改2. 生命周期控制性 —— 自己掌控何时创建、何时销毁 二、实战分析:医疗药敏管理系统中的单例应用三、其他场景示例单例实现:ConfigManager.ts…...
如何在 Logback 日志框架中加入链路 ID
在 Logback 日志框架中加入链路 ID,能有效将同一条链路的日志串联起来,便于追踪和排查问题。 1. 生成和管理链路 ID 要保证在整个请求链路里都能获取到链路 ID,可借助 ThreadLocal 来实现。以下是一个简单的工具类示例: import…...
晶振:智能设备的“心跳”如何支撑5G与航天
在现代科技飞速发展的时代,智能设备已深度融入我们生活的方方面面,而晶振,作为智能设备的“心跳”,正默默发挥着不可替代的关键作用。无论是翱翔太空的神舟飞船,还是人们手中须臾不离的智能手机,亦或是推动…...
【HarmonyOS 5】App Linking 应用间跳转详解
目录 什么是 App Linking 使用场景 工作原理 如何开发 1.开通 App Linking 2.确定域名 3.服务端部署 applinking.json 文件 4.AGC绑定域名 5.项目配置 6.组装聚合链接 7.解析聚合链接中的参数 其他 如何获取应用ID 什么是 App Linking App Linking 是一款创建跨…...
neo4j官方示例
目录 一、准备数据 1.执行查看结果 二、操作 1.find 单个节点 2.同上,已某个属性去查询 3. 指定查询个数 4.条件查询 5.查询某个人出演的电影汇总 6.查询tom出演的电影中,还有其他演员的信息。 7.查询跟电影(Cloud Atlas)有关的演员࿰…...
基于vueflow可拖拽元素的示例(基于官网示例的单文件示例)
效果图 代码 <template><div style"width: 100%;height: calc(100vh - 84px)"><VueFlow :nodes"nodes" :edges"edges" drop"onDrop" dragover"onDragOver" dragleave"onDragLeave"><div cl…...
minio单点登录与集成(免密)
需求:系统A里,需要实现与MINIO单点登录集成,也就是说,登录了系统A,在访问MINIO时不需要再输入用户密码就可以直接访问。 具体场景如下: 在系统A的一个页面里,配置一个按钮链接,点击…...
深入理解 Docker 网络原理:构建高效、灵活的容器网络
在现代软件开发中,Docker 已经成为了容器化技术的代名词,广泛应用于开发、测试和生产环境。Docker 使得开发者能够将应用及其依赖打包成一个轻量级的容器,并通过 Docker 容器化技术来实现高效的部署与管理。 然而,在日常使用 Dock…...
Hutool中的Pair类详解
1. Pair类概述 Hutool工具库中的Pair类是一个简单的键值对数据结构,用于存储两个相关联的对象。它类似于Map的Entry,但更加轻量级,适用于需要临时存储两个相关联数据的场景。 2. Pair类的主要特点 简单轻量:不依赖复杂的数据结…...
没有Mac,我是怎么上传IPA到App Store的?
没有Mac,我是怎么上传IPA到App Store的? 最近赶一个小项目上线,写的是一个Flutter做的App。安卓版本一晚上搞定,iOS上架却差点把人整崩。 不是我技术菜,是实在太麻烦了。最关键的,是我这台Windows笔电根本…...
RISC-V hardfault分析工具,RTTHREAD-RVBACKTRACE
RV BACKTRACE 简介 本文主要讲述RV BACKTRACE 的内部主要原理 没有接触过rvbacktrace可以看下面两篇文章,理解一下如何使用RVBACKTRACE RVBacktrace RISC-V极简栈回溯组件:https://club.rt-thread.org/ask/article/64bfe06feb7b3e29.html RVBacktra…...
c语言if else语句格式(非常详细)
在C语言中,if else 语句是一种常用的条件控制结构,用于根据不同条件执行不同的代码块。 if-else 语句的基本格式 if-else 语句的基本格式如下: if (条件) { // 如果条件为真,执行这里的代码 } else { // 如果条件为假&a…...
Logback官方文档翻译章节目录
Logback官方文档翻译章节目录 第一章 Logback简介 第二章 Logback的架构(一) Logback的架构(二) Logback的架构(三) 持续更新中…...
按摩椅的机芯类型和材质
按摩椅的机芯类型和材质是影响其按摩效果、使用寿命以及舒适度的重要因素。下面我将从这两个方面详细为你解析: 一、按摩椅机芯类型 按摩椅的“机芯”相当于它的“心脏”,决定了按摩手法、力度、覆盖范围等关键性能。 常见机芯类型(按技术发…...
HarmonyOS-hdc远程网络方式连接设备
hdc工具使用手册 1 hdc简介 hdc(OpenHarmony Device Connector)是为开发人员提供的用于设备连接调试的命令行工具,pc端开发机使用命令行工具hdc,该工具需支持部署在Windows/Linux/Mac等系统上与OpenHarmony设备(或模…...
秋招准备——2.跨时钟相关
格雷码异步FIFO跨时钟域处理 格雷码 一、格雷码规律 相邻性:相邻两个数的格雷码只有一位不同,例如: 0000 → 0001(仅最低位变化)0001 → 0011(仅次低位变化)0011 → 0010(仅最低位…...
【开源版】likeshop上门家政系统PHP版全开源+uniapp前端
一.系统介绍 likeshop_上门家政系统,PHP版本更新至2.1.1最新版,全开源,适用于上门家政场景,系统拥有用户端、师傅端、无论运营还是二开都是性价比极高的100%开源家政系统。 二.搭建环境-教程 系统环境:CentOS、 运行…...
Memgraph 的安装教程
目录 Memgraph 安装步骤1. 使用 Docker 安装 Memgraph2. 使用 Memgraph Lab3. 使用 Python 客户端连接 Memgraph Memgraph 安装步骤 1. 使用 Docker 安装 Memgraph Memgraph 可以通过 Docker 快速安装和运行。以下是使用 Docker 安装 Memgraph 的步骤: 安装 Docke…...
华为网路设备学习-21 路由过滤(filter-policy)
一、路由过滤(filter-policy) 1、用于控制路由更新、接收的一个工具 2、只能过滤路由信息,无法过滤LSA 二、路由过滤(filter-policy)与动态路由协议 1、距离矢量路由协议 RIP动态路由协议 交换的是路由表࿰…...
Mac 平台 字体Unicode范围分析器
字体Unicode范围分析器 #include <CoreText/CoreText.h> // CoreText框架头文件,用于字体处理 #include <CoreFoundation/CoreFoundation.h> // CoreFoundation框架头文件 #include <stdio.h> // 标准输入输出 #include…...
Android不能下载Gradle,解决方法Could not install Gradle distribution from.......
外网下载速度太慢导致失败,换成国内镜像,可加速下载: 官网地址:https://services.gradle.org/distributions/ 腾讯云镜像 Gradle下载地址:https://mirrors.cloud.tencent.com/gradle/ 阿里云镜像 Gradle下载地址&…...
树状数组的操作问题--Python
树状数组的操作问题 一、问题引入二、解题步骤1.思维导图2.解题步骤 三、代码实现1.代码2.复杂度分析 四、个人总结 一、问题引入 请编写程序,实现树状数组区间求前缀和、单点修改的操作。 输入格式: 输入首先给出一个正整数 n(2≤n<10^…...
FEKO许可限制
随着科技的飞速发展,电磁仿真软件在多个领域发挥着越来越重要的作用。FEKO作为一款业界领先的电磁仿真软件,广泛应用于通信、雷达、航空航天、电子对抗等领域。然而,为了确保软件使用的合规性与高效性,FEKO设定了相应的许可限制。…...
第5章 深度学习和卷积神经网络
深度学习是人工智能的一种实现方法。本章我们将考察作为深度学习的代表的卷积神经网络的数学结构。 5-1小恶魔来讲解卷积神经网络的结构 深度学习是重叠了很多层的隐藏层(中间层)的神经网络。这样的神经网络使隐藏层具有一定的结构,从而更加…...
window 显示驱动开发-处理内存段(一)
视频内存管理器 (VidMm) 负责管理 GPU 的地址空间。 在此之前,内核模式显示微型端口驱动程序 (KMD) 必须通过使用内存段将 GPU 的地址空间描述为 VidMm。 KMD 创建内存段以概括和虚拟化视频内存资源。 它可以根据硬件支持的存储器类型(例如,…...
QT实现曲线图缩放、拖拽以及框选放大
.h文件 protected: void saveAxisRange();void wheelEvent(QWheelEvent *event) override;void mousePressEvent(QMouseEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;void mouseReleaseEvent(QMouseEvent *event) override;private:QPoint m_…...
龙虎榜——20250508
上证假阴包阳的走势,量能较昨天有萎缩,在前期压力附近~ 深证这两天假阴包阳的走势,60分钟未突破昨天的高点,缺口也未补等待明天的选择~ 2025年5月8日龙虎榜行业方向分析 一、核心行业方向 军工航天(政策催化地缘驱动…...
SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理标准)-(三)完结
10 消息服务详情 10.1 本章定义实现加工管理概念所需的消息服务。这些消息已在第8.1节中初步介绍。 协议无关性:这些服务独立于所使用的消息协议,可映射至SECS-II(SEMI E5)或其他类似协议。 10.1.1 消息服务定义内容包括&#…...
算法竞赛进阶指南.次小生成树
目录 题目算法标签: K r u s k a l Kruskal Kruskal, M S T MST MST, 倍增优化, l c a lca lca思路代码*警示后人 题目 356. 次小生成树 算法标签: K r u s k a l Kruskal Kruskal, M S T MST MST, 倍增优化, l c a lca lca 思路 因为要求的是严格次小生成树, 假设最…...
ElasticSearch基本概念
为什么要使用ElasticSearch Elasticsearch 主要为系统提供搜索功能, MySQL 这类传统关系型数据库主要为系统提供数据存储功能 Elasticsearch 的优势 : 支持多种数据类型,非结构化,数值,地理信息。简单的 RESTful AP…...
普通IT的股票交易成长史--20250508晚复盘
声明:本文章的内容只是自己学习的总结,不构成投资建议。价格行为理论学习可参考简介中的几位,感谢他们的无私奉献。 送给自己的话: 仓位就是生命,绝对不能满仓!!!!&…...
SAP 交货单行项目含税金额计算报cx_sy_zerodivide处理
业务背景:SAP交货单只有数量,没有金额,所以开发报表从订单的价格按数量计算交货单的金额。 用户反馈近期报表出现异常: ****2012/12/12 清风雅雨 规格变更 Chg 修改开始 ** 修改原因:由于余数为0时,可能会报错溢出。…...
基于译码器和锁存器的运行逻辑的简易算法
74HC138 def decoder_74hc138(E1, E2, E3, A0, A1, A2):output [1] * 8 # 默认全高电平# 检查使能条件:E1和E2低电平,E3高电平if E1 0 and E2 0 and E3 1:# 计算地址索引(A2为高位,A0为低位)index (A2 <<…...
用电信息采集中的天线种类
一、4G/3G/2G 频率范围“698-960/1710-2700MHz 输入阻抗:50Ω 电压驻波比:<3.0 增益:5dBi/7dBi/9dBi; 824MHz~960MHz频段本体增益≥3.0dBi 1710MHz~2700MHz频段本体增益≥5.0dBi 天线长度225*30mm…...
2025年4月AI算力领域热点事件全景报告
目录 一、政策要闻 01欧洲央行召开会议讨论AI影响 02中国生成式AI备案制落地 03多国政府公布AI基础设施投资计划 04香港发布生成式AI技术及应用指引 05美国出口管制政策影响 06欧盟《人工智能法案》落地 07中国 “东数西算” 工程深化 08美国CHIPS法案争议 09中国发…...
数据结构-非线性结构-二叉树
概述 /** * 术语 * 根节点(root node):位于二叉树顶层的节点,没有父节点。 * 叶节点(leaf node):没有子节点的节点,其两个指针均指向 None 。 * 边(edge)&…...
Android开发补充内容
Android开发补充内容 fragment通信生命周期 Okhttp基本使用websocket Retrofit基本使用 RxJava基本使用定时任务 Hilt基本使用进阶使用例子 组件库Material ComponentsJetpack Compose fragment 通信 fragment于activity通信的一种原生方法是使用Bundle: Bundle …...
Go主要里程碑版本及其新增特性
Go 语言自 2009 年诞生以来,经历了多个里程碑版本的迭代,每个版本都引入了重要特性和改进。以下是 Go 语言的主要版本及其关键特性: Go 1.0 (2012-03-28) 首个稳定版,承诺向后兼容(Go 1 兼容性保证)。核心…...
Cut video with ffmpeg
To cut a snippet from a video based on timestamps like 02:52 to 04:20, the best tool is FFmpeg, which is fast, free, and doesn’t re-encode the video (so it keeps original quality if you don’t want re-encoding). Here’s the command you can run in a termi…...
无刷电机控制算法策略
目录 一、基础控制算法 二、高性能算法 三、无感算法 四、智能算法 五、特殊场景算法 无刷电机的核心控制算法主要包括以下类型: 一、基础控制算法 六步换向法(梯形控制) 通过霍尔传感器检测转子位置,按固定顺序切换…...
LeetCode算法题(Go语言实现)_61
题目 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金…...
Kafka消息不丢失处理
kafka作为消息中间件,吞吐量大(至于为啥吞吐量大,本文不做介绍),所以大家用的多。涉及到异构数据库更换,以及数据预处理后的迁移,基本想到的都是通过kafka。 概览图 我先画个图 生产者到kafka…...