mirror of
https://github.com/hanxi/xiaomusic.git
synced 2025-12-12 15:48:13 +08:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b5ab8e398a | ||
|
|
8907e41818 |
@@ -48,10 +48,7 @@ docker run -e MI_USER='小米账号' \
|
|||||||
|
|
||||||
启动成功后,在 web 页面可以配置 MI_DID, MI_HARDWARE, XIAOMUSIC_SEARCH, XIAOMUSIC_PROXY 参数。
|
启动成功后,在 web 页面可以配置 MI_DID, MI_HARDWARE, XIAOMUSIC_SEARCH, XIAOMUSIC_PROXY 参数。
|
||||||
|
|
||||||
### ✨ 修改8090端口
|
|
||||||
|
|
||||||
如果需要修改 8090 端口为其他端口,比如 5678,需要这样配,3个数字都需要是 5678
|
如果需要修改 8090 端口为其他端口,比如 5678,需要这样配,3个数字都需要是 5678
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
services:
|
services:
|
||||||
xiaomusic:
|
xiaomusic:
|
||||||
@@ -294,8 +291,6 @@ services:
|
|||||||
- XIAOMUSIC_KEYWORDS_PLAY 用来播放歌曲的口令前缀,默认是 "播放歌曲,放歌曲" ,可以用英文逗号分割配置多个
|
- XIAOMUSIC_KEYWORDS_PLAY 用来播放歌曲的口令前缀,默认是 "播放歌曲,放歌曲" ,可以用英文逗号分割配置多个
|
||||||
- XIAOMUSIC_KEYWORDS_STOP 用来关机的口令,默认是 "关机,暂停,停止" ,可以用英文逗号分割配置多个。
|
- XIAOMUSIC_KEYWORDS_STOP 用来关机的口令,默认是 "关机,暂停,停止" ,可以用英文逗号分割配置多个。
|
||||||
- XIAOMUSIC_KEYWORDS_PLAYLOCAL 用来播放本地歌曲的口令前缀,本地找不到时不会下载歌曲,默认是 "播放本地歌曲,本地播放歌曲" ,可以用英文逗号分割配置多个。
|
- XIAOMUSIC_KEYWORDS_PLAYLOCAL 用来播放本地歌曲的口令前缀,本地找不到时不会下载歌曲,默认是 "播放本地歌曲,本地播放歌曲" ,可以用英文逗号分割配置多个。
|
||||||
- XIAOMUSIC_ENABLE_FUZZY_MATCH 设为 true 时开启模糊匹配(默认),设为 false 时关闭模糊匹配,支持模糊匹配歌名和歌单名。 具体见 <https://github.com/hanxi/xiaomusic/issues/52>
|
|
||||||
- XIAOMUSIC_FUZZY_MATCH_CUTOFF 设置模糊搜索匹配的最低相似度阈值(默认0.6,可以配0到1直接的小数),越小越模糊,越大越精准。具体见 <https://github.com/hanxi/xiaomusic/issues/52>
|
|
||||||
|
|
||||||
## 讨论区
|
## 讨论区
|
||||||
|
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
{
|
|
||||||
"hardware": "L07A",
|
|
||||||
"account": "",
|
|
||||||
"password": "",
|
|
||||||
"mi_did": "",
|
|
||||||
"cookie": "",
|
|
||||||
"verbose": false,
|
|
||||||
"music_path": "music",
|
|
||||||
"conf_path": null,
|
|
||||||
"hostname": "192.168.2.5",
|
|
||||||
"port": 8090,
|
|
||||||
"proxy": null,
|
|
||||||
"search_prefix": "ytsearch:",
|
|
||||||
"ffmpeg_location": "./ffmpeg/bin",
|
|
||||||
"active_cmd": "play,random_play,playlocal,play_music_list,stop",
|
|
||||||
"exclude_dirs": "@eaDir",
|
|
||||||
"music_path_depth": 10,
|
|
||||||
"disable_httpauth": true,
|
|
||||||
"httpauth_username": "admin",
|
|
||||||
"httpauth_password": "admin",
|
|
||||||
"music_list_url": "",
|
|
||||||
"music_list_json": "",
|
|
||||||
"disable_download": false,
|
|
||||||
"use_music_api": false,
|
|
||||||
"log_file": "/tmp/xiaomusic.txt",
|
|
||||||
"fuzzy_match_cutoff": 0.6,
|
|
||||||
"enable_fuzzy_match": true
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "xiaomusic"
|
name = "xiaomusic"
|
||||||
version = "0.1.81"
|
version = "0.1.78"
|
||||||
description = "Play Music with xiaomi AI speaker"
|
description = "Play Music with xiaomi AI speaker"
|
||||||
authors = [
|
authors = [
|
||||||
{name = "涵曦", email = "im.hanxi@gmail.com"},
|
{name = "涵曦", email = "im.hanxi@gmail.com"},
|
||||||
@@ -19,12 +19,6 @@ requires-python = ">=3.10"
|
|||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
license = {text = "MIT"}
|
license = {text = "MIT"}
|
||||||
|
|
||||||
[project.urls]
|
|
||||||
Homepage = "https://github.com/hanxi/xiaomusic"
|
|
||||||
|
|
||||||
[project.scripts]
|
|
||||||
xiaogpt = "xiaomusic.cli:main"
|
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["pdm-backend"]
|
requires = ["pdm-backend"]
|
||||||
build-backend = "pdm.backend"
|
build-backend = "pdm.backend"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
__version__ = "0.1.81"
|
__version__ = "0.1.78"
|
||||||
|
|||||||
@@ -1,21 +1,9 @@
|
|||||||
import argparse
|
import argparse
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
from xiaomusic import (
|
|
||||||
__version__,
|
|
||||||
)
|
|
||||||
from xiaomusic.config import Config
|
from xiaomusic.config import Config
|
||||||
from xiaomusic.xiaomusic import XiaoMusic
|
from xiaomusic.xiaomusic import XiaoMusic
|
||||||
|
|
||||||
LOGO = r"""
|
|
||||||
__ __ _ __ __ _
|
|
||||||
\ \/ / (_) __ _ ___ | \/ | _ _ ___ (_) ___
|
|
||||||
\ / | | / _` | / _ \ | |\/| | | | | | / __| | | / __|
|
|
||||||
/ \ | | | (_| | | (_) | | | | | | |_| | \__ \ | | | (__
|
|
||||||
/_/\_\ |_| \__,_| \___/ |_| |_| \__,_| |___/ |_| \___|
|
|
||||||
{}
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
@@ -57,8 +45,6 @@ def main():
|
|||||||
help="ffmpeg bin path",
|
help="ffmpeg bin path",
|
||||||
)
|
)
|
||||||
|
|
||||||
print(LOGO.format(f"XiaoMusic v{__version__} by: github.com/hanxi"))
|
|
||||||
|
|
||||||
options = parser.parse_args()
|
options = parser.parse_args()
|
||||||
config = Config.from_options(options)
|
config = Config.from_options(options)
|
||||||
|
|
||||||
|
|||||||
@@ -107,11 +107,6 @@ class Config:
|
|||||||
keywords_stop = os.getenv("XIAOMUSIC_KEYWORDS_STOP", "关机,暂停,停止")
|
keywords_stop = os.getenv("XIAOMUSIC_KEYWORDS_STOP", "关机,暂停,停止")
|
||||||
self.append_keyword(keywords_stop, "stop")
|
self.append_keyword(keywords_stop, "stop")
|
||||||
|
|
||||||
# 保存配置到 config-example.json 文件
|
|
||||||
# with open("config-example.json", "w") as f:
|
|
||||||
# data = asdict(self)
|
|
||||||
# json.dump(data, f, ensure_ascii=False, indent=4)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_options(cls, options: argparse.Namespace) -> Config:
|
def from_options(cls, options: argparse.Namespace) -> Config:
|
||||||
config = {}
|
config = {}
|
||||||
|
|||||||
@@ -311,8 +311,8 @@ class XiaoMusic:
|
|||||||
async def force_stop_xiaoai(self):
|
async def force_stop_xiaoai(self):
|
||||||
ret = await self.mina_service.player_pause(self.device_id)
|
ret = await self.mina_service.player_pause(self.device_id)
|
||||||
self.log.debug(f"force_stop_xiaoai player_pause ret:{ret}")
|
self.log.debug(f"force_stop_xiaoai player_pause ret:{ret}")
|
||||||
# ret = await self.mina_service.player_stop(self.device_id)
|
ret = await self.mina_service.player_stop(self.device_id)
|
||||||
# self.log.debug(f"force_stop_xiaoai player_stop ret:{ret}")
|
self.log.debug(f"force_stop_xiaoai player_stop ret:{ret}")
|
||||||
|
|
||||||
# 是否在下载中
|
# 是否在下载中
|
||||||
def is_downloading(self):
|
def is_downloading(self):
|
||||||
@@ -703,7 +703,6 @@ class XiaoMusic:
|
|||||||
self.log.info(f"根据【{name}】找到歌曲【{real_name}】")
|
self.log.info(f"根据【{name}】找到歌曲【{real_name}】")
|
||||||
return real_name
|
return real_name
|
||||||
self.log.info(f"没找到歌曲【{name}】")
|
self.log.info(f"没找到歌曲【{name}】")
|
||||||
return name
|
|
||||||
|
|
||||||
# 播放本地歌曲
|
# 播放本地歌曲
|
||||||
async def playlocal(self, **kwargs):
|
async def playlocal(self, **kwargs):
|
||||||
@@ -760,7 +759,7 @@ class XiaoMusic:
|
|||||||
await self.do_tts(f"本地不存在歌曲{name}")
|
await self.do_tts(f"本地不存在歌曲{name}")
|
||||||
return
|
return
|
||||||
await self.download(search_key, name)
|
await self.download(search_key, name)
|
||||||
self.log.info(f"正在下载中 {search_key} {name}")
|
self.log.info("正在下载中 %s", search_key + ":" + name)
|
||||||
await self.download_proc.wait()
|
await self.download_proc.wait()
|
||||||
# 把文件插入到播放列表里
|
# 把文件插入到播放列表里
|
||||||
self.add_download_music(name)
|
self.add_download_music(name)
|
||||||
@@ -855,7 +854,7 @@ class XiaoMusic:
|
|||||||
async def stop(self, **kwargs):
|
async def stop(self, **kwargs):
|
||||||
self._playing = False
|
self._playing = False
|
||||||
if kwargs.get("arg1", "") != "notts":
|
if kwargs.get("arg1", "") != "notts":
|
||||||
await self.do_tts("收到指令,再见")
|
await self.do_tts("收到关机口令,再见")
|
||||||
if self._next_timer:
|
if self._next_timer:
|
||||||
self._next_timer.cancel()
|
self._next_timer.cancel()
|
||||||
self.log.info("定时器已取消")
|
self.log.info("定时器已取消")
|
||||||
|
|||||||
Reference in New Issue
Block a user