docs: 将 issues 转成 vitepress 网站
This commit is contained in:
parent
9847f7afc2
commit
3468e4a979
1
.gitignore
vendored
1
.gitignore
vendored
@ -170,3 +170,4 @@ setting.json
|
||||
cache
|
||||
tmp/
|
||||
xiaomusic.log.txt
|
||||
node_modules
|
||||
|
59
docs/.vitepress/config.mts
Normal file
59
docs/.vitepress/config.mts
Normal file
@ -0,0 +1,59 @@
|
||||
import { defineConfig } from 'vitepress'
|
||||
import AutoSidebar from 'vite-plugin-vitepress-auto-sidebar';
|
||||
import GitHubIssuesPlugin from './vitepress-plugin-github-issues.mts';
|
||||
|
||||
// https://vitepress.dev/reference/site-config
|
||||
export default defineConfig({
|
||||
title: "XiaoMusic",
|
||||
description: "XiaoMusic doc",
|
||||
themeConfig: {
|
||||
// https://vitepress.dev/reference/default-theme-config
|
||||
nav: [
|
||||
{ text: 'Home', link: '/' },
|
||||
{ text: 'Examples', link: '/markdown-examples' }
|
||||
],
|
||||
|
||||
socialLinks: [
|
||||
{ icon: 'github', link: 'https://github.com/hanxi/xiaomusic' }
|
||||
]
|
||||
},
|
||||
sitemap: {
|
||||
hostname: 'https://docs.x.hanxi.cc'
|
||||
},
|
||||
lastUpdated: true,
|
||||
markdown: {
|
||||
lineNumbers: false, // 关闭代码块行号显示
|
||||
// 自定义 markdown-it 插件
|
||||
config: (md) => {
|
||||
md.renderer.rules.link_open = (tokens, idx, options, env, self) => {
|
||||
const aIndex = tokens[idx].attrIndex('target');
|
||||
if (aIndex < 0) {
|
||||
tokens[idx].attrPush(['target', '_self']); // 将默认行为改为不使用 _blank
|
||||
} else {
|
||||
tokens[idx].attrs![aIndex][1] = '_self'; // 替换 _blank 为 _self
|
||||
}
|
||||
return self.renderToken(tokens, idx, options);
|
||||
};
|
||||
},
|
||||
},
|
||||
logLevel: 'warn',
|
||||
vite:{
|
||||
plugins: [
|
||||
AutoSidebar({
|
||||
path:'.',
|
||||
collapsed: true,
|
||||
titleFromFile: true,
|
||||
}),
|
||||
GitHubIssuesPlugin({
|
||||
repo: 'hanxi/xiaomusic',
|
||||
token: '',
|
||||
replaceRules:[
|
||||
{
|
||||
baseUrl: 'https://github.com/hanxi/xiaomusic/issues',
|
||||
targetUrl: '/issues',
|
||||
},
|
||||
],
|
||||
}),
|
||||
],
|
||||
}
|
||||
})
|
228
docs/.vitepress/vitepress-plugin-github-issues.mts
Normal file
228
docs/.vitepress/vitepress-plugin-github-issues.mts
Normal file
@ -0,0 +1,228 @@
|
||||
// vitepress-plugin-github-issues.mts
|
||||
|
||||
import axios from 'axios';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import type { Plugin } from 'vitepress';
|
||||
|
||||
interface ReplaceRule {
|
||||
baseUrl: string; // 要匹配的基地址
|
||||
targetUrl: string; // 替换后的目标地址
|
||||
}
|
||||
|
||||
interface GitHubIssuesPluginOptions {
|
||||
repo: string; // GitHub repository info in the format 'owner/repo'
|
||||
token: string;
|
||||
replaceRules: ReplaceRule[];
|
||||
}
|
||||
|
||||
async function fetchAllIssues(repo: string, token: string): Promise<any[]> {
|
||||
const maxRetries = 3; // 最大重试次数
|
||||
let attempt = 0;
|
||||
const allIssues: any[] = [];
|
||||
let page = 1;
|
||||
|
||||
while (true) {
|
||||
while (attempt < maxRetries) {
|
||||
try {
|
||||
const response = await axios.get(`https://api.github.com/repos/${repo}/issues`, {
|
||||
headers: {
|
||||
Authorization: `token ${token}`
|
||||
},
|
||||
params: {
|
||||
page: page,
|
||||
per_page: 100 // 每页最多返回100条记录
|
||||
}
|
||||
});
|
||||
|
||||
// 如果没有更多问题了,退出循环
|
||||
if (response.data.length === 0) {
|
||||
return allIssues;
|
||||
}
|
||||
|
||||
allIssues.push(...response.data);
|
||||
page++; // 下一页
|
||||
attempt = 0; // 重置尝试次数
|
||||
break; // 退出尝试循环
|
||||
} catch (error) {
|
||||
if (error.response && error.response.status === 503) {
|
||||
console.error('服务不可用,正在重试...');
|
||||
attempt++;
|
||||
const waitTime = Math.pow(2, attempt) * 1000; // 指数等待时间
|
||||
await new Promise(resolve => setTimeout(resolve, waitTime));
|
||||
} else {
|
||||
throw error; // 如果不是503错误,抛出错误并停止重试
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (attempt >= maxRetries) {
|
||||
throw new Error('最大重试次数已达,请检查 API 状态(可能是请求过于频繁)');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchIssueComments(repo: string, issueNumber: number, token: string): Promise<any[]> {
|
||||
const maxRetries = 3;
|
||||
let attempt = 0;
|
||||
const allComments: any[] = [];
|
||||
let page = 1;
|
||||
|
||||
while (true) {
|
||||
while (attempt < maxRetries) {
|
||||
try {
|
||||
const response = await axios.get(
|
||||
`https://api.github.com/repos/${repo}/issues/${issueNumber}/comments`,
|
||||
{
|
||||
headers: {
|
||||
Authorization: `token ${token}`,
|
||||
},
|
||||
params: {
|
||||
page: page,
|
||||
per_page: 100,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
if (response.data.length === 0) {
|
||||
return allComments; // 如果没有更多评论,退出循环
|
||||
}
|
||||
|
||||
allComments.push(...response.data);
|
||||
page++;
|
||||
attempt = 0;
|
||||
break; // 成功获取评论数据,退出重试
|
||||
} catch (error: any) {
|
||||
if (error.response && error.response.status === 503) {
|
||||
console.error('服务不可用,正在重试...');
|
||||
attempt++;
|
||||
const waitTime = Math.pow(2, attempt) * 1000;
|
||||
await new Promise((resolve) => setTimeout(resolve, waitTime));
|
||||
} else {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (attempt >= maxRetries) {
|
||||
throw new Error('最大重试次数已达,请检查 API 状态(可能是请求过于频繁)');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function clearDirectory(dir: string) {
|
||||
if (fs.existsSync(dir)) {
|
||||
fs.readdirSync(dir).forEach((file) => {
|
||||
const filePath = path.join(dir, file);
|
||||
if (fs.lstatSync(filePath).isDirectory()) {
|
||||
clearDirectory(filePath); // 递归清理子目录
|
||||
fs.rmdirSync(filePath);
|
||||
} else {
|
||||
fs.unlinkSync(filePath); // 删除文件
|
||||
}
|
||||
});
|
||||
console.log(`Cleared directory: ${dir}`);
|
||||
}
|
||||
}
|
||||
|
||||
function copyReadmeFile(source: string, destination: string) {
|
||||
if (fs.existsSync(source)) {
|
||||
fs.copyFileSync(source, destination);
|
||||
console.log(`Copied README.md from ${source} to ${destination}`);
|
||||
} else {
|
||||
console.error(`README.md not found at ${source}`);
|
||||
}
|
||||
}
|
||||
|
||||
export default function GitHubIssuesPlugin(options: GitHubIssuesPluginOptions): Plugin {
|
||||
const { repo, token, replaceRules } = options;
|
||||
|
||||
return {
|
||||
name: 'vitepress-plugin-github-issues',
|
||||
|
||||
async buildStart() {
|
||||
try {
|
||||
const issues = await fetchAllIssues(repo, token);
|
||||
|
||||
console.log(`Fetched ${issues.length} issues from GitHub`); // Log the number of issues fetched
|
||||
|
||||
const docsDir = path.join(process.cwd(), 'issues');
|
||||
|
||||
// 清空 issues 目录
|
||||
clearDirectory(docsDir);
|
||||
|
||||
// Create a directory to store markdown files if it doesn't exist
|
||||
if (!fs.existsSync(docsDir)) {
|
||||
fs.mkdirSync(docsDir);
|
||||
console.log(`Created docs directory: ${docsDir}`);
|
||||
}
|
||||
|
||||
// 拷贝 ../README.md 文件到当前目录
|
||||
const readmeSource = path.join(process.cwd(), '../README.md');
|
||||
const readmeDestination = path.join(docsDir, 'index.md');
|
||||
copyReadmeFile(readmeSource, readmeDestination);
|
||||
|
||||
for (const issue of issues) {
|
||||
// 仅处理包含 "文档" 标签的 issue
|
||||
const hasDocumentLabel = issue.labels.some(label => label.name === '文档');
|
||||
if (hasDocumentLabel) {
|
||||
const title = issue.title.replace(/[\/\\?%*:|"<>]/g, '-');
|
||||
const fileName = `${issue.number}.md`;
|
||||
|
||||
// 获取评论数据
|
||||
const comments = await fetchIssueComments(repo, issue.number, token);
|
||||
|
||||
let content =
|
||||
`---
|
||||
title: ${issue.title}
|
||||
---
|
||||
|
||||
# ${title}
|
||||
|
||||
${issue.body}
|
||||
|
||||
## 评论
|
||||
|
||||
`;
|
||||
|
||||
// 插入评论
|
||||
if (comments.length > 0) {
|
||||
comments.forEach((comment, index) => {
|
||||
content += `
|
||||
### 评论 ${index + 1} - ${comment.user.login}
|
||||
|
||||
${comment.body}
|
||||
|
||||
---
|
||||
`;
|
||||
});
|
||||
} else {
|
||||
content += "没有评论。\n";
|
||||
}
|
||||
|
||||
replaceRules.forEach(({ baseUrl, targetUrl }) => {
|
||||
// 将 baseUrl 转换为正则表达式,匹配后接的路径部分
|
||||
const pattern = new RegExp(`${baseUrl.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')}(/\\d+)`, 'g');
|
||||
// 替换为目标 URL
|
||||
content = content.replace(pattern, `${targetUrl}$1.html`);
|
||||
});
|
||||
|
||||
content += `[链接到 GitHub Issue](${issue.html_url})\n`
|
||||
|
||||
const filePath = path.join(docsDir, fileName);
|
||||
|
||||
fs.writeFileSync(filePath, content, { encoding: 'utf8' });
|
||||
console.log(`Created file: ${filePath}`); // Log each created file
|
||||
} else {
|
||||
console.log(`Skipped issue: ${issue.title}`); // Log skipped issues
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`Successfully created markdown files from GitHub issues.`);
|
||||
} catch (error) {
|
||||
console.error('Error fetching GitHub issues:', error);
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
|
30
docs/.vitepress/vitepress-plugin-replace-markdown-links.mts
Normal file
30
docs/.vitepress/vitepress-plugin-replace-markdown-links.mts
Normal file
@ -0,0 +1,30 @@
|
||||
import { Plugin } from 'vite';
|
||||
|
||||
interface ReplaceRule {
|
||||
baseUrl: string; // 要匹配的基地址
|
||||
targetUrl: string; // 替换后的目标地址
|
||||
}
|
||||
|
||||
export default function replaceMarkdownLinks(rules: ReplaceRule[]): Plugin {
|
||||
return {
|
||||
name: 'vitepress-plugin-replace-markdown-links',
|
||||
transform(code, id) {
|
||||
// 仅处理 Markdown 文件
|
||||
if (id.endsWith('.md')) {
|
||||
let transformedCode = code;
|
||||
|
||||
// 遍历所有替换规则
|
||||
rules.forEach(({ baseUrl, targetUrl }) => {
|
||||
// 将 baseUrl 转换为正则表达式,匹配后接的路径部分
|
||||
const pattern = new RegExp(`${baseUrl.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')}(/\\d+)`, 'g');
|
||||
// 替换为目标 URL
|
||||
transformedCode = transformedCode.replace(pattern, `${targetUrl}$1.html`);
|
||||
});
|
||||
|
||||
return transformedCode;
|
||||
}
|
||||
return null; // 不处理其他文件
|
||||
},
|
||||
};
|
||||
}
|
||||
|
25
docs/index.md
Normal file
25
docs/index.md
Normal file
@ -0,0 +1,25 @@
|
||||
---
|
||||
# https://vitepress.dev/reference/default-theme-home-page
|
||||
layout: home
|
||||
|
||||
hero:
|
||||
name: "XiaoMusic"
|
||||
text: "无限听歌,解放小爱音箱"
|
||||
tagline: 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载
|
||||
actions:
|
||||
- theme: brand
|
||||
text: 快速开始
|
||||
link: /issues/index
|
||||
- theme: alt
|
||||
text: 文档汇总
|
||||
link: /issues/211
|
||||
|
||||
features:
|
||||
- title: MIT 开源
|
||||
details: 完全开源,自主可控
|
||||
- title: 一键部署
|
||||
details: 支持 Docker 部署,兼容各大 NAS 平台
|
||||
- title: 口令自定义
|
||||
details: 可以完全自定义语音口令,可以写自己的插件
|
||||
---
|
||||
|
72
docs/issues/101.md
Normal file
72
docs/issues/101.md
Normal file
@ -0,0 +1,72 @@
|
||||
---
|
||||
title: 群晖docker安装 xiaomusic
|
||||
---
|
||||
|
||||
# 群晖docker安装 xiaomusic
|
||||
|
||||
由于现在群晖已经无法正常下载 docker 里的镜像了,绕了好多弯;现在用 ssh 服务命令拉取镜像来创建容器;
|
||||
1、ssh 输入账号密码进入群晖
|
||||
2、输入 sudo -i 再次输入密码进入 root 权限
|
||||
3、输入 docker search xiaomusic来查找到该镜像名;
|
||||
4、然后输入 docker pull xiaomusic 试试是否能安装,如果不能;就得在命令前加个代理地址;下面列了一些代理地址可以一个个的试
|
||||
docker.fxxk.dedyn.iodocker.io
|
||||
registry-docker-hub-latest-9vgc.onrender.com
|
||||
docker.chenby.cn
|
||||
dockerproxy.com
|
||||
hub.uuuadc.top
|
||||
docker.jsdelivr.fyi
|
||||
docker.registry.cyou
|
||||
dockerhub.anzu.vip
|
||||
|
||||
我是用的最下面这个成功的
|
||||
docker pull dockerhub.anzu.vip/xiaomusic:latest
|
||||
5、安装完成后就进入群晖 DOCKER 配置 xiaomusic
|
||||
<img width="491" alt="image" src="https://github.com/hanxi/xiaomusic/assets/38914725/e318062b-bd70-464c-a8df-8ce3635f2d84">
|
||||
MI_HARDWARE=型号 前面第4 步骤获取的
|
||||
XIAOMUSIC_SEARCH=搜索方式,我填写的bilisearch: 意思是通过 bilibili 搜索
|
||||
MI_DID=前面第4 步骤获取的
|
||||
MI_USER=小米账号
|
||||
MI_PASS=小米密码
|
||||
XIAOMUSIC_FUZZY_MATCH_CUTOFF=模糊匹配,最小为 0.1 最大为 1,越小越模糊,越大越精准
|
||||
|
||||
6、配置端口
|
||||
<img width="757" alt="image (1)" src="https://github.com/hanxi/xiaomusic/assets/38914725/2b6b9283-296f-4845-a3ff-0ebb11f548b4">
|
||||
7、映射路径
|
||||
<img width="737" alt="image (2)" src="https://github.com/hanxi/xiaomusic/assets/38914725/593718dd-8302-4a69-bec9-36e70f3f0407">
|
||||
|
||||
|
||||
|
||||
## 评论
|
||||
|
||||
|
||||
### 评论 1 - kiwi5656
|
||||
|
||||
MI_DID=前面第4 步骤获取的,第4步骤在哪?
|
||||
|
||||
---
|
||||
|
||||
### 评论 2 - hanxi
|
||||
|
||||
> MI_DID=前面第4 步骤获取的,第4步骤在哪?
|
||||
|
||||
不用设置 MI_DID
|
||||
|
||||
---
|
||||
|
||||
### 评论 3 - hanxi
|
||||
|
||||
国内 docker 镜像
|
||||
|
||||
```
|
||||
docker pull m.daocloud.io/docker.io/hanxi/xiaomusic:latest
|
||||
docker tag m.daocloud.io/docker.io/hanxi/xiaomusic:latest hanxi/xiaomusic:latest
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 评论 4 - ginitaimeiyty
|
||||
|
||||
如果手头上有能科学上网的机器,直接把群辉的代理服务器IP填写成可以科学上网的机器IP+端口,翻墙软件打开允许局域网连接就可以
|
||||
|
||||
---
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/101)
|
404
docs/issues/105.md
Normal file
404
docs/issues/105.md
Normal file
@ -0,0 +1,404 @@
|
||||
---
|
||||
title: 【插件】自定义口令功能
|
||||
---
|
||||
|
||||
# 【插件】自定义口令功能
|
||||
|
||||
自定义口令配置需要配置到 config.json 文件里,使用 config.json 方式启动。参考 </issues/94.html> 。
|
||||
|
||||
口令的配置方式见 config-example.json 文件。口令对应的代码需要写到 `plugins/` 目录下面,如果是容器启动,则需要把这个目录挂载出来。
|
||||
|
||||
config.json 格式是下面这样的。
|
||||
|
||||
```json
|
||||
{
|
||||
"hardware": "L07A",
|
||||
"account": "",
|
||||
"password": "",
|
||||
"mi_did": "",
|
||||
"cookie": "",
|
||||
"verbose": false,
|
||||
"music_path": "music",
|
||||
"conf_path": null,
|
||||
"hostname": "192.168.2.5",
|
||||
"port": 8090,
|
||||
"public_port": 0,
|
||||
"proxy": null,
|
||||
"search_prefix": "bilisearch:",
|
||||
"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,
|
||||
"key_word_dict": {
|
||||
"播放歌曲": "play",
|
||||
"播放本地歌曲": "playlocal",
|
||||
"关机": "stop",
|
||||
"下一首": "play_next",
|
||||
"单曲循环": "set_play_type_one",
|
||||
"全部循环": "set_play_type_all",
|
||||
"随机播放": "random_play",
|
||||
"分钟后关机": "stop_after_minute",
|
||||
"播放列表": "play_music_list",
|
||||
"刷新列表": "gen_music_list",
|
||||
"set_volume#": "set_volume",
|
||||
"get_volume#": "get_volume",
|
||||
"本地播放歌曲": "playlocal",
|
||||
"放歌曲": "play",
|
||||
"暂停": "stop",
|
||||
"停止": "stop",
|
||||
"停止播放": "stop",
|
||||
"测试自定义口令": "exec#code1(\"hello\")",
|
||||
"测试链接": "exec#httpget(\"https://github.com/hanxi/xiaomusic\")"
|
||||
},
|
||||
"key_match_order": [
|
||||
"set_volume#",
|
||||
"get_volume#",
|
||||
"分钟后关机",
|
||||
"播放歌曲",
|
||||
"下一首",
|
||||
"单曲循环",
|
||||
"全部循环",
|
||||
"随机播放",
|
||||
"关机",
|
||||
"刷新列表",
|
||||
"播放列表",
|
||||
"播放本地歌曲",
|
||||
"本地播放歌曲",
|
||||
"放歌曲",
|
||||
"暂停",
|
||||
"停止",
|
||||
"停止播放",
|
||||
"测试自定义口令",
|
||||
"测试链接"
|
||||
],
|
||||
"use_music_api": false,
|
||||
"use_music_audio_id": "1582971365183456177",
|
||||
"use_music_id": "355454500",
|
||||
"log_file": "/tmp/xiaomusic.txt",
|
||||
"fuzzy_match_cutoff": 0.6,
|
||||
"enable_fuzzy_match": true,
|
||||
"stop_tts_msg": "收到,再见",
|
||||
"keywords_playlocal": "播放本地歌曲,本地播放歌曲",
|
||||
"keywords_play": "播放歌曲,放歌曲",
|
||||
"keywords_stop": "关机,暂停,停止,停止播放",
|
||||
"user_key_word_dict": {
|
||||
"测试自定义口令": "exec#code1(\"hello\")",
|
||||
"测试链接": "exec#httpget(\"https://github.com/hanxi/xiaomusic\")"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
配置自定义口令时,只需要配置 user_key_word_dict 即可,会自动插入到 key_word_dict 里的。配置格式是:
|
||||
|
||||
```
|
||||
"测试自定义口令": "exec#code1(\"hello\")",
|
||||
```
|
||||
|
||||
其中 "测试自定义口令" 就是对小爱音箱说的,`"exec#code1(\"hello\")"` 就是要执行的插件代码,代码以 `exec#` 开头,后面紧跟着执行代码。这里 code1 是一个插件函数,插件函数需要在 plugin 目录里实现,一个文件只会导出一个与文件名相同的插件函数。所以 code1 函数是在 plugin/code1.py 里实现的。
|
||||
|
||||
```
|
||||
async def code1(arg1):
|
||||
global log, xiaomusic
|
||||
log.info(f"code1:{arg1}")
|
||||
await xiaomusic.do_tts("你好,我是自定义的测试口令")
|
||||
```
|
||||
|
||||
这里只是演示了打印日志和让小爱音箱说话。还有一个示例插件是 httpget ,可以用来访问 url 。
|
||||
|
||||
比如下面这样配置的话,当对小爱音箱说测试链接时,会去访问 url ,可以用来很多其他的事情。
|
||||
|
||||
```
|
||||
"测试链接": "exec#httpget(\"https://github.com/hanxi/xiaomusic\")
|
||||
```
|
||||
|
||||
最后还需要在 `active_cmd` 中配上口令用于唤醒:
|
||||
|
||||
```
|
||||
"active_cmd": "play,set_random_play,playlocal,play_music_list,play_music_list_index,stop_after_minute,stop,测试自定义口令",
|
||||
```
|
||||
|
||||
感兴趣的可以体验一下,写了有什么好玩的插件也可以在这里分享,或者提 pr 合并进官方库里作为自带插件。
|
||||
|
||||
|
||||
## 评论
|
||||
|
||||
|
||||
### 评论 1 - carson512
|
||||
|
||||
如果开启服务的状态下 如何唤醒才能调用原有的播放QQ 网易云?而特定唤醒词调用xiaoai播放?
|
||||
|
||||
---
|
||||
|
||||
### 评论 2 - hanxi
|
||||
|
||||
> 如果开启服务的状态下 如何唤醒才能调用原有的播放QQ 网易云?而特定唤醒词调用xiaoai播放?
|
||||
|
||||
不使用 xiaomusic 的唤醒词就会调用音箱自带的,比如说播放音乐
|
||||
|
||||
---
|
||||
|
||||
### 评论 3 - shellingford37
|
||||
|
||||
```
|
||||
[23:26:12] [0.3.30] [INFO] xiaomusic.py:531: 收到消息:测试自定义口令 控制面板:False did:290874427
|
||||
[23:26:12] [0.3.30] [INFO] xiaomusic.py:577: 完全匹配指令. query:测试自定义口令 opvalue:exec#code1("hello")
|
||||
[23:26:12] [0.3.30] [INFO] code1.py:3: code1:hello
|
||||
[23:26:12] [0.3.30] [ERROR] xiaomusic.py:542: Execption XiaoMusic.do_tts() missing 1 required positional argument: 'value'
|
||||
Traceback (most recent call last):
|
||||
File "/app/xiaomusic/xiaomusic.py", line 540, in do_check_cmd
|
||||
await func(did=did, arg1=oparg)
|
||||
File "/app/xiaomusic/xiaomusic.py", line 890, in exec
|
||||
await self.plugin_manager.execute_plugin(code)
|
||||
File "/app/xiaomusic/plugin.py", line 66, in execute_plugin
|
||||
await coroutine
|
||||
File "/app/plugins/code1.py", line 4, in code1
|
||||
await xiaomusic.do_tts("你好,我是自定义的测试口令")
|
||||
TypeError: XiaoMusic.do_tts() missing 1 required positional argument: 'value'
|
||||
```
|
||||
|
||||
我用code1的代码执行报错,有大佬知道为什么吗?
|
||||
|
||||
---
|
||||
|
||||
### 评论 4 - hanxi
|
||||
|
||||
@shellingford37 重构后漏改了,修复了。
|
||||
|
||||
---
|
||||
|
||||
### 评论 5 - guoxiangke
|
||||
|
||||
先说播放歌曲,再说 测试自定义口令 就行
|
||||
|
||||
---
|
||||
|
||||
### 评论 6 - CZJCC
|
||||
|
||||
想请教下插件那个功能,如何把用户的语音输入作为参数内容传到自定义函数里
|
||||
|
||||
---
|
||||
|
||||
### 评论 7 - hanxi
|
||||
|
||||
> 想请教下插件那个功能,如何把用户的语音输入作为参数内容传到自定义函数里
|
||||
|
||||
现在获取不到,等我加个接口获取吧。
|
||||
|
||||
---
|
||||
|
||||
### 评论 8 - CZJCC
|
||||
|
||||
666,支持以后我可以贡献一个接入通义模型的插件
|
||||
|
||||
---
|
||||
|
||||
### 评论 9 - hanxi
|
||||
|
||||
@CZJCC 你可以更新看看 plugins/code1.py 的测试代码,我测试了是可以拿到语音输入的原始内容的。
|
||||
|
||||
---
|
||||
|
||||
### 评论 10 - hanxi
|
||||
|
||||
文档更新了下,active_cmd 也需要配置一下才能正常唤醒。
|
||||
|
||||
---
|
||||
|
||||
### 评论 11 - CZJCC
|
||||
|
||||
> @CZJCC 你可以更新看看 plugins/code1.py 的测试代码,我测试了是可以拿到语音输入的原始内容的。
|
||||
|
||||
我原先设想的事用户的话术是”通义提问为什么地球是圆的“,指令匹配的时候通义提问前缀匹配到类似于code1方法,为什么地球是圆的作为参数传入这个函数,但我看现在是拿历史记录实现的
|
||||
|
||||
---
|
||||
|
||||
### 评论 12 - hanxi
|
||||
|
||||
是的,插件函数里面再切割一下前缀就行。last_record就是当前的那条语音数据。
|
||||
|
||||
---
|
||||
|
||||
### 评论 13 - hanxi
|
||||
|
||||
> > @CZJCC 你可以更新看看 plugins/code1.py 的测试代码,我测试了是可以拿到语音输入的原始内容的。
|
||||
>
|
||||
> 我原先设想的事用户的话术是”通义提问为什么地球是圆的“,指令匹配的时候通义提问前缀匹配到类似于code1方法,为什么地球是圆的作为参数传入这个函数,但我看现在是拿历史记录实现的
|
||||
|
||||
是的,这样比较简单,交给插件里面处理也比较自由。
|
||||
|
||||
---
|
||||
|
||||
### 评论 14 - mogeqian
|
||||
|
||||
key_word_dict中的“播放歌曲”口令是不能修改的是吧?因为以前用小爱同学播放歌曲说习惯了,总是触发xiaomusic自动下载歌曲,我想把口令改成“查找歌曲”,这样我当说播放歌曲的时候就调用网易云音乐或者QQ音乐,当我说查找歌曲的时候就先看本地有没有歌曲,没有话就自动下载到本地。
|
||||
当我先按照config-example.json的模板写好如下配置并重命名为config.json
|
||||
```
|
||||
"key_word_dict": {
|
||||
"查找歌曲": "play",
|
||||
"播放本地歌曲": "playlocal",
|
||||
"关机": "stop",
|
||||
"下一首": "play_next",
|
||||
"单曲循环": "set_play_type_one",
|
||||
"全部循环": "set_play_type_all",
|
||||
"随机播放": "set_random_play",
|
||||
"分钟后关机": "stop_after_minute",
|
||||
"播放列表": "play_music_list",
|
||||
"刷新列表": "gen_music_list",
|
||||
"本地播放歌曲": "playlocal",
|
||||
"下载歌曲": "play",
|
||||
"暂停": "stop",
|
||||
"停止": "stop",
|
||||
"停止播放": "stop",
|
||||
"测试自定义口令": "exec#code1(\"hello\")",
|
||||
"测试链接": "exec#httpget(\"https://github.com/hanxi/xiaomusic\")"
|
||||
},
|
||||
"key_match_order": [
|
||||
"分钟后关机",
|
||||
"查找歌曲",
|
||||
"下一首",
|
||||
"单曲循环",
|
||||
"全部循环",
|
||||
"随机播放",
|
||||
"关机",
|
||||
"刷新列表",
|
||||
"播放列表",
|
||||
"播放本地歌曲",
|
||||
"本地播放歌曲",
|
||||
"下载歌曲",
|
||||
"暂停",
|
||||
"停止",
|
||||
"停止播放",
|
||||
"测试自定义口令",
|
||||
"测试链接"
|
||||
],
|
||||
```
|
||||
|
||||
用以下命令安装docker
|
||||
`docker run --name xiaomusic -p 5488:5488 -v /mnt/sharedata/audiodata/musci/xiaomusic:/app/music -v /mnt/data_sdb1/docker/xiaomusic/config.json:/app/config.json -e XIAOMUSIC_PORT=5488 hanxi/xiaomusic --config /app/config.json`
|
||||
日志里提示的依然是:
|
||||
|
||||
` key_word_dict={'播放歌曲': 'play', '播放本地歌曲': 'playlocal', '关机': 'stop', '下一首': 'play_next', '上一首': 'play_prev', '单曲循环': 'set_play_type_one', '全部循环': 'set_play_type_all', '随机播放': 'set_random_play', '分钟后关机': 'stop_after_minute', '播放列表': 'play_music_list', '刷新列表': 'gen_music_list', '加入收藏': 'add_to_favorites', '收藏歌曲': 'add_to_favorites', '取消收藏': 'del_from_favorites', '播放列表第': 'play_music_list_index', '本地播放歌曲': 'playlocal', '查找歌曲': 'play', '下载歌曲': 'play', '暂停': 'stop', '停止': 'stop', '停止播放': 'stop', '播放歌单': 'play_music_list', '测试自定义口令': 'exec#code1("hello")', '测试链接': 'exec#httpget("https://github.com/hanxi/xiaomusic")'}, key_match_order=['分钟后关机', '播放歌曲', '下一首', '上一首', '单曲循环', '全部循环', '随机播放', '关机', '刷新列表', '播放列表第', '播放列表', '加入收藏', '收藏歌曲', '取消收藏', '播放本地歌曲', '本地播放歌曲', '查找歌曲', '下载歌曲', '暂停', '停止', '停止播放', '播放歌单', '测试自定义口令', '测试链接']`
|
||||
|
||||
似乎自定义的口令只能以插入的方式添加上去,并不能替换掉原来的口令
|
||||
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 15 - hanxi
|
||||
|
||||
> key_word_dict中的“播放歌曲”口令是不能修改的是吧?因为以前用小爱同学播放歌曲说习惯了,总是触发xiaomusic自动下载歌曲,我想把口令改成“查找歌曲”,这样我当说播放歌曲的时候就调用网易云音乐或者QQ音乐,当我说查找歌曲的时候就先看本地有没有歌曲,没有话就自动下载到本地。 当我先按照config-example.json的模板写好如下配置并重命名为config.json
|
||||
>
|
||||
> ```
|
||||
> "key_word_dict": {
|
||||
> "查找歌曲": "play",
|
||||
> "播放本地歌曲": "playlocal",
|
||||
> "关机": "stop",
|
||||
> "下一首": "play_next",
|
||||
> "单曲循环": "set_play_type_one",
|
||||
> "全部循环": "set_play_type_all",
|
||||
> "随机播放": "set_random_play",
|
||||
> "分钟后关机": "stop_after_minute",
|
||||
> "播放列表": "play_music_list",
|
||||
> "刷新列表": "gen_music_list",
|
||||
> "本地播放歌曲": "playlocal",
|
||||
> "下载歌曲": "play",
|
||||
> "暂停": "stop",
|
||||
> "停止": "stop",
|
||||
> "停止播放": "stop",
|
||||
> "测试自定义口令": "exec#code1(\"hello\")",
|
||||
> "测试链接": "exec#httpget(\"https://github.com/hanxi/xiaomusic\")"
|
||||
> },
|
||||
> "key_match_order": [
|
||||
> "分钟后关机",
|
||||
> "查找歌曲",
|
||||
> "下一首",
|
||||
> "单曲循环",
|
||||
> "全部循环",
|
||||
> "随机播放",
|
||||
> "关机",
|
||||
> "刷新列表",
|
||||
> "播放列表",
|
||||
> "播放本地歌曲",
|
||||
> "本地播放歌曲",
|
||||
> "下载歌曲",
|
||||
> "暂停",
|
||||
> "停止",
|
||||
> "停止播放",
|
||||
> "测试自定义口令",
|
||||
> "测试链接"
|
||||
> ],
|
||||
> ```
|
||||
>
|
||||
> 用以下命令安装docker `docker run --name xiaomusic -p 5488:5488 -v /mnt/sharedata/audiodata/musci/xiaomusic:/app/music -v /mnt/data_sdb1/docker/xiaomusic/config.json:/app/config.json -e XIAOMUSIC_PORT=5488 hanxi/xiaomusic --config /app/config.json` 日志里提示的依然是:
|
||||
>
|
||||
> ` key_word_dict={'播放歌曲': 'play', '播放本地歌曲': 'playlocal', '关机': 'stop', '下一首': 'play_next', '上一首': 'play_prev', '单曲循环': 'set_play_type_one', '全部循环': 'set_play_type_all', '随机播放': 'set_random_play', '分钟后关机': 'stop_after_minute', '播放列表': 'play_music_list', '刷新列表': 'gen_music_list', '加入收藏': 'add_to_favorites', '收藏歌曲': 'add_to_favorites', '取消收藏': 'del_from_favorites', '播放列表第': 'play_music_list_index', '本地播放歌曲': 'playlocal', '查找歌曲': 'play', '下载歌曲': 'play', '暂停': 'stop', '停止': 'stop', '停止播放': 'stop', '播放歌单': 'play_music_list', '测试自定义口令': 'exec#code1("hello")', '测试链接': 'exec#httpget("https://github.com/hanxi/xiaomusic")'}, key_match_order=['分钟后关机', '播放歌曲', '下一首', '上一首', '单曲循环', '全部循环', '随机播放', '关机', '刷新列表', '播放列表第', '播放列表', '加入收藏', '收藏歌曲', '取消收藏', '播放本地歌曲', '本地播放歌曲', '查找歌曲', '下载歌曲', '暂停', '停止', '停止播放', '播放歌单', '测试自定义口令', '测试链接']`
|
||||
>
|
||||
> 似乎自定义的口令只能以插入的方式添加上去,并不能替换掉原来的口令
|
||||
|
||||
可以在网页后台设置页面改。
|
||||
|
||||
---
|
||||
|
||||
### 评论 16 - mogeqian
|
||||
|
||||
不行,后台设置如图
|
||||

|
||||
日志如下:
|
||||
```
|
||||
[2024-11-11 18:08:04] [0.3.46] [INFO] xiaomusic.py:1130: update_config_from_setting ok. data:Config(account='**', password='**', mi_did='726577518,570867755', miio_tts_command='', cookie='', verbose=False, music_path='music', download_path='music/download', conf_path='conf', cache_dir='cache', hostname='192.168.22.4', port=8090, public_port=0, proxy='', search_prefix='bilisearch:', ffmpeg_location='./ffmpeg/bin', active_cmd='play,set_random_play,playlocal,play_music_list,stop', exclude_dirs='@eaDir', music_path_depth=10, disable_httpauth=True, httpauth_username='******', httpauth_password='******', music_list_url='', music_list_json='', custom_play_list_json='', disable_download=False, key_word_dict={'播放歌曲': 'play', '播放本地歌曲': 'playlocal', '关机': 'stop', '下一首': 'play_next', '上一首': 'play_prev', '单曲循环': 'set_play_type_one', '全部循环': 'set_play_type_all', '随机播放': 'set_random_play', '分钟后关机': 'stop_after_minute', '播放列表': 'play_music_list', '刷新列表': 'gen_music_list', '加入收藏': 'add_to_favorites', '收藏歌曲': 'add_to_favorites', '取消收藏': 'del_from_favorites', '播放列表第': 'play_music_list_index', '本地播放歌曲': 'playlocal', '查找歌曲': 'play', '下载歌曲': 'play', '暂停': 'stop', '停止': 'stop', '停止播放': 'stop', '播放歌单': 'play_music_list', '测试自定义口令': 'exec#code1("hello")', '测试链接': 'exec#httpget("https://github.com/hanxi/xiaomusic")'}, key_match_order=['分钟后关机', '播放歌曲', '下一首', '上一首', '单曲循环', '全部循环', '随机播放', '关机', '刷新列表', '播放列表第', '播放列表', '加入收藏', '收藏歌曲', '取消收藏', '播放本地歌曲', '本地播放歌曲', '查找歌曲', '下载歌曲', '暂停', '停止', '停止播放', '播放歌单', '测试自定义口令', '测试链接'], use_music_api=False, use_music_audio_id='1582971365183456177', use_music_id='355454500', log_file='/tmp/xiaomusic.txt', fuzzy_match_cutoff=0.6, enable_fuzzy_match=True, stop_tts_msg='收到,再见', enable_config_example=False, keywords_playlocal='播放本地歌曲,本地播放歌曲', keywords_play='查找歌曲,下载歌曲', keywords_stop='关机,暂停,停止,停止播放', keywords_playlist='播放列表,播放歌单', user_key_word_dict={'测试自定义口令': 'exec#code1("hello")', '测试链接': 'exec#httpget("https://github.com/hanxi/xiaomusic")'}, enable_force_stop=False, devices={'726577518': Device(did='726577518', device_id='******', hardware='LX06', name='小爱音箱Pro', play_type='', cur_music='', cur_playlist='全部'), '570867755': Device(did='570867755', device_id='*********', hardware='L15A', name='小米AI音箱(第二代)', play_type='', cur_music='', cur_playlist='全部')}, group_list='', remove_id3tag=False, convert_to_mp3=False, delay_sec=3, continue_play=False, pull_ask_sec=1, crontab_json='', enable_yt_dlp_cookies=False, get_ask_by_mina=False)
|
||||
[2024-11-11 18:08:04] [0.3.46] [INFO] xiaomusic.py:1133: 语音控制已启动, 用【分钟后关机/播放歌曲/下一首/上一首/单曲循环/全部循环/随机播放/关机/刷新列表/播放列表第/播放列表/加入收藏/收藏歌曲/取消收藏/播放本地歌曲/本地播放歌曲/查找歌曲/下载歌曲/暂停/停止/停止播放/播放歌单/测试自定义口令/测试链接】开头来控制
|
||||
[2024-11-11 18:08:04] [0.3.46] [INFO] xiaomusic.py:543: 协程时间循环未启动
|
||||
[2024-11-11 18:08:04] [0.3.46] [INFO] xiaomusic.py:1250: 没打乱 全部 ['乌兰托娅 火红的萨日朗', '凤凰传奇麝香夫人'] ... ['罗大佑童年', '阿嬷'] with len: 7
|
||||
[2024-11-11 18:08:04] [0.3.46] [INFO] xiaomusic.py:1250: 没打乱 全部 ['乌兰托娅 火红的萨日朗', '凤凰传奇麝香夫人'] ... ['罗大佑童年', '阿嬷'] with len: 7
|
||||
[2024-11-11 18:08:04] [0.3.46] [INFO] analytics.py:28: analytics init ok
|
||||
[2024-11-11 18:08:04] [0.3.46] [INFO] xiaomusic.py:104: Startup OK. Config(account='***', password='***', mi_did='726577518,570867755', miio_tts_command='', cookie='', verbose=False, music_path='music', download_path='music/download', conf_path='conf', cache_dir='cache', hostname='192.168.22.4', port=8090, public_port=0, proxy='', search_prefix='bilisearch:', ffmpeg_location='./ffmpeg/bin', active_cmd='play,set_random_play,playlocal,play_music_list,stop', exclude_dirs='@eaDir', music_path_depth=10, disable_httpauth=True, httpauth_username='******', httpauth_password='******', music_list_url='', music_list_json='', custom_play_list_json='', disable_download=False, key_word_dict={'播放歌曲': 'play', '播放本地歌曲': 'playlocal', '关机': 'stop', '下一首': 'play_next', '上一首': 'play_prev', '单曲循环': 'set_play_type_one', '全部循环': 'set_play_type_all', '随机播放': 'set_random_play', '分钟后关机': 'stop_after_minute', '播放列表': 'play_music_list', '刷新列表': 'gen_music_list', '加入收藏': 'add_to_favorites', '收藏歌曲': 'add_to_favorites', '取消收藏': 'del_from_favorites', '播放列表第': 'play_music_list_index', '本地播放歌曲': 'playlocal', '查找歌曲': 'play', '下载歌曲': 'play', '暂停': 'stop', '停止': 'stop', '停止播放': 'stop', '播放歌单': 'play_music_list', '测试自定义口令': 'exec#code1("hello")', '测试链接': 'exec#httpget("https://github.com/hanxi/xiaomusic")'}, key_match_order=['分钟后关机', '播放歌曲', '下一首', '上一首', '单曲循环', '全部循环', '随机播放', '关机', '刷新列表', '播放列表第', '播放列表', '加入收藏', '收藏歌曲', '取消收藏', '播放本地歌曲', '本地播放歌曲', '查找歌曲', '下载歌曲', '暂停', '停止', '停止播放', '播放歌单', '测试自定义口令', '测试链接'], use_music_api=False, use_music_audio_id='1582971365183456177', use_music_id='355454500', log_file='/tmp/xiaomusic.txt', fuzzy_match_cutoff=0.6, enable_fuzzy_match=True, stop_tts_msg='收到,再见', enable_config_example=False, keywords_playlocal='播放本地歌曲,本地播放歌曲', keywords_play='查找歌曲,下载歌曲', keywords_stop='关机,暂停,停止,停止播放', keywords_playlist='播放列表,播放歌单', user_key_word_dict={'测试自定义口令': 'exec#code1("hello")', '测试链接': 'exec#httpget("https://github.com/hanxi/xiaomusic")'}, enable_force_stop=False, devices={'726577518': Device(did='726577518', device_id='*****', hardware='LX06', name='小爱音箱Pro', play_type='', cur_music='', cur_playlist='全部'), '570867755': Device(did='570867755', device_id='*********', hardware='L15A', name='小米AI音箱(第二代)', play_type='', cur_music='', cur_playlist='全部')}, group_list='', remove_id3tag=False, convert_to_mp3=False, delay_sec=3, continue_play=False, pull_ask_sec=1, crontab_json='', enable_yt_dlp_cookies=False, get_ask_by_mina=False)
|
||||
[2024-11-11 18:08:04] [0.3.46] [INFO] httpserver.py:111: disable_httpauth:True
|
||||
[18:08:04] [0.3.46] [INFO] Started server process [1]
|
||||
[18:08:04] [0.3.46] [INFO] Waiting for application startup.
|
||||
[2024-11-11 18:08:04] [0.3.46] [INFO] xiaomusic.py:541: 启动后台构建 tag cache
|
||||
[18:08:04] [0.3.46] [INFO] Application startup complete.
|
||||
[2024-11-11 18:08:04] [0.3.46] [INFO] xiaomusic.py:513: 已从【cache/tag_cache.json】加载 tag cache
|
||||
[18:08:04] [0.3.46] [INFO] Uvicorn running on http://['0.0.0.0', '::']:8090 (Press CTRL+C to quit)
|
||||
[2024-11-11 18:08:04] [0.3.46] [INFO] xiaomusic.py:527: 保存:tag cache 已保存到【cache/tag_cache.json】
|
||||
[2024-11-11 18:08:04] [0.3.46] [INFO] xiaomusic.py:577: tag 更新完成
|
||||
[2024-11-11 18:08:04] [0.3.46] [INFO] xiaomusic.py:248: 选中的设备: {'726577518': Device(did='726577518', device_id='******', hardware='LX06', name='小爱音箱Pro', play_type='', cur_music='', cur_playlist='全部'), '570867755': Device(did='570867755', device_id='*********', hardware='L15A', name='小米AI音箱(第二代)', play_type='', cur_music='', cur_playlist='全部')}
|
||||
[18:08:34] [0.3.46] [INFO] 172.20.0.1:35058 - "GET /static/default/setting.html HTTP/1.1" 304
|
||||
[18:08:34] [0.3.46] [INFO] 172.20.0.1:35058 - "GET /getversion HTTP/1.1" 200
|
||||
```
|
||||
使用的docker-compose命令安装
|
||||
services:
|
||||
xiaomusic:
|
||||
image: hanxi/xiaomusic
|
||||
container_name: xiaomusic
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 8090:8090
|
||||
volumes:
|
||||
- /mnt/sharedata/audiodata/musci/xiaomusic:/app/music
|
||||
- /mnt/data_sdb1/docker/xiaomusic/config.json:/app/config.json
|
||||
command: ['--config', '/app/config.json']
|
||||
|
||||
根据日志的提示,'播放歌曲': 'play'依然存在,只是增加了 '查找歌曲': 'play', '下载歌曲': 'play', 这两个关于play的自定义口令,所以实际上play有三条口令 “播放歌曲、查找歌曲、下载歌曲”,能否删除掉'播放歌曲': 'play'这个系统默认的口令?只使用 '查找歌曲': 'play', '下载歌曲': 'play', 这两个关于play的自定义口令
|
||||
|
||||
---
|
||||
|
||||
### 评论 17 - hanxi
|
||||
|
||||
@mogeqian 另外提个 issue 吧,现在应该是不支持删除默认的口令。
|
||||
|
||||
---
|
||||
|
||||
### 评论 18 - mogeqian
|
||||
|
||||
好的,已经重开了一个issue #259
|
||||
|
||||
---
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/105)
|
111
docs/issues/182.md
Normal file
111
docs/issues/182.md
Normal file
@ -0,0 +1,111 @@
|
||||
---
|
||||
title: 定时任务配置格式
|
||||
---
|
||||
|
||||
# 定时任务配置格式
|
||||
|
||||
支持采用 crontab 的格式配置定时任务,已经支持下面的任务类型:
|
||||
|
||||
- stop 关机
|
||||
- play 播放歌曲
|
||||
- play_music_list 播放列表
|
||||
- tts 文字转语音
|
||||
- refresh_music_list 刷新播放列表
|
||||
- set_volume 设置音量
|
||||
- set_play_type 设置播放类型,单曲循环 0 , 全部循环 1 , 随机播放 2 , 单曲播放 3 , 顺序播放 4
|
||||
|
||||
### 示例
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"expression": "0 8 * * 0-4",
|
||||
"name": "play",
|
||||
"did": "123456789",
|
||||
"arg1": "周杰伦晴天"
|
||||
},
|
||||
{
|
||||
"expression": "10 8 * * 0-4",
|
||||
"name": "stop",
|
||||
"did": "123456789"
|
||||
},
|
||||
{
|
||||
"expression": "0 9 * * *",
|
||||
"name": "play",
|
||||
"did": "123456789",
|
||||
"arg1": "周杰伦晴天"
|
||||
},
|
||||
{
|
||||
"expression": "0 10 * * *",
|
||||
"name": "play_music_list",
|
||||
"did": "123456789",
|
||||
"arg1": "周杰伦"
|
||||
},
|
||||
{
|
||||
"expression": "30 10 * * *",
|
||||
"name": "play_music_list",
|
||||
"did": "123456789",
|
||||
"arg1": "周杰伦|晴天"
|
||||
},
|
||||
{
|
||||
"expression": "0 7 * * *",
|
||||
"name": "tts",
|
||||
"did": "123456789",
|
||||
"arg1": "早上好!该起床了!"
|
||||
},
|
||||
{
|
||||
"expression": "0 3 * * *",
|
||||
"name": "refresh_music_list"
|
||||
},
|
||||
{
|
||||
"expression": "* * * * *",
|
||||
"name": "set_volume",
|
||||
"did": "123456789",
|
||||
"arg1": "25"
|
||||
},
|
||||
{
|
||||
"expression": "* * * * *",
|
||||
"name": "set_play_type",
|
||||
"did": "123456789",
|
||||
"arg1": "2"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
示例中的意思是:
|
||||
|
||||
- 周一到周五每天 8 点播放歌曲 "周杰伦晴天"
|
||||
- 周一到周五每天 8 点 10 分执行关机指令
|
||||
- 每天 9 点播放歌曲 "周杰伦晴天"
|
||||
- 每天 10 点播放列表 "周杰伦"
|
||||
- 每天 10 点 30 分播放列表 "周杰伦" 里的 "晴天"
|
||||
- 每天 7 点发出语音 "早上好!该起床了!"
|
||||
- 每天 3 点刷新播放列表,用于自动更新目录下的歌曲到播放列表里。
|
||||
- 每分钟设置音量为 25
|
||||
- 每分钟设置为随机播放
|
||||
|
||||
> 注意星期一是0,星期二是1,星期日是6。
|
||||
> (0-6 or mon,tue,wed,thu,fri,sat,sun)
|
||||
> The first weekday is always monday.
|
||||
|
||||
### 参数意思
|
||||
|
||||
- expression 的格式是标准的 crontab 的格式,用于配置任务的执行时机,如何配置可以直接用下面的 crontab ai 工具生成
|
||||
- <https://cronly.app/ai>
|
||||
- <https://cronify.zimo.li/>
|
||||
- name 是任务名,目前只支持上面那几种。
|
||||
- did 是小爱音箱的设备ID,就是设置页面的音箱型号后面的那串数字。
|
||||
- arg1 根据任务不同而不同。
|
||||
- play 的 arg1 表示要播放的歌曲名。
|
||||
- play_music_list 的 arg1 表示要播放的播放目录名,可以加 `|` 符合加上目录下面的歌曲名,也可不加。
|
||||
- tts 的 arg1 表示要说的语音文字。
|
||||
|
||||
## 评论
|
||||
|
||||
|
||||
### 评论 1 - hanxi
|
||||
|
||||
0.3.38版本功能。
|
||||
|
||||
---
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/182)
|
130
docs/issues/19.md
Normal file
130
docs/issues/19.md
Normal file
@ -0,0 +1,130 @@
|
||||
---
|
||||
title: 如何修改默认的8090端口
|
||||
---
|
||||
|
||||
# 如何修改默认的8090端口
|
||||
|
||||
docker-compose 修改映射端口会播放失败
|
||||
|
||||
```
|
||||
ports:
|
||||
- 80:8090
|
||||
```
|
||||
|
||||
从日志看继续调用了 http://10.0.0.4:8090 而不是修改映射的80,还原成
|
||||
|
||||
```
|
||||
ports:
|
||||
- 8090:8090
|
||||
```
|
||||
则一切正常
|
||||
|
||||
```
|
||||
xiaomusic | [BiliBiliSearch] Playlist 安河桥北: Downloading 1 items of 1
|
||||
xiaomusic | [download] Downloading item 1 of 1
|
||||
xiaomusic | [BiliBili] Extracting URL: http://www.bilibili.com/video/av319943893
|
||||
xiaomusic | [BiliBili] 319943893: Downloading webpage
|
||||
xiaomusic | 10.0.0.118 - - [21/Feb/2024 15:29:24] "POST /cmd HTTP/1.1" 200 -
|
||||
xiaomusic | 10.0.0.118 - - [21/Feb/2024 15:29:24] "POST /cmd HTTP/1.1" 200 -
|
||||
xiaomusic | 10.0.0.118 - - [21/Feb/2024 15:29:24] "POST /cmd HTTP/1.1" 200 -
|
||||
xiaomusic | 10.0.0.118 - - [21/Feb/2024 15:29:24] "POST /cmd HTTP/1.1" 200 -
|
||||
xiaomusic | [BiliBili] BV1tw411X7Rr: Extracting videos in anthology
|
||||
xiaomusic | 10.0.0.118 - - [21/Feb/2024 15:29:24] "POST /cmd HTTP/1.1" 200 -
|
||||
xiaomusic | [BiliBili] 319943893: Extracting chapters
|
||||
xiaomusic | 10.0.0.118 - - [21/Feb/2024 15:29:24] "POST /cmd HTTP/1.1" 200 -
|
||||
xiaomusic | 10.0.0.118 - - [21/Feb/2024 15:29:24] "POST /cmd HTTP/1.1" 200 -
|
||||
xiaomusic | [BiliBili] Format(s) 1080P 高码率, 1080P 高清, 720P 高清, 4K 超清 are missing; you have to login or become premium member to download them. Use --cookies-from-browser or --cookies for the authentication. See https://github.com/yt-dlp/yt-dlp/wiki/FAQ#how-do-i-pass-cookies-to-yt-dlp for how to manually pass cookies
|
||||
xiaomusic | [info] BV1tw411X7Rr: Downloading 1 format(s): 30280
|
||||
xiaomusic | 10.0.0.118 - - [21/Feb/2024 15:29:24] "POST /cmd HTTP/1.1" 200 -
|
||||
xiaomusic | 10.0.0.118 - - [21/Feb/2024 15:29:24] "POST /cmd HTTP/1.1" 200 -
|
||||
xiaomusic | [download] Destination: music/安河桥北.m4a
|
||||
[download] 0.3% of 5.61MiB at 6.24MiB/s ETA 00:0010.0.0.118 - - [21/Feb/2024 15:29:24] "POST /cmd HTTP/1.1" 200 -
|
||||
[download] 0.5% of 5.61MiB at 2.42MiB/s ETA 00:0210.0.0.118 - - [21/Feb/2024 15:29:24] "POST /cmd HTTP/1.1" 200 -
|
||||
[download] 1.1% of 5.61MiB at 1.50MiB/s ETA 00:0310.0.0.118 - - [21/Feb/2024 15:29:24] "POST /cmd HTTP/1.1" 200 -
|
||||
[download] 4.4% of 5.61MiB at 2.35MiB/s ETA 00:0210.0.0.118 - - [21/Feb/2024 15:29:24] "POST /cmd HTTP/1.1" 200 -
|
||||
[download] 8.9% of 5.61MiB at 3.59MiB/s ETA 00:0110.0.0.118 - - [21/Feb/2024 15:29:24] "POST /cmd HTTP/1.1" 200 -
|
||||
[download] 100% of 5.61MiB in 00:00:00 at 10.83MiB/s
|
||||
xiaomusic | [ExtractAudio] Destination: music/安河桥北.mp3
|
||||
xiaomusic | Deleting original file music/安河桥北.m4a (pass -k to keep)
|
||||
xiaomusic | [download] Finished downloading playlist: 安河桥北
|
||||
xiaomusic | [02/21/24 15:29:29] INFO 播放 xiaomusic.py:461
|
||||
xiaomusic | http://10.0.0.4:8090/music/%E5%AE%
|
||||
xiaomusic | 89%E6%B2%B3%E6%A1%A5%E5%8C%97.mp3
|
||||
xiaomusic | INFO 已经开始播放了 xiaomusic.py:464
|
||||
xiaomusic | INFO 歌曲music/安河桥北.mp3的时长251秒 xiaomusic.py:371
|
||||
xiaomusic | INFO 251秒后将会播放下一首 xiaomusic.py:385
|
||||
xiaomusic | INFO 匹配到指令. opkey:set_volume# xiaomusic.py:441
|
||||
xiaomusic | opvalue:set_volume oparg:24
|
||||
```
|
||||
|
||||
## 评论
|
||||
|
||||
|
||||
### 评论 1 - hanxi
|
||||
|
||||
需要添加环境变量
|
||||
```
|
||||
environment:
|
||||
XIAOMUSIC_PORT:80
|
||||
ports:
|
||||
- 80:80
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 评论 2 - newrookie001
|
||||
|
||||
> 需要添加环境变量
|
||||
>
|
||||
> ```
|
||||
> environment:
|
||||
> XIAOMUSIC_PORT:80
|
||||
> ports:
|
||||
> - 80:80
|
||||
> ```
|
||||
|
||||
自己走了点弯路,半天才搞明白。补充说明:
|
||||
> environment:
|
||||
> XIAOMUSIC_PORT: 5678 #就是“5678”可以根据自己要求设置,但要求上下的5678都设置成一个
|
||||
> ports:
|
||||
> - 5678:5678
|
||||
|
||||
---
|
||||
|
||||
### 评论 3 - hanxi
|
||||
|
||||
如果换端口,需要3个数字一致,比如
|
||||
|
||||
```
|
||||
environment:
|
||||
XIAOMUSIC_PORT:6874
|
||||
ports:
|
||||
- 6874:6874
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 评论 4 - hanxi
|
||||
|
||||
文档类型的我都打开下,方便其他人看到。
|
||||
|
||||
---
|
||||
|
||||
### 评论 5 - flymin
|
||||
|
||||
docker-compose 中对应关系应该是
|
||||
```yaml
|
||||
ports:
|
||||
- aaaa:bbbb
|
||||
environment:
|
||||
XIAOMUSIC_PORT: bbbb # 配置文件中的 port,后台:监听端口(修改后需要重启)
|
||||
XIAOMUSIC_PUBLIC_PORT: aaaa # 配置文件中的 public_port,后台:外网访问端口(0表示跟监听端口一致)
|
||||
```
|
||||
|
||||
以上,docker 环境中基本不存在需要修改 bbbb 的情况,也就是不用设置 XIAOMUSIC_PORT。如果需要修改端口,只需要修改两处 aaaa
|
||||
如果使用反向代理,则转发 localhost:aaaa,XIAOMUSIC_PUBLIC_PORT 设置成代理的监听端口 cccc
|
||||
|
||||
另外,setting 文件存在会覆盖环境变量。启动过之后需要直接修改 settings.json 或者在后台修改
|
||||
|
||||
---
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/19)
|
73
docs/issues/210.md
Normal file
73
docs/issues/210.md
Normal file
@ -0,0 +1,73 @@
|
||||
---
|
||||
title: yt-dlp cookies 文件上传功能
|
||||
---
|
||||
|
||||
# yt-dlp cookies 文件上传功能
|
||||
|
||||
此功能用于解决 yt-dlp 下载资源失败时使用,比如 ip 被 B站或者 youtube 加入黑名单后才需要使用。
|
||||
|
||||
上传的文件用于 yt-dlp 的 `--cookies` 参数。
|
||||
```
|
||||
--cookies FILE Netscape formatted file to read cookies from
|
||||
and dump cookie jar in
|
||||
```
|
||||
|
||||
## 获取 cookies.txt 文件
|
||||
|
||||
1. 下载插件 [Get cookies.txt LOCALLY](https://chromewebstore.google.com/detail/cclelndahbckbenkjhflpdbgdldlbecc)
|
||||
2. 给予插件访问权限和无痕模式允许使用
|
||||

|
||||
3. 打开无痕窗口
|
||||
4. 打开 youtube.com
|
||||
5. 登陆 youtube.com
|
||||
6. 打开新标签页
|
||||
7. 关闭 youtube.com 的标签页
|
||||
8. 保存 cookies.txt
|
||||

|
||||
|
||||
原因见 https://github.com/yt-dlp/yt-dlp/wiki/Extractors#exporting-youtube-cookies
|
||||
|
||||
## 上传 cookies.txt
|
||||
|
||||
1. 打开设置页面
|
||||
2. 设置启用yt-dlp-cookies 选项为 true
|
||||

|
||||
3. 点击保存
|
||||
4. 再点击选择文件,选择前面保存好的 cookies.txt 文件,点击上传。
|
||||

|
||||
|
||||
|
||||
## 后续用途
|
||||
|
||||
1. 语音下载歌曲都会带上前面上传的 cookies.txt 文件去搜索下载歌曲。
|
||||
2. 歌曲批量下载工具下载歌曲或者歌单时也会带上 cookies.txt 文件。
|
||||
|
||||
|
||||
|
||||
## 评论
|
||||
|
||||
|
||||
### 评论 1 - kingfly2016
|
||||
|
||||
0.3.37的版本并没有发现可以开启yt-dlp-cookies 并上传cookies文件的地方,尝试把导出的cookies.txt手工上传到conf目录下,没有生效.
|
||||

|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 2 - hanxi
|
||||
|
||||
需要等38版本,或者用测试版本,镜像名后面加 :main
|
||||
|
||||
---
|
||||
|
||||
### 评论 3 - kingfly2016
|
||||
|
||||
|
||||
|
||||
> 需要等38版本,或者用测试版本,镜像名后面加 :main
|
||||
|
||||
谢谢
|
||||
|
||||
---
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/210)
|
77
docs/issues/211.md
Normal file
77
docs/issues/211.md
Normal file
@ -0,0 +1,77 @@
|
||||
---
|
||||
title: 📝 文档汇总
|
||||
---
|
||||
|
||||
# 📝 文档汇总
|
||||
|
||||
## 1️⃣ 基础文档
|
||||
|
||||
- [💬 FAQ问题集合](/issues/99.html)
|
||||
- [如何修改默认的8090端口](/issues/19.html)
|
||||
- [如何配置网络歌单](/issues/78.html)
|
||||
- [如何添加m3u格式文件的电台](/issues/88.html)
|
||||
- [xiaomusic极空间安装教程](/issues/297.html)
|
||||
|
||||
## 2️⃣ 进阶文档
|
||||
|
||||
- [采用config.json配置方式](/issues/94.html)
|
||||
- [ios系统上的捷径配置](/issues/96.html)
|
||||
- [【插件】自定义口令功能](/issues/105.html)
|
||||
- [定时任务配置格式](/issues/182.html)
|
||||
- [yt-dlp cookies 文件上传功能](/issues/210.html)
|
||||
- [如何批量下载歌曲](/issues/212.html)
|
||||
- [设备分组播放](/issues/65.html#issuecomment-2215736529)
|
||||
- [如何播放小雅alist里的歌曲](/issues/128.html#issuecomment-2232867180)
|
||||
- [如何添加 网易云音乐playlist](/issues/269.html)
|
||||
- [相关工具推荐](/issues/285.html)
|
||||
|
||||
## 3️⃣ 其他安装文档
|
||||
|
||||
> [!NOTE]
|
||||
> 下面教程可能比较旧,只供参考
|
||||
|
||||
- [群晖docker安装 xiaomusic](/issues/101.html)
|
||||
- [NAS部署教程](https://post.m.smzdm.com/p/avpe7n99/)
|
||||
- [群晖部署教程](https://post.m.smzdm.com/p/a7px7dol/)
|
||||
- [QNAS部署教程](https://post.smzdm.com/p/a5xz5x63/)
|
||||
- [视频教程-群晖1](https://www.bilibili.com/video/BV1ZZpweHEtT/)
|
||||
- [视频教程-群晖2](https://www.bilibili.com/video/BV1JXxXeBEdY/)
|
||||
- [视频教程-拾光坞N3](https://www.bilibili.com/video/BV1q629YMEG6/)
|
||||
- [TechHive](https://mp.weixin.qq.com/s/4a41muFtPaFKtHeZYu795w)
|
||||
- [弹个AI](https://mp.weixin.qq.com/s/sIsKxB7Y8b83AhnvaWiMog)
|
||||
- [简单免费!教你用绿联NAS联动小爱音箱,私人音乐库也能语音点播](https://post.m.smzdm.com/p/a8pldgg7/)
|
||||
- [飞牛教程](https://mp.weixin.qq.com/s?t=pages/image_detail&__biz=MzkxODc1NDMwOA==&mid=2247483725&idx=1&sn=2d615f14733b9bf989557fa766b4e1fc)
|
||||
|
||||
|
||||
## 评论
|
||||
|
||||
|
||||
### 评论 1 - sghuenn
|
||||
|
||||
redmi小爱触屏音箱8,仍然需要打开“型号兼容模式”才能播放
|
||||
打开兼容模式后的问题有:每首歌曲播放完毕后都要再从头播放4、5秒才播放下一曲;语音命令小爱同学播放下一曲,它会从头开始播放当前歌曲。
|
||||
|
||||
---
|
||||
|
||||
### 评论 2 - hanxi
|
||||
|
||||
> redmi小爱触屏音箱8,仍然需要打开“型号兼容模式”才能播放 打开兼容模式后的问题有:每首歌曲播放完毕后都要再从头播放4、5秒才播放下一曲;语音命令小爱同学播放下一曲,它会从头开始播放当前歌曲。
|
||||
|
||||
播放歌曲的接口应该是有点问题,等有设备有开发能力的人来搞吧。
|
||||
|
||||
---
|
||||
|
||||
### 评论 3 - zhoukk37
|
||||
|
||||
想问下如何利用反向代理,完成使得小爱外网访问nas呢,您能提供一下关键词,我自己去检索学下一下吗
|
||||
|
||||
---
|
||||
|
||||
### 评论 4 - hanxi
|
||||
|
||||
> 想问下如何利用反向代理,完成使得小爱外网访问nas呢,您能提供一下关键词,我自己去检索学下一下吗
|
||||
|
||||
内网穿透,frp能实现,就是把局域网的端口映射成公网的端口。
|
||||
|
||||
---
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/211)
|
51
docs/issues/212.md
Normal file
51
docs/issues/212.md
Normal file
@ -0,0 +1,51 @@
|
||||
---
|
||||
title: 如何批量下载歌曲
|
||||
---
|
||||
|
||||
# 如何批量下载歌曲
|
||||
|
||||
批量下载歌曲依赖的是 yt-dlp 批量下载播放列表里的视频并转为 mp3 实现的。
|
||||
|
||||
先进入到歌曲下载工具页面:
|
||||
|
||||
> 默认主题 => 设置 => 歌曲下载工具
|
||||
|
||||

|
||||
|
||||
|
||||
已经测试过 B 站和 youtube 两种播放列表,播放列表的链接是有要求,不能有其他多余参数。
|
||||
|
||||
比如 B 站的是这样的
|
||||
|
||||
https://m.bilibili.com/video/BV1WUsDezE88
|
||||
|
||||
youtube 的是这样的
|
||||
|
||||
https://m.youtube.com/playlist?list=PLUD2d-pqyvT6_ztf31hx-5SsUUvY5UsQn
|
||||
|
||||
输入歌单名字是用于保存的文件夹名字,最好不是已经存在的名字,每次下载歌单都取个新名字比较合适。
|
||||
|
||||
已知 youtube 需要上传无痕模式下的 cookies.txt 文件才能正常下载。具体步骤见 /issues/210.html 。
|
||||
|
||||
|
||||
也支持单独下载一个链接只有一首歌曲的。
|
||||
|
||||
## 评论
|
||||
|
||||
|
||||
### 评论 1 - lazybabyz
|
||||
|
||||
默认主题 => 设置 =>没有显示找到 歌曲下载工具,
|
||||
有一个 歌单地址 歌单内容: 输入B站测试地址显示返回无效
|
||||
|
||||

|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 2 - hanxi
|
||||
|
||||
等0.3.38版本。
|
||||
|
||||
---
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/212)
|
532
docs/issues/269.md
Normal file
532
docs/issues/269.md
Normal file
@ -0,0 +1,532 @@
|
||||
---
|
||||
title: 如何添加 网易云音乐playlist
|
||||
---
|
||||
|
||||
# 如何添加 网易云音乐playlist
|
||||
|
||||
利用 NeteaseCloudMusicApi 获取歌单和播放地址
|
||||
我在你基础上改了一下,但是我的逻辑不合理
|
||||
https://github.com/dissipator/xiaomusic
|
||||
|
||||
## 评论
|
||||
|
||||
|
||||
### 评论 1 - hanxi
|
||||
|
||||
建议通过插件实现或者新增一个页面工具把歌单导出 json 。
|
||||
歌单的 json 格式见 /issues/78.html
|
||||
|
||||
---
|
||||
|
||||
### 评论 2 - qiujie8092916
|
||||
|
||||
> 利用 NeteaseCloudMusicApi 获取歌单和播放地址 我在你基础上改了一下,但是我的逻辑不合理 [dissipator/xiaomusic](https://github.com/dissipator/xiaomusic)
|
||||
|
||||
老哥在实现插件了吗?我也急需播放歌单
|
||||
我诉求是:我用网易云音乐单独新建了一个歌单,我往里面扔歌曲,以更新歌单。希望创建一个自定义的语音命令,让小爱同学随机播放这个歌单里的音乐。然后我通过在米家里执行,比如触发了「我回来了」的智能场景时,就让小爱音箱执行这个自定义的语音命令,就会自动播放我新建的这个歌单里的音乐了。
|
||||
现在的小爱音箱虽然能勉强实现,但是很垃圾。随机播放的随机性有问题,并且只能选择歌单里的 30 首歌。
|
||||
(老哥如果没实现的话,我可以尝试搞搞)
|
||||
|
||||
---
|
||||
|
||||
### 评论 3 - dissipator
|
||||
|
||||
我都能直接利用这个直接播放NeteaseCloudMusicApi这上的歌了。在配合unblk,无敌。我就是没设备,还在路上
|
||||
通过插件实现,非常好,就是不知道怎么开发,有文档我可以尝试一下。
|
||||
|
||||
---
|
||||
|
||||
### 评论 4 - dissipator
|
||||
|
||||
> 建议通过插件实现或者新增一个页面工具把歌单导出 json 。 歌单的 json 格式见 #78
|
||||
|
||||
|
||||
配置处直接填了api的接口
|
||||
http://127.0.0.1:3000/playlist/detail?id=12758992226
|
||||
我是直接再你歌单保存上强改的。
|
||||
|
||||
```python
|
||||
async def downloadjson(data: UrlInfo, Verifcation=Depends(verification)):
|
||||
log.info(data)
|
||||
url = data.url
|
||||
content = "[{"
|
||||
host = f"{url.split('/')[0]}//{url.split('/')[2]}"
|
||||
try:
|
||||
ret = "OK"
|
||||
jsons = await downloadfile(url,"json")
|
||||
# print(jsons)
|
||||
list_name = jsons['playlist']['name']
|
||||
content += '"name":"'+list_name+'","musics":['
|
||||
for song in jsons['playlist']['tracks']:
|
||||
content += f"{{\"name\":\"{song['name']}\",\"url\": \"{host}/song/url?br=999000&proxy=http:%2F%2F127.0.0.1:8080&realIP=211.161.244.70&id={song['id']}\"}}"
|
||||
except Exception as e:
|
||||
log.exception(f"Execption {e}")
|
||||
ret = "Download JSON file failed."
|
||||
content = content[:-1] + "]}]"
|
||||
```
|
||||
照着你的说明。而且能成功播发
|
||||
|
||||
```python
|
||||
@app.get("/musicinfo")
|
||||
async def musicinfo(
|
||||
name: str, musictag: bool = False, Verifcation=Depends(verification)
|
||||
):
|
||||
url = xiaomusic.get_music_url(name)
|
||||
if("song/url" in url):
|
||||
jsons = await downloadfile(url,"json")
|
||||
url = jsons['data'][0]['url']
|
||||
```
|
||||
播放处加了一个判断
|
||||
|
||||
---
|
||||
|
||||
### 评论 5 - hanxi
|
||||
|
||||
> > 建议通过插件实现或者新增一个页面工具把歌单导出 json 。 歌单的 json 格式见 #78
|
||||
|
||||
你的修改我看了,不太通用。生成json,再用现有的接口提交json更通用。
|
||||
|
||||
---
|
||||
|
||||
### 评论 6 - dissipator
|
||||
|
||||
是的,不通用。最好是用插件实现。
|
||||
1. 就是不知道你插件的逻辑。
|
||||
2. 如果用插件就考虑直接读取网易账号下所有歌单。然后选择一个导入,或者全部导入。
|
||||
3. 等你完善文档后我可以尝试写一个。同理,qq等其他平台的歌单也就都可以弄了
|
||||
|
||||
---
|
||||
|
||||
### 评论 7 - hanxi
|
||||
|
||||
等有空我写个修改歌单内容的插件示例吧。
|
||||
|
||||
---
|
||||
|
||||
### 评论 8 - dissipator
|
||||
|
||||
```
|
||||
import requests
|
||||
|
||||
def getmy_playlist(type="netease",api_host="http://127.0.0.1/api", playlist_id=None,uid=None):
|
||||
"""
|
||||
Purpose:
|
||||
"""
|
||||
global log, xiaomusic
|
||||
if type == "netease":
|
||||
if uid:
|
||||
api_url = f"{api_host}/user/playlist?uid={uid}"
|
||||
# 发起请求
|
||||
response = requests.get(api_url, timeout=5) # 增加超时以避免长时间挂起
|
||||
response.raise_for_status() # 如果响应不是200,引发HTTPError异常
|
||||
# log.info(f"getmy_playlist url:{api_url} response:{response.text}")
|
||||
|
||||
music_list = response.json()
|
||||
for item in music_list['playlist']:
|
||||
list_name = item.get("name")
|
||||
|
||||
log.info(f"getmy_playlist name:{list_name}")
|
||||
# if item.get("id") in [12709941656,]:
|
||||
songs_url = f"{api_host}/playlist/detail?id={item['id']}"
|
||||
# 发起请求
|
||||
response = requests.get(songs_url, timeout=5) # 增加超时以避免长时间挂起
|
||||
response.raise_for_status() # 如果响应不是200,引发HTTPError异常
|
||||
# log.info(f"getmy_playlist url:{api_url} response:{response.text}")
|
||||
musics = response.json()
|
||||
one_music_list = []
|
||||
for music in musics['playlist']['tracks']:
|
||||
if (not music):
|
||||
continue
|
||||
# try:
|
||||
name = music['name']
|
||||
picUrl = music['al']['picUrl']
|
||||
artist = music['ar'][0]['name']
|
||||
album = music['al']['name']
|
||||
|
||||
name = music.get("name")
|
||||
url = f"{api_host}/song/url?id={music['id']}&br=350000&realIP=211.161.244.70&proxy=HTTP:%2F%2F127.0.0.1:8080"
|
||||
if (not name) or (not url):
|
||||
continue
|
||||
xiaomusic.all_music[name] = url
|
||||
xiaomusic.all_music_tags[name] = {
|
||||
"title": name,
|
||||
"artist": artist,
|
||||
"album": album,
|
||||
"year": "",
|
||||
"genre": "",
|
||||
"picture": picUrl,
|
||||
"lyrics": ""
|
||||
}
|
||||
|
||||
one_music_list.append(name)
|
||||
log.debug(f"getmy_playlist name:{list_name}")
|
||||
log.debug(one_music_list)
|
||||
# 歌曲名字相同会覆盖
|
||||
xiaomusic.music_list[list_name] = one_music_list
|
||||
xiaomusic.try_save_tag_cache()
|
||||
log.debug(xiaomusic.all_music)
|
||||
log.debug(xiaomusic.music_list)
|
||||
|
||||
return
|
||||
if playlist_id:
|
||||
songs_url = f"{api_host}/playlist/detail?id={playlist_id}"
|
||||
# 发起请求
|
||||
response = requests.get(songs_url, timeout=5) # 增加超时以避免长时间挂起
|
||||
response.raise_for_status() # 如果响应不是200,引发HTTPError异常
|
||||
# log.info(f"getmy_playlist url:{api_url} response:{response.text}")
|
||||
musics = response.json()
|
||||
list_name = musics['playlist']['name']
|
||||
one_music_list = []
|
||||
for music in musics['playlist']['tracks']:
|
||||
if (not music):
|
||||
continue
|
||||
# try:
|
||||
name = music['name']
|
||||
picUrl = music['al']['picUrl']
|
||||
artist = music['ar'][0]['name']
|
||||
album = music['al']['name']
|
||||
|
||||
name = music.get("name")
|
||||
url = f"{api_host}/song/url?id={music['id']}&br=350000&realIP=211.161.244.70&proxy=HTTP:%2F%2F127.0.0.1:8080"
|
||||
if (not name) or (not url):
|
||||
continue
|
||||
xiaomusic.all_music[name] = url
|
||||
xiaomusic.all_music_tags[name] = {
|
||||
"title": name,
|
||||
"artist": artist,
|
||||
"album": album,
|
||||
"year": "",
|
||||
"genre": "",
|
||||
"picture": picUrl,
|
||||
"lyrics": ""
|
||||
}
|
||||
one_music_list.append(name)
|
||||
log.debug(f"getmy_playlist name:{list_name}")
|
||||
log.debug(one_music_list)
|
||||
# 歌曲名字相同会覆盖
|
||||
xiaomusic.music_list[list_name] = one_music_list
|
||||
xiaomusic.try_save_tag_cache()
|
||||
log.debug(xiaomusic.all_music)
|
||||
log.debug(xiaomusic.music_list)
|
||||
return
|
||||
else:
|
||||
log.error(f"getmy_playlist type:{type} not support")
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 9 - dissipator
|
||||
|
||||
> 等有空我写个修改歌单内容的插件示例吧。
|
||||
|
||||
不用拉,插件我已经写出来了
|
||||

|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 10 - hanxi
|
||||
|
||||
发下你的 setting.json 配置吧,方便他人知道怎么配。
|
||||
|
||||
---
|
||||
|
||||
### 评论 11 - dissipator
|
||||
|
||||
我还在测试,设备到了能用了再发吧
|
||||
|
||||
---
|
||||
|
||||
### 评论 12 - guitarbug
|
||||
|
||||
也需要网易歌单功能, 坐等教程
|
||||
|
||||
---
|
||||
|
||||
### 评论 13 - dissipator
|
||||
|
||||
# 成功了
|
||||

|
||||
# 最好是在setting.json里去配置,我测试老是不匹配,在setting.json里去配置终于成功。可以直接调用 [NeteaseCloudMusicApi](http://localhost:3000/docs/#/?id=neteasecloudmusicapi) 接口,甚至使用UnblockNeteaseMusic 解锁灰色,但是代码需要小调整。
|
||||
|
||||
setting.json
|
||||
|
||||
```json
|
||||
{
|
||||
"account": "",
|
||||
"password": "",
|
||||
"mi_did": "",
|
||||
"miio_tts_command": "",
|
||||
"cookie": "",
|
||||
"verbose": false,
|
||||
"music_path": "music",
|
||||
"download_path": "music/download",
|
||||
"conf_path": "conf",
|
||||
"cache_dir": "cache",
|
||||
"hostname": "192.168.2.5",
|
||||
"port": 8090,
|
||||
"public_port": 0,
|
||||
"proxy": "",
|
||||
"search_prefix": "bilisearch:",
|
||||
"ffmpeg_location": "./ffmpeg/bin",
|
||||
"active_cmd": "play,set_random_play,playlocal,play_music_list,play_music_list_index,stop_after_minute,stop,获取歌单",
|
||||
"exclude_dirs": "@eaDir,tmp",
|
||||
"music_path_depth": 10,
|
||||
"disable_httpauth": true,
|
||||
"httpauth_username": "",
|
||||
"httpauth_password": "",
|
||||
"music_list_url": "",
|
||||
"music_list_json": "",
|
||||
"custom_play_list_json": "",
|
||||
"disable_download": false,
|
||||
"key_word_dict": {
|
||||
"播放歌曲": "play",
|
||||
"播放本地歌曲": "playlocal",
|
||||
"关机": "stop",
|
||||
"下一首": "play_next",
|
||||
"上一首": "play_prev",
|
||||
"单曲循环": "set_play_type_one",
|
||||
"全部循环": "set_play_type_all",
|
||||
"随机播放": "set_random_play",
|
||||
"分钟后关机": "stop_after_minute",
|
||||
"播放列表": "play_music_list",
|
||||
"刷新列表": "gen_music_list",
|
||||
"加入收藏": "add_to_favorites",
|
||||
"收藏歌曲": "add_to_favorites",
|
||||
"取消收藏": "del_from_favorites",
|
||||
"播放列表第": "play_music_list_index",
|
||||
"本地播放歌曲": "playlocal",
|
||||
"放歌曲": "play",
|
||||
"暂停": "stop",
|
||||
"停止": "stop",
|
||||
"停止播放": "stop",
|
||||
"播放歌单": "play_music_list",
|
||||
"测试自定义口令": "exec#code1(\"hello\")",
|
||||
"测试链接": "exec#httpget(\"https://github.com/hanxi/xiaomusic\")",
|
||||
"获取歌单": "exec#getmy_playlist(playlist_id=12758992225)"
|
||||
},
|
||||
"key_match_order": [
|
||||
"分钟后关机",
|
||||
"播放歌曲",
|
||||
"下一首",
|
||||
"上一首",
|
||||
"单曲循环",
|
||||
"全部循环",
|
||||
"随机播放",
|
||||
"关机",
|
||||
"刷新列表",
|
||||
"播放列表第",
|
||||
"播放列表",
|
||||
"加入收藏",
|
||||
"收藏歌曲",
|
||||
"取消收藏",
|
||||
"播放本地歌曲",
|
||||
"本地播放歌曲",
|
||||
"放歌曲",
|
||||
"暂停",
|
||||
"停止",
|
||||
"停止播放",
|
||||
"播放歌单",
|
||||
"测试自定义口令",
|
||||
"测试链接",
|
||||
"获取歌单"
|
||||
],
|
||||
"use_music_api": false,
|
||||
"use_music_audio_id": "1582971365183456177",
|
||||
"use_music_id": "355454500",
|
||||
"log_file": "/tmp/xiaomusic.txt",
|
||||
"fuzzy_match_cutoff": 0.6,
|
||||
"enable_fuzzy_match": true,
|
||||
"stop_tts_msg": "收到,再见",
|
||||
"enable_config_example": false,
|
||||
"keywords_playlocal": "播放本地歌曲,本地播放歌曲",
|
||||
"keywords_play": "播放歌曲,放歌曲",
|
||||
"keywords_stop": "关机,暂停,停止,停止播放",
|
||||
"keywords_playlist": "播放列表,播放歌单",
|
||||
"user_key_word_dict": {
|
||||
"测试自定义口令": "exec#code1(\"hello\")",
|
||||
"测试链接": "exec#httpget(\"https://github.com/hanxi/xiaomusic\")",
|
||||
"获取歌单": "exec#getmy_playlist(playlist_id=12758992225)"
|
||||
},
|
||||
"enable_force_stop": false,
|
||||
"devices": {
|
||||
" ": {
|
||||
"did": " ",
|
||||
"device_id": " -17c6-4204- - ",
|
||||
"hardware": "L05C",
|
||||
"name": "小黑你好",
|
||||
"play_type": "",
|
||||
"cur_music": "",
|
||||
"cur_playlist": ""
|
||||
}
|
||||
},
|
||||
"group_list": "",
|
||||
"remove_id3tag": false,
|
||||
"convert_to_mp3": false,
|
||||
"delay_sec": 3,
|
||||
"continue_play": false,
|
||||
"pull_ask_sec": 1,
|
||||
"crontab_json": "",
|
||||
"enable_yt_dlp_cookies": false,
|
||||
"get_ask_by_mina": false
|
||||
}
|
||||
```
|
||||
|
||||
getmy_playlist.py
|
||||
|
||||
```python
|
||||
import requests
|
||||
|
||||
async def getmy_playlist(type="netease",api_host="http://127.0.0.1/api", playlist_id=None,uid=None):
|
||||
"""
|
||||
Purpose:
|
||||
"""
|
||||
global log, xiaomusic
|
||||
if type == "netease":
|
||||
if uid:
|
||||
api_url = f"{api_host}/user/playlist?uid={uid}"
|
||||
# 发起请求
|
||||
response = requests.get(api_url, timeout=5) # 增加超时以避免长时间挂起
|
||||
response.raise_for_status() # 如果响应不是200,引发HTTPError异常
|
||||
# log.info(f"getmy_playlist url:{api_url} response:{response.text}")
|
||||
|
||||
music_list = response.json()
|
||||
for item in music_list['playlist']:
|
||||
list_name = item.get("name")
|
||||
|
||||
log.info(f"getmy_playlist name:{list_name}")
|
||||
# if item.get("id") in [12709941656,]:
|
||||
songs_url = f"{api_host}/playlist/detail?id={item['id']}"
|
||||
# 发起请求
|
||||
response = requests.get(songs_url, timeout=5) # 增加超时以避免长时间挂起
|
||||
response.raise_for_status() # 如果响应不是200,引发HTTPError异常
|
||||
# log.info(f"getmy_playlist url:{api_url} response:{response.text}")
|
||||
musics = response.json()
|
||||
one_music_list = []
|
||||
for music in musics['playlist']['tracks']:
|
||||
if (not music):
|
||||
continue
|
||||
# try:
|
||||
name = music['name']
|
||||
picUrl = music['al']['picUrl']
|
||||
artist = music['ar'][0]['name']
|
||||
album = music['al']['name']
|
||||
|
||||
name = music.get("name")
|
||||
url = f"{api_host}/song/url?id={music['id']}&br=350000&realIP=211.161.244.70&proxy=HTTP:%2F%2F127.0.0.1:8080"
|
||||
if (not name) or (not url):
|
||||
continue
|
||||
xiaomusic.all_music[name] = url
|
||||
xiaomusic.all_music_tags[name] = {
|
||||
"title": name,
|
||||
"artist": artist,
|
||||
"album": album,
|
||||
"year": "",
|
||||
"genre": "",
|
||||
"picture": picUrl,
|
||||
"lyrics": ""
|
||||
}
|
||||
|
||||
one_music_list.append(name)
|
||||
log.debug(f"getmy_playlist name:{list_name}")
|
||||
log.debug(one_music_list)
|
||||
# 歌曲名字相同会覆盖
|
||||
xiaomusic.music_list[list_name] = one_music_list
|
||||
xiaomusic.try_save_tag_cache()
|
||||
log.debug(xiaomusic.all_music)
|
||||
log.debug(xiaomusic.music_list)
|
||||
return
|
||||
if playlist_id:
|
||||
songs_url = f"{api_host}/playlist/detail?id={playlist_id}"
|
||||
# 发起请求
|
||||
response = requests.get(songs_url, timeout=5) # 增加超时以避免长时间挂起
|
||||
response.raise_for_status() # 如果响应不是200,引发HTTPError异常
|
||||
|
||||
musics = response.json()
|
||||
list_name = musics['playlist']['name']
|
||||
log.info(f"getmy_playlist list_name:{list_name} ")
|
||||
one_music_list = []
|
||||
for music in musics['playlist']['tracks']:
|
||||
if (not music):
|
||||
continue
|
||||
# try:
|
||||
name = music['name']
|
||||
picUrl = music['al']['picUrl']
|
||||
artist = music['ar'][0]['name']
|
||||
album = music['al']['name']
|
||||
|
||||
name = music.get("name")
|
||||
url = f"{api_host}/song/url?id={music['id']}&br=350000&proxy=HTTP:%2F%2F127.0.0.1:8080"
|
||||
if (not name) or (not url):
|
||||
continue
|
||||
xiaomusic.all_music[name] = url
|
||||
xiaomusic.all_music_tags[name] = {
|
||||
"title": name,
|
||||
"artist": artist,
|
||||
"album": album,
|
||||
"year": "",
|
||||
"genre": "",
|
||||
"picture": picUrl,
|
||||
"lyrics": ""
|
||||
}
|
||||
one_music_list.append(name)
|
||||
log.debug(f"getmy_playlist name:{list_name}")
|
||||
log.debug(one_music_list)
|
||||
# 歌曲名字相同会覆盖
|
||||
xiaomusic.music_list[list_name] = one_music_list
|
||||
xiaomusic.try_save_tag_cache()
|
||||
return
|
||||
else:
|
||||
log.error(f"getmy_playlist type:{type} not support")
|
||||
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 14 - dissipator
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 15 - dludream
|
||||
|
||||
NeteaseCloudMusicApi似乎获取不到播放地址?其他信息倒是有。
|
||||
|
||||

|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 16 - hanxi
|
||||
|
||||
看代码是另一个接口获取url的: `url = f"{api_host}/song/url?id={music['id']}&br=350000&realIP=211.161.244.70&proxy=HTTP:%2F%2F127.0.0.1:8080"`
|
||||
|
||||
---
|
||||
|
||||
### 评论 17 - dludream
|
||||
|
||||
> 看代码是另一个接口获取url的: `url = f"{api_host}/song/url?id={music['id']}&br=350000&realIP=211.161.244.70&proxy=HTTP:%2F%2F127.0.0.1:8080"`
|
||||
|
||||
是的,我用的是这个接口,https://registry.hub.docker.com/r/gnehs/neteasecloudmusicapi-docker/
|
||||
|
||||
可能网易修改了api,这些获取不了播放地址了。
|
||||
|
||||
我倒不是要这个功能,只是感兴趣看看。我不获取,我直接用yt把歌全下载下来播放。
|
||||
|
||||
---
|
||||
|
||||
### 评论 18 - dissipator
|
||||
|
||||
这个不是网易的接口,是[NeteaseCloudMusicApi](http://localhost:3000/docs/#/?id=neteasecloudmusicapi) 接口。proxy=HTTP:%2F%2F127.0.0.1:8080"是UnblockNeteaseMusic 解锁灰色;
|
||||
完整的使用方式和docker 可以到 https://github.com/dissipator/xiaomusic/tree/dev 看README.md;目前没有教程。本人就在群2,有问题可以找我。
|
||||
|
||||
---
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/269)
|
45
docs/issues/285.md
Normal file
45
docs/issues/285.md
Normal file
@ -0,0 +1,45 @@
|
||||
---
|
||||
title: 相关工具推荐
|
||||
---
|
||||
|
||||
# 相关工具推荐
|
||||
|
||||
- [xhongc/music-tag-web 刮削音乐歌词图片](https://github.com/xhongc/music-tag-web)
|
||||
- [onlyLTY/dockerCopilot 一键更新容器](https://github.com/onlyLTY/dockerCopilot)
|
||||
|
||||
## 评论
|
||||
|
||||
|
||||
### 评论 1 - F-loat
|
||||
|
||||
借楼加个小程序的图 :partying_face: https://github.com/F-loat/xiaoplayer
|
||||
|
||||
### 小程序码
|
||||
|
||||
<p>
|
||||
<img alt="weapp" src="https://assets-1251785959.cos.ap-beijing.myqcloud.com/xiaoplayer/weappcode.jpg" width="24%" />
|
||||
</p>
|
||||
|
||||
### 截图
|
||||
|
||||
<p>
|
||||
<img src="https://assets-1251785959.cos.ap-beijing.myqcloud.com/xiaoplayer/screenshot/1.jpg" width="24%" />
|
||||
<img src="https://assets-1251785959.cos.ap-beijing.myqcloud.com/xiaoplayer/screenshot/2.jpg" width="24%" />
|
||||
<img src="https://assets-1251785959.cos.ap-beijing.myqcloud.com/xiaoplayer/screenshot/4.jpg" width="24%" />
|
||||
<img src="https://assets-1251785959.cos.ap-beijing.myqcloud.com/xiaoplayer/screenshot/3.jpg" width="24%" />
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
### 评论 2 - hanxi
|
||||
|
||||
@F-loat 可以在欢迎页加个链接显示小程序码。
|
||||
|
||||
---
|
||||
|
||||
### 评论 3 - F-loat
|
||||
|
||||
@hanxi 可以的,这样还能自动把 ip 用参数带过来,我有空搞一下
|
||||
|
||||
---
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/285)
|
62
docs/issues/294.md
Normal file
62
docs/issues/294.md
Normal file
@ -0,0 +1,62 @@
|
||||
---
|
||||
title: 关于M01型号的注意事项
|
||||
---
|
||||
|
||||
# 关于M01型号的注意事项
|
||||
|
||||
M01:在0.3.55版本【型号兼容模式】与【特殊型号获取对话记录】都设为false或true,都可以语音了。
|
||||
如果【型号兼容模式】为 true,默认UI显示播放中,但音箱没声音。
|
||||
|
||||
型号:S12A、LX04、S12 在米家APP可以联动,比如客厅有人自定义指令:播放歌曲、关机...等
|
||||
而M01无论【型号兼容模式】与【特殊型号获取对话记录】设为false或true,都无法执行任何自定义指令…
|
||||
|
||||

|
||||
|
||||
|
||||
## 评论
|
||||
|
||||
|
||||
### 评论 1 - hanxi
|
||||
|
||||
M01 保持默认设置应该是能语音和播放的吧。自定义指令的功能应该是 M01 本身就不支持,可能属于放弃维护的产品吧。
|
||||
|
||||
---
|
||||
|
||||
### 评论 2 - bj803
|
||||
|
||||
> M01 保持默认设置应该是能语音和播放的吧。自定义指令的功能应该是 M01 本身就不支持,可能属于放弃维护的产品吧。
|
||||
|
||||
刚试了用:pause是可以暂停(不过只暂2分钟左右又自己播放了)
|
||||
|
||||
---
|
||||
|
||||
### 评论 3 - hanxi
|
||||
|
||||
只能网页里点关机按钮,或者语音关机。所有型号都一样。
|
||||
|
||||
---
|
||||
|
||||
### 评论 4 - bj803
|
||||
|
||||
> 型号:S12A、LX04、S12
|
||||
|
||||
|
||||
|
||||
> 只能网页里点关机按钮,或者语音关机。所有型号都一样。
|
||||
|
||||
在型号:S12A、LX04、S12 除了能网页里点关机按钮或者语音开关机外,能在米家APP自定义指令进行播放与关机(例如当客厅客有人自定义指令"播放歌曲",无人自定义指令"关机"。M01自定义指令"pause"可以暂停,其他口令不行。
|
||||
|
||||
---
|
||||
|
||||
### 评论 5 - bj803
|
||||
|
||||
刚又试了一下,用自定义play stop、power off可以停止播放关机,用自定义play music可以播放音乐,可能M01不需要下划线
|
||||
|
||||
---
|
||||
|
||||
### 评论 6 - hanxi
|
||||
|
||||
感谢你的反馈。
|
||||
|
||||
---
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/294)
|
232
docs/issues/297.md
Normal file
232
docs/issues/297.md
Normal file
@ -0,0 +1,232 @@
|
||||
---
|
||||
title: xiaomusic极空间安装教程(2024/12/4更新)
|
||||
---
|
||||
|
||||
# xiaomusic极空间安装教程(2024-12-4更新)
|
||||
|
||||
> 本教程同步更新于最新版的xiaomusic
|
||||
|
||||
<s>看不懂/嫌麻烦/懒 但有点小钱,找 hanxi 预约微信或者 QQ 远程安装,他便宜,收费50一次,作法不成功不要钱</s>
|
||||
|
||||
**ARM架构自己想办法获取镜像 点名Z2PRO**
|
||||
|
||||
# 获取镜像
|
||||
|
||||
## 科学环境:
|
||||
|
||||
1. 在 **搜索框** 中输入 `hanxi/xiaomusic`,在搜索的结果中直接选择第一个,点击**下载**
|
||||
|
||||

|
||||
|
||||
2. 在新弹出的版本选择窗口中,根据你的情况选择。
|
||||

|
||||
|
||||
### 版本说明
|
||||
- 获取 **最新版** 直接点击 **下载** 即可,建议使用默认的 `latest`
|
||||
- 获取 **特定版本** [点击此处可查看](https://github.com/hanxi/xiaomusic/releases) 用于回退出现功能不兼容、恶性bug等情况,一般建议反馈开发者,修复很及时,尽量不要回退版本 请输入如 `v0.3.55`
|
||||
- 获取 **实验版本**(已修复部分bug但未推送)请输入 `main`
|
||||
|
||||
|
||||
3. 接着弹出如图所示的页面,耐心等待下载完成。
|
||||

|
||||
|
||||
|
||||
4. 下载完成后切换到 **本地镜像** 选项卡
|
||||
|
||||
剩余步骤与国内环境相同,见 [部署镜像](#部署镜像)
|
||||
|
||||
## 国内环境:
|
||||
1. 打开docker,在左侧的菜单中选择 **镜像** 切换到 **仓库** 选项卡,点击 **自定义拉取** 按钮
|
||||

|
||||
2. 在弹出的对话框中输入 ` m.daocloud.io/docker.io/hanxi/xiaomusic ` ,点击 **拉取** 按钮
|
||||

|
||||
3. 下载完成后切换到 **本地镜像** 选项卡
|
||||
|
||||
# 部署镜像
|
||||
1. 找到刚才已经拉取好的镜像,*单击选中*,点击 **添加到容器**
|
||||

|
||||
2. 在弹出的 **创建容器** 菜单中,切换到 **文件夹路径** 选项卡中,按图中的提示进行配置。
|
||||

|
||||
|
||||
**注意:**
|
||||
* 装载路径中的 **配置文件目录** 和 **音乐目录** 必须进行配置。
|
||||
* 如有多个音乐目录,请按照下面的格式进行配置
|
||||
|
||||
| 文件/文件夹 | 装载路径 |
|
||||
| :----------: | :----------: |
|
||||
| /data/music1 | /app/music/music1 |
|
||||
| /data/music2 | /app/music/music2 |
|
||||
|
||||
3. 切换到 **端口** 选项卡,修改成与你的极空间 *不冲突* 的本地端口号,如 `5678` (示例按照本地端口号5678来进行配置,下同)
|
||||
> 友情提醒: 尽量不要修改容器端口号,否则要到配置文件目录修改对应的`setting.json`文件中的配置,会增加很多麻烦
|
||||
|
||||

|
||||
|
||||
5. 切换到 **环境** 选项卡,将`XIAOMUSIC_HOSTNAME` 修改为你的 **极空间的IP地址**
|
||||
> 友情提醒:
|
||||
> 1. 此处不可忽略,否则后续播放音乐会出现问题
|
||||
> 2. 不要尝试修改XIAOMUSIC_PORT!除非你没有看上一条的友情提醒
|
||||
> 3. 不要在此处配置`ACCOUNT`和`PASSWORD`,没有过风控仍然无法使用!上古时代的教程不要再看了,容易走火入魔!
|
||||
|
||||

|
||||
|
||||
6. 点击 **应用**按钮,此时容器已经配置完成了,切换到左侧的 **容器概况** 菜单,可查看容器详情
|
||||

|
||||
|
||||
# 进入xiaomusic网页端进行配置
|
||||
1.请关闭代理,打开浏览器,地址栏输入 **极空间IP:本地端口号** 如`192.168.2.5:5678`,打开网页后点击 **默认主题**
|
||||
|
||||

|
||||
|
||||
**注意:**
|
||||
* 不要复制此处的地址,必须输入极空间的IP地址。不知道的建议上咸鱼50块换个不锈钢盆
|
||||
* 不要输入容器的端口号8090,极空间不能使用这个端口号。
|
||||
|
||||
2. 点击 **设置** 按钮进入设置页面
|
||||

|
||||
|
||||
3. 输入**小米账号**、**小米密码**、**XIAOMUSIC_HOSTNAME(IP或域名):**、**外网访问端口**,滑到页面最下方点击 **保存**
|
||||

|
||||

|
||||
|
||||
**注意:**
|
||||
* 小米账号非手机号,请在手机设置-个人中心中查看小米ID
|
||||
* 密码不要输错,账号密码错误在上面会弹出提醒,不要假装看不见上面的提醒文字
|
||||
* XIAOMUSIC_HOSTNAME(IP或域名): 可以输入当前页面的IP地址(在地址栏),**不要在此处输入端口号!!!**,如果域名需要使用https协议,请加上https://
|
||||
|
||||
4.如果以上步骤没错,你将在设置中心看见设备列表
|
||||

|
||||
|
||||
5. 回到首页,出现设备列表,切换对应设备即可畅享
|
||||

|
||||
|
||||
|
||||
## 评论
|
||||
|
||||
|
||||
### 评论 1 - xiaohuobanhahaha
|
||||
|
||||
[xiaomusic.txt](https://github.com/user-attachments/files/18011572/xiaomusic.txt)
|
||||
|
||||
<img width="559" alt="截屏2024-12-05 00 43 24" src="https://github.com/user-attachments/assets/160aeacc-e1c0-40fa-b219-6b6f5183c43c">
|
||||
an'zh
|
||||
无法使用语音播放歌曲,小爱s12a。极空间z4pro。
|
||||
1. 按照教程,点击播放本地歌曲,提示hostname和设置的端口映射不匹配。映射5678,容器端口8090.
|
||||
2.网络host模式,能够本地播放,无法使用语音控制,提示“下载app”。日志已上传
|
||||
|
||||
---
|
||||
|
||||
### 评论 2 - 52fisher
|
||||
|
||||
> [xiaomusic.txt](https://github.com/user-attachments/files/18011572/xiaomusic.txt)
|
||||
> <img alt="截屏2024-12-05 00 43 24" width="559" src="https://private-user-images.githubusercontent.com/20666294/392485798-160aeacc-e1c0-40fa-b219-6b6f5183c43c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzMzMzE3NzIsIm5iZiI6MTczMzMzMTQ3MiwicGF0aCI6Ii8yMDY2NjI5NC8zOTI0ODU3OTgtMTYwYWVhY2MtZTFjMC00MGZhLWIyMTktNmI2ZjUxODNjNDNjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjA0VDE2NTc1MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJhMmZjMzFhMzdmYmI1NGJjZTg1ZGVhNGI2Njc1YjYwYmQxZjVmMzYyYjg3YWNlNzdhNmEwMzE4Y2UyMTRlNjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0._OSLH4Bc0stzG4tLdPalW-mB-ASKlM9uztZ1icefPFU"> an'zh 无法使用语音播放歌曲,小爱s12a。极空间z4pro。 1. 按照教程,点击播放本地歌曲,提示hostname和设置的端口映射不匹配。映射5678,容器端口8090. 2.网络host模式,能够本地播放,无法使用语音控制,提示“下载app”。日志已上传
|
||||
|
||||
既然你映射的5678,为什么你又在那把监听端口改成11999? 我的教程里面全程没有写要修改监听端口
|
||||
|
||||
---
|
||||
|
||||
### 评论 3 - xiaohuobanhahaha
|
||||
|
||||
我没讲清楚。我试了两种极空间的桥接和host模式。桥接模式。我按照教程走的。报错如图
|
||||
<img width="847" alt="截屏2024-12-05 01 46 52" src="https://github.com/user-attachments/assets/e7f58907-a216-41e8-bafa-5d49db8eca45">
|
||||
<img width="516" alt="截屏2024-12-05 01 49 11" src="https://github.com/user-attachments/assets/4261c2e2-fe0c-4ff6-ae06-ead7f928af57">
|
||||
<img width="647" alt="截屏2024-12-05 01 47 02" src="https://github.com/user-attachments/assets/35b195d1-9512-40bb-b336-847e0bb2e6c9">
|
||||
<img width="667" alt="截屏2024-12-05 01 47 15" src="https://github.com/user-attachments/assets/b917a977-38cf-4126-8754-c46abe9360a2">
|
||||
|
||||
提到的第二个问题和日志,是我将网络模式改为host的情况,能连上音箱,但是没法使用语音控制。
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 4 - 52fisher
|
||||
|
||||
> 我没讲清楚。我试了两种极空间的桥接和host模式。桥接模式。我按照教程走的。报错如图 <img alt="截屏2024-12-05 01 46 52" width="847" src="https://private-user-images.githubusercontent.com/20666294/392507064-e7f58907-a216-41e8-bafa-5d49db8eca45.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzMzMzQ4OTEsIm5iZiI6MTczMzMzNDU5MSwicGF0aCI6Ii8yMDY2NjI5NC8zOTI1MDcwNjQtZTdmNTg5MDctYTIxNi00MWU4LWJhZmEtNWQ0OWRiOGVjYTQ1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjA0VDE3NDk1MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBlMTYxZGI0ZjRiYTkyOGIwZWQ4YWZlZWJiY2U3MzljZTg5NTNhZjJkNzlkNzYyYzlmMWJkZjlkMGYwNWEzNzgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.XSsE7pZj7pwj4kaZBQ02fyH13bVXLzGuJcjRv98WWiQ"> <img alt="截屏2024-12-05 01 49 11" width="516" src="https://private-user-images.githubusercontent.com/20666294/392507855-4261c2e2-fe0c-4ff6-ae06-ead7f928af57.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzMzMzQ4OTEsIm5iZiI6MTczMzMzNDU5MSwicGF0aCI6Ii8yMDY2NjI5NC8zOTI1MDc4NTUtNDI2MWMyZTItZmUwYy00ZmY2LWFlMDYtZWFkN2Y5MjhhZjU3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjA0VDE3NDk1MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk2NzFjYTRmNzAyMTJlYzYwZDI4NThlMWQ1MDViZGU5MDI3YThjNzExZTAyNWJmM2NlYWQzZDIzYzRhMjc1MTcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.NIBWfzpZ5OTIic6Gv83_PrOdUX27o19Vo1zDvFyrILE"> <img alt="截屏2024-12-05 01 47 02" width="647" src="https://private-user-images.githubusercontent.com/20666294/392507111-35b195d1-9512-40bb-b336-847e0bb2e6c9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzMzMzQ4OTEsIm5iZiI6MTczMzMzNDU5MSwicGF0aCI6Ii8yMDY2NjI5NC8zOTI1MDcxMTEtMzViMTk1ZDEtOTUxMi00MGJiLWIzMzYtODQ3ZTBiYjJlNmM5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjA0VDE3NDk1MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI5YTliOWQzNDUyYThjODYwZmY4NTJiMTNkYmFmNmY3ZWE5ZDBlMmQ5OGQxMTIzM2JlMmIxZTcwNTNlMmYwZTEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.f9czCn43Yzm7sn6-cpJykaWIng4WJf9aoE52kbVeASY"> <img alt="截屏2024-12-05 01 47 15" width="667" src="https://private-user-images.githubusercontent.com/20666294/392507187-b917a977-38cf-4126-8754-c46abe9360a2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzMzMzQ4OTEsIm5iZiI6MTczMzMzNDU5MSwicGF0aCI6Ii8yMDY2NjI5NC8zOTI1MDcxODctYjkxN2E5NzctMzhjZi00MTI2LTg3NTQtYzQ2YWJlOTM2MGEyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjA0VDE3NDk1MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ3MDE1NjVhZjMzMTRkNjg5ZTA5NDc1MDU3OTFiODc3NTYyMTg3Y2FjNjg2NGM3MjE0N2VlNjg0YzFmZTgwZGImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.tX8iIlpvE43Krq4q__7dQ3Wuz8kYQuzmlf-XXNHO1Ws">
|
||||
>
|
||||
> 提到的第二个问题和日志,是我将网络模式改为host的情况,能连上音箱,但是没法使用语音控制。
|
||||
|
||||
把外网访问端口改成5678
|
||||
|
||||
---
|
||||
|
||||
### 评论 5 - xiaohuobanhahaha
|
||||
|
||||
可以连接上网页控制了,但是语音控制仍然不行。已经按照FAQ问题集合 #99 重启docker。
|
||||
这是日志,
|
||||
[xiaomusic.txt](https://github.com/user-attachments/files/18012369/xiaomusic.txt)
|
||||
|
||||
---
|
||||
|
||||
### 评论 6 - 52fisher
|
||||
|
||||
> 可以连接上网页控制了,但是语音控制仍然不行。已经按照FAQ问题集合 #99 重启docker。 这是日志, [xiaomusic.txt](https://github.com/user-attachments/files/18012369/xiaomusic.txt)
|
||||
|
||||
|
||||
你的设置 hostname='192.168.31.165', port=8090, public_port=5678,
|
||||
后台的ip 192.168.31.143 检查一下你的地址 有可能是你的ip地址改变了
|
||||
|
||||
---
|
||||
|
||||
### 评论 7 - xiaohuobanhahaha
|
||||
|
||||
> > 可以连接上网页控制了,但是语音控制仍然不行。已经按照FAQ问题集合 #99 重启docker。 这是日志, [xiaomusic.txt](https://github.com/user-attachments/files/18012369/xiaomusic.txt)
|
||||
>
|
||||
> 你的设置 hostname='192.168.31.165', port=8090, public_port=5678, 后台的ip 192.168.31.143 检查一下你的地址 有可能是你的ip地址改变了
|
||||
|
||||
确实是变了。192.168.31.143是我电脑的ip。 hostname='192.168.31.165'是极空间的。小爱是192.168.31.77。现在我的网络结构是电脑连nas上的istoreos旁路由。nas直连主路由,小爱直连主路由。主路由dhcp都绑定了。 大佬,这种情况该怎么解决呢。所有设置都是默认,没修改哈。
|
||||
|
||||
---
|
||||
|
||||
### 评论 8 - 52fisher
|
||||
|
||||
> 确实是变了。192.168.31.143是我电脑的ip。 hostname='192.168.31.165'是极空间的。小爱是192.168.31.77。现在我的网络结构是电脑连nas上的istoreos旁路由。nas直连主路由,小爱直连主路由。主路由dhcp都绑定了。 大佬,这种情况该怎么解决呢。所有设置都是默认,没修改哈。
|
||||
|
||||
容器的网络模式改成bridge试试呢 没解决的话你加群明天再详聊吧
|
||||
|
||||
---
|
||||
|
||||
### 评论 9 - xiaohuobanhahaha
|
||||
|
||||
<img width="660" alt="截屏2024-12-05 02 23 53" src="https://github.com/user-attachments/assets/b9d26de9-3dcf-4e65-9460-36603735c887">
|
||||
<img width="780" alt="截屏2024-12-05 02 24 49" src="https://github.com/user-attachments/assets/6a204cdb-bb10-4f35-822d-613aeed0fae0">
|
||||
|
||||
|
||||
> > 确实是变了。192.168.31.143是我电脑的ip。 hostname='192.168.31.165'是极空间的。小爱是192.168.31.77。现在我的网络结构是电脑连nas上的istoreos旁路由。nas直连主路由,小爱直连主路由。主路由dhcp都绑定了。 大佬,这种情况该怎么解决呢。所有设置都是默认,没修改哈。
|
||||
>
|
||||
> 容器的网络模式改成bridge试试呢 没解决的话你加群明天再详聊吧
|
||||
|
||||
辛苦了,这么晚还在回复。我一直用的bridge。大佬,群号多少,不行我明天群里问吧。
|
||||
|
||||
---
|
||||
|
||||
### 评论 10 - 52fisher
|
||||
|
||||
> <img alt="截屏2024-12-05 02 23 53" width="660" src="https://private-user-images.githubusercontent.com/20666294/392519509-b9d26de9-3dcf-4e65-9460-36603735c887.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzMzMzcwNzEsIm5iZiI6MTczMzMzNjc3MSwicGF0aCI6Ii8yMDY2NjI5NC8zOTI1MTk1MDktYjlkMjZkZTktM2RjZi00ZTY1LTk0NjAtMzY2MDM3MzVjODg3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjA0VDE4MjYxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFhN2I4NzQyYjA4YzRiOTk4OTU3NmVkNjU2MjM1ODhjMmNlOWU0YTg5OTFlMzA1NTcxMTA5OTk1YjgwNThhOTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.yrC-sn2T6PKwBJb_mal1T2yxcSz008Hb7KWVmOe6zaA"> <img alt="截屏2024-12-05 02 24 49" width="780" src="https://private-user-images.githubusercontent.com/20666294/392519852-6a204cdb-bb10-4f35-822d-613aeed0fae0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzMzMzcwNzEsIm5iZiI6MTczMzMzNjc3MSwicGF0aCI6Ii8yMDY2NjI5NC8zOTI1MTk4NTItNmEyMDRjZGItYmIxMC00ZjM1LTgyMmQtNjEzYWVlZDBmYWUwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjA0VDE4MjYxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE4MzlhODM1NDY4ZjFmN2I2Y2JkZWU5ZGFkNTNjYTNmZDg2OTU3YzA0MjRkMDA2MzRmOTk2ZGE3NmE2NjViZmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0._I8Rll2a96i-cx6WBvEwOclNInfOmZkD5HmcorzT-KI">
|
||||
>
|
||||
> > > 确实是变了。192.168.31.143是我电脑的ip。 hostname='192.168.31.165'是极空间的。小爱是192.168.31.77。现在我的网络结构是电脑连nas上的istoreos旁路由。nas直连主路由,小爱直连主路由。主路由dhcp都绑定了。 大佬,这种情况该怎么解决呢。所有设置都是默认,没修改哈。
|
||||
> >
|
||||
> >
|
||||
> > 容器的网络模式改成bridge试试呢 没解决的话你加群明天再详聊吧
|
||||
>
|
||||
> 辛苦了,这么晚还在回复。我一直用的bridge。大佬,群号多少,不行我明天群里问吧。
|
||||
|
||||
[readme](https://github.com/hanxi/xiaomusic?tab=readme-ov-file#-%E8%AE%A8%E8%AE%BA%E5%8C%BA)
|
||||
|
||||
---
|
||||
|
||||
### 评论 11 - xiaohuobanhahaha
|
||||
|
||||
> > <img alt="截屏2024-12-05 02 23 53" width="660" src="https://private-user-images.githubusercontent.com/20666294/392519509-b9d26de9-3dcf-4e65-9460-36603735c887.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzMzMzcwNzEsIm5iZiI6MTczMzMzNjc3MSwicGF0aCI6Ii8yMDY2NjI5NC8zOTI1MTk1MDktYjlkMjZkZTktM2RjZi00ZTY1LTk0NjAtMzY2MDM3MzVjODg3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjA0VDE4MjYxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFhN2I4NzQyYjA4YzRiOTk4OTU3NmVkNjU2MjM1ODhjMmNlOWU0YTg5OTFlMzA1NTcxMTA5OTk1YjgwNThhOTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.yrC-sn2T6PKwBJb_mal1T2yxcSz008Hb7KWVmOe6zaA"> <img alt="截屏2024-12-05 02 24 49" width="780" src="https://private-user-images.githubusercontent.com/20666294/392519852-6a204cdb-bb10-4f35-822d-613aeed0fae0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzMzMzcwNzEsIm5iZiI6MTczMzMzNjc3MSwicGF0aCI6Ii8yMDY2NjI5NC8zOTI1MTk4NTItNmEyMDRjZGItYmIxMC00ZjM1LTgyMmQtNjEzYWVlZDBmYWUwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjA0VDE4MjYxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE4MzlhODM1NDY4ZjFmN2I2Y2JkZWU5ZGFkNTNjYTNmZDg2OTU3YzA0MjRkMDA2MzRmOTk2ZGE3NmE2NjViZmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0._I8Rll2a96i-cx6WBvEwOclNInfOmZkD5HmcorzT-KI">
|
||||
> > > > 确实是变了。192.168.31.143是我电脑的ip。 hostname='192.168.31.165'是极空间的。小爱是192.168.31.77。现在我的网络结构是电脑连nas上的istoreos旁路由。nas直连主路由,小爱直连主路由。主路由dhcp都绑定了。 大佬,这种情况该怎么解决呢。所有设置都是默认,没修改哈。
|
||||
> > >
|
||||
> > >
|
||||
> > > 容器的网络模式改成bridge试试呢 没解决的话你加群明天再详聊吧
|
||||
> >
|
||||
> >
|
||||
> > 辛苦了,这么晚还在回复。我一直用的bridge。大佬,群号多少,不行我明天群里问吧。
|
||||
>
|
||||
> [readme](https://github.com/hanxi/xiaomusic?tab=readme-ov-file#-%E8%AE%A8%E8%AE%BA%E5%8C%BA)
|
||||
|
||||
已自查解决。问题是账号问题。绑定设备的一定是创建者,不能是管理员。
|
||||
|
||||
---
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/297)
|
327
docs/issues/78.md
Normal file
327
docs/issues/78.md
Normal file
@ -0,0 +1,327 @@
|
||||
---
|
||||
title: 已支持配置自定义网络歌单,在这里分享你的歌单
|
||||
---
|
||||
|
||||
# 已支持配置自定义网络歌单,在这里分享你的歌单
|
||||
|
||||
设置页面新增一个输入框配置json格式,可以定义配置音乐源,可以是电台或者其他的m3u8格式的。
|
||||
再加一个输入框配置这个json文件的url,点击获取按钮把url对应的json内容填充到json输入框,方便直接使用别人分享的歌单。
|
||||
|
||||
比如这样的链接
|
||||
- https://lhttp.qtfm.cn/live/4915/64k.mp3
|
||||
- http://ngcdn001.cnr.cn/live/zgzs/index.m3u8
|
||||
|
||||
已经测试能播放出来:
|
||||
```
|
||||
python3 micli.py play http://ngcdn001.cnr.cn/live/zgzs/index.m3u8
|
||||
```
|
||||
|
||||
预计歌单格式是这样的, type 为 radio 作为电台的设定,会一直播放当前电台,不会播放下一首。
|
||||
```json
|
||||
[
|
||||
{
|
||||
"name":"歌单1",
|
||||
"musics":[
|
||||
{
|
||||
"name":"歌名1",
|
||||
"url":"http://ngcdn001.cnr.cn/live/zgzs/index.m3u8",
|
||||
"type":"radio"
|
||||
},
|
||||
{
|
||||
"name":"歌名2",
|
||||
"url":"https://lhttp.qtfm.cn/live/4915/64k.mp3"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name":"歌单2",
|
||||
"musics":[
|
||||
{
|
||||
"name":"歌名3",
|
||||
"url":"https://lhttp.qtfm.cn/live/4915/64k.mp3"
|
||||
},
|
||||
{
|
||||
"name":"歌名4",
|
||||
"url":"https://lhttp.qtfm.cn/live/4915/64k.mp3"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
这里分享一个让 chatgpt 写 python 脚本来生成歌单的例子 <https://chatgpt.com/share/6751c019-74c0-800a-a978-a20c636d4464> 。
|
||||
|
||||
## 评论
|
||||
|
||||
|
||||
### 评论 1 - hanxi
|
||||
|
||||
可以使用 gist 来配置和分享 json 文件,比如 https://gist.github.com/hanxi/dda82d964a28f8110f8fba81c3ff8314
|
||||
|
||||
点击 raw 得到 json 文件的链接 https://gist.githubusercontent.com/hanxi/dda82d964a28f8110f8fba81c3ff8314/raw/8787844d81c39dbfaad4e37954dd449d8bba5728/example.json
|
||||
|
||||
当然还可以用其他工具分享json文件,比如 github 和国内的 gitee 。
|
||||
|
||||
---
|
||||
|
||||
### 评论 2 - hanxi
|
||||
|
||||
已经有工具支持将 m3u 格式的电台文件转为网络歌单格式,见 /issues/88.html
|
||||
|
||||
欢迎有兴趣的朋友制作其他格式转换工具,比如网易歌单那一类的。
|
||||
|
||||
---
|
||||
|
||||
### 评论 3 - lazybabyz
|
||||
|
||||
按照教程设置后 播放列表选择m3u电台 再选择播放列表 歌曲,结果显示播放中 不断在转台
|
||||
stdout: [08:58:02] [0.3.37] [INFO] 10.0.80.191:24020 - "GET /playingmusic?did=566731712 HTTP/1.1" 200
|
||||
stdout: [08:58:04] [0.3.37] [INFO] 10.0.80.191:24020 - "GET /playingmusic?did=566731712 HTTP/1.1" 200
|
||||
stdout: [08:58:04] [0.3.37] [INFO] 10.0.80.191:24020 - "GET /static/default/index.html HTTP/1.1" 304
|
||||
stdout: [08:58:04] [0.3.37] [INFO] 10.0.80.191:24020 - "GET /getsetting HTTP/1.1" 200
|
||||
stdout: [08:58:04] [0.3.37] [INFO] 10.0.80.191:24022 - "GET /getversion HTTP/1.1" 200
|
||||
stdout: [08:58:04] [0.3.37] [INFO] 10.0.80.191:24020 - "GET /musiclist HTTP/1.1" 200
|
||||
stdout: [08:58:04] [0.3.37] [INFO] 10.0.80.191:24021 - "GET /playingmusic?did=566731712 HTTP/1.1" 200
|
||||
stdout: [08:58:04] [0.3.37] [INFO] 10.0.80.191:24020 - "GET /static/default/curplaylist?did=566731712 HTTP/1.1" 404
|
||||
stdout: [08:58:05] [0.3.37] [INFO] 10.0.80.191:24022 - "GET /getvolume?did=566731712 HTTP/1.1" 500
|
||||
stderr: [08:58:05] [0.3.37] [ERROR] Exception in ASGI application
|
||||
stderr: Traceback (most recent call last):
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/uvicorn/protocols/http/h11_impl.py", line 406, in run_asgi
|
||||
stderr: result = await app( # type: ignore[func-returns-value]
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 70, in __call__
|
||||
stderr: return await self.app(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/fastapi/applications.py", line 1054, in __call__
|
||||
stderr: await super().__call__(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/applications.py", line 113, in __call__
|
||||
stderr: await self.middleware_stack(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 187, in __call__
|
||||
stderr: raise exc
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 165, in __call__
|
||||
stderr: await self.app(scope, receive, _send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 85, in __call__
|
||||
stderr: await self.app(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
|
||||
stderr: await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 62, in wrapped_app
|
||||
stderr: raise exc
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 51, in wrapped_app
|
||||
stderr: await app(scope, receive, sender)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 715, in __call__
|
||||
stderr: await self.middleware_stack(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 735, in app
|
||||
stderr: await route.handle(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 288, in handle
|
||||
stderr: await self.app(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 76, in app
|
||||
stderr: await wrap_app_handling_exceptions(app, request)(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 62, in wrapped_app
|
||||
stderr: raise exc
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 51, in wrapped_app
|
||||
stderr: await app(scope, receive, sender)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 73, in app
|
||||
stderr: response = await f(request)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/fastapi/routing.py", line 301, in app
|
||||
stderr: raw_response = await run_endpoint_function(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/fastapi/routing.py", line 212, in run_endpoint_function
|
||||
stderr: return await dependant.call(**values)
|
||||
stderr: File "/app/xiaomusic/httpserver.py", line 124, in getvolume
|
||||
stderr: volume = await xiaomusic.get_volume(did=did)
|
||||
stderr: File "/app/xiaomusic/xiaomusic.py", line 809, in get_volume
|
||||
stderr: return await self.devices[did].get_volume()
|
||||
stderr: File "/app/xiaomusic/xiaomusic.py", line 1400, in get_volume
|
||||
stderr: playing_info = await self.xiaomusic.mina_service.player_get_status(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 103, in player_get_status
|
||||
stderr: return await self.ubus_request(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 59, in ubus_request
|
||||
stderr: result = await self.mina_request(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 49, in mina_request
|
||||
stderr: return await self.account.mi_request(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/miaccount.py", line 150, in mi_request
|
||||
stderr: raise Exception(f"Error {url}: {resp}")
|
||||
stderr: Exception: Error https://api2.mina.mi.com/remote/ubus: {'code': 101, 'message': 'ubus server or device returned invalid result', 'data': {'device_data': '{"msg":"Device is offline","code":608}', 'reqID': 'app_ios_YfG6nlPVAtwDHEgMeJXxcOiZQLrR57'}}
|
||||
stderr: [08:58:05] [0.3.37] [ERROR] h11_impl.py:411: Exception in ASGI application
|
||||
stderr: Traceback (most recent call last):
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/uvicorn/protocols/http/h11_impl.py", line 406, in run_asgi
|
||||
stderr: result = await app( # type: ignore[func-returns-value]
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 70, in __call__
|
||||
stderr: return await self.app(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/fastapi/applications.py", line 1054, in __call__
|
||||
stderr: await super().__call__(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/applications.py", line 113, in __call__
|
||||
stderr: await self.middleware_stack(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 187, in __call__
|
||||
stderr: raise exc
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 165, in __call__
|
||||
stderr: await self.app(scope, receive, _send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 85, in __call__
|
||||
stderr: await self.app(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
|
||||
stderr: await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 62, in wrapped_app
|
||||
stderr: raise exc
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 51, in wrapped_app
|
||||
stderr: await app(scope, receive, sender)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 715, in __call__
|
||||
stderr: await self.middleware_stack(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 735, in app
|
||||
stderr: await route.handle(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 288, in handle
|
||||
stderr: await self.app(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 76, in app
|
||||
stderr: await wrap_app_handling_exceptions(app, request)(scope, receive, send)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 62, in wrapped_app
|
||||
stderr: raise exc
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 51, in wrapped_app
|
||||
stderr: await app(scope, receive, sender)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 73, in app
|
||||
stderr: response = await f(request)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/fastapi/routing.py", line 301, in app
|
||||
stderr: raw_response = await run_endpoint_function(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/fastapi/routing.py", line 212, in run_endpoint_function
|
||||
stderr: return await dependant.call(**values)
|
||||
stderr: File "/app/xiaomusic/httpserver.py", line 124, in getvolume
|
||||
stderr: volume = await xiaomusic.get_volume(did=did)
|
||||
stderr: File "/app/xiaomusic/xiaomusic.py", line 809, in get_volume
|
||||
stderr: return await self.devices[did].get_volume()
|
||||
stderr: File "/app/xiaomusic/xiaomusic.py", line 1400, in get_volume
|
||||
stderr: playing_info = await self.xiaomusic.mina_service.player_get_status(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 103, in player_get_status
|
||||
stderr: return await self.ubus_request(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 59, in ubus_request
|
||||
stderr: result = await self.mina_request(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 49, in mina_request
|
||||
stderr: return await self.account.mi_request(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/miaccount.py", line 150, in mi_request
|
||||
stderr: raise Exception(f"Error {url}: {resp}")
|
||||
stderr: Exception: Error https://api2.mina.mi.com/remote/ubus: {'code': 101, 'message': 'ubus server or device returned invalid result', 'data': {'device_data': '{"msg":"Device is offline","code":608}', 'reqID': 'app_ios_YfG6nlPVAtwDHEgMeJXxcOiZQLrR57'}}
|
||||
stdout: [08:58:05] [0.3.37] [INFO] 10.0.80.191:24020 - "GET /playingmusic?did=566731712 HTTP/1.1" 200
|
||||
stdout: [08:58:05] [0.3.37] [INFO] 10.0.80.191:24021 - "GET /playingmusic?did=566731712 HTTP/1.1" 200
|
||||
stdout: [08:58:07] [0.3.37] [INFO] 10.0.80.191:24021 - "GET /playingmusic?did=566731712 HTTP/1.1" 200
|
||||
stdout: [08:58:08] [0.3.37] [INFO] 10.0.80.191:24021 - "GET /playingmusic?did=566731712 HTTP/1.1" 200
|
||||
stdout: [08:58:08] [0.3.37] [INFO] 10.0.80.191:24020 - "GET /playingmusic?did=566731712 HTTP/1.1" 200
|
||||
stderr: [08:58:09] [0.3.37] [INFO] httpserver.py:177: docmd. did:566731712 cmd:播放列表m3u电台|80后音悦台
|
||||
stderr: [08:58:09] [0.3.37] [INFO] xiaomusic.py:582: cancel_all_tasks no task
|
||||
stdout: [08:58:09] [0.3.37] [INFO] 10.0.80.191:24020 - "POST /cmd HTTP/1.1" 200
|
||||
stderr: [08:58:09] [0.3.37] [INFO] xiaomusic.py:560: 收到消息:播放列表m3u电台|80后音悦台 控制面板:True did:566731712
|
||||
stderr: [08:58:09] [0.3.37] [INFO] xiaomusic.py:648: 匹配到指令. opkey:播放列表 opvalue:play_music_list oparg:m3u电台|80后音悦台
|
||||
stderr: [08:58:09] [0.3.37] [INFO] xiaomusic.py:716: 根据【m3u电台】找到播放列表【m3u电台】
|
||||
stderr: [08:58:09] [0.3.37] [INFO] xiaomusic.py:991: 没打乱 m3u电台 ['80后音悦台', 'BBC Radio 1', 'BBC Radio 2', 'BBC Radio 3', 'BBC Radio 4', 'CNA938', 'FM 988', ' AFO Radio', 'BBC News', 'BBC Radio 1 Dance', 'BBC Radio 1 Relax', 'BBC Radio 1Xtra', 'BBC Radio 4 Extra', 'BBC Radio 5 Live', 'BBC Radio 6 Music', 'BCC中广新闻', 'BCC中广流行', 'BCC中广音乐', 'CNA亚洲新闻', 'CNR中国之声', 'CNR乡村之声', 'CNR交通广播', 'CNR台海之声', 'CNR文艺之声', 'CNR湾区之声', 'CNR神州之声', 'CNR经典音乐', 'CNR经济之声', 'CNR老年之声', 'CNR阅读之声', 'CNR音乐之声', 'CRI世界华声', 'CRI华语环球', 'CRI南海之声', 'CRI环球资讯', 'CRI英语资讯', 'CRI轻松调频', 'Capital FM', 'CityFM台之音', 'Cool Radio', 'Gold FM', 'Hit FM劲曲', 'Kiss FM', 'LBC News', 'LBC UK', 'Love FM', 'Love Radio', 'Money FM', 'NPR News', 'News Radio UK', 'One FM', 'Power FM', 'RFA', 'RFI', 'RTI中央广播', 'Times Radio', 'VOA环球英语', 'Yes FM', '上海故事广播', '上海流行音乐', '上海音乐广播', '上海音乐电台', '中文流行', '全国广播', '北京交通广播', '北京体育广播', '北京城市广播', '北京文艺广播', '北京新闻广播', '北京经典调频', '北京音乐广播', '南京音乐广播', '台中广播电台', '四川文艺广播', '国乐悠扬', '天籁之音 Hi-Fi', '天籁古典', '天籁国风', '安全百科', '山西文艺广播', '广东音乐之声', '广州汽车音乐', '摇滚天空', '有声文摘', '民谣蓝调', '民谣音乐台', '江苏故事广播', '江苏文艺广播', '江苏音乐广播', '河北文艺广播', '河北汽车音乐', '深圳音乐广播', '湖南文艺广播', '湖南旅游广播', '湖南音乐之声', '潮流音悦台', '经典FM', '美国之音', '陕西故事广播', '陕西音乐广播']
|
||||
stderr: [08:58:09] [0.3.37] [INFO] xiaomusic.py:1422: 开始播放列表m3u电台
|
||||
stderr: [08:58:09] [0.3.37] [INFO] xiaomusic.py:1005: play. search_key: name:80后音悦台
|
||||
stderr: [08:58:09] [0.3.37] [INFO] xiaomusic.py:663: 根据【80后音悦台】找到歌曲【80后音悦台】
|
||||
stderr: [08:58:09] [0.3.37] [INFO] xiaomusic.py:1088: cur_music 80后音悦台
|
||||
stderr: [08:58:09] [0.3.37] [INFO] xiaomusic.py:388: get_music_url web music. name:80后音悦台, url:http://stream3.hndt.com/now/SFZeH2cb/playlist.m3u8
|
||||
stderr: [08:58:09] [0.3.37] [INFO] xiaomusic.py:360: get_music_sec_url. name:80后音悦台 url:http://stream3.hndt.com/now/SFZeH2cb/playlist.m3u8
|
||||
stderr: [08:58:09] [0.3.37] [INFO] xiaomusic.py:362: 电台不会有播放时长
|
||||
stderr: [08:58:09] [0.3.37] [INFO] xiaomusic.py:1437: group_force_stop_xiaoai ['be1daeaa-df03-4a27-8aff-404356abfa9a']
|
||||
stderr: [08:58:09] [0.3.37] [ERROR] xiaomusic.py:1137: Execption Error https://api2.mina.mi.com/remote/ubus: {'code': 101, 'message': 'ubus server or device returned invalid result', 'data': {'device_data': '{"msg":"Device is offline","code":608}', 'reqID': 'app_ios_10DxZOintrGWhyETo4q9auU3VMNH6A'}}
|
||||
stderr: Traceback (most recent call last):
|
||||
stderr: File "/app/xiaomusic/xiaomusic.py", line 1131, in force_stop_xiaoai
|
||||
stderr: ret = await self.xiaomusic.mina_service.player_pause(device_id)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 79, in player_pause
|
||||
stderr: return await self.ubus_request(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 59, in ubus_request
|
||||
stderr: result = await self.mina_request(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 49, in mina_request
|
||||
stderr: return await self.account.mi_request(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/miaccount.py", line 150, in mi_request
|
||||
stderr: raise Exception(f"Error {url}: {resp}")
|
||||
stderr: Exception: Error https://api2.mina.mi.com/remote/ubus: {'code': 101, 'message': 'ubus server or device returned invalid result', 'data': {'device_data': '{"msg":"Device is offline","code":608}', 'reqID': 'app_ios_10DxZOintrGWhyETo4q9auU3VMNH6A'}}
|
||||
stderr: [08:58:09] [0.3.37] [INFO] xiaomusic.py:1440: group_force_stop_xiaoai ['be1daeaa-df03-4a27-8aff-404356abfa9a'] [None]
|
||||
stderr: [08:58:09] [0.3.37] [INFO] xiaomusic.py:1091: 播放 http://stream3.hndt.com/now/SFZeH2cb/playlist.m3u8
|
||||
stderr: [08:58:10] [0.3.37] [ERROR] xiaomusic.py:1332: Execption Error https://api2.mina.mi.com/remote/ubus: {'code': 101, 'message': 'ubus server or device returned invalid result', 'data': {'device_data': '{"msg":"Device is offline","code":608}', 'reqID': 'app_ios_Bbkf4HLQiN7tjl1rGD2gpXuJ8yI0nP'}}
|
||||
stderr: Traceback (most recent call last):
|
||||
stderr: File "/app/xiaomusic/xiaomusic.py", line 1327, in play_one_url
|
||||
stderr: ret = await self.xiaomusic.mina_service.play_by_url(device_id, url)
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 125, in play_by_url
|
||||
stderr: return await self.ubus_request(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 59, in ubus_request
|
||||
stderr: result = await self.mina_request(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 49, in mina_request
|
||||
stderr: return await self.account.mi_request(
|
||||
stderr: File "/app/.venv/lib/python3.10/site-packages/miservice/miaccount.py", line 150, in mi_request
|
||||
stderr: raise Exception(f"Error {url}: {resp}")
|
||||
stderr: Exception: Error https://api2.mina.mi.com/remote/ubus: {'code': 101, 'message': 'ubus server or device returned invalid result', 'data': {'device_data': '{"msg":"Device is offline","code":608}', 'reqID': 'app_ios_Bbkf4HLQiN7tjl1rGD2gpXuJ8yI0nP'}}
|
||||
stderr: [08:58:10] [0.3.37] [INFO] xiaomusic.py:1305: group_player_play http://stream3.hndt.com/now/SFZeH2cb/playlist.m3u8 ['be1daeaa-df03-4a27-8aff-404356abfa9a'] [None]
|
||||
stderr: [08:58:10] [0.3.37] [INFO] xiaomusic.py:1094: 播放 80后音悦台 失败
|
||||
|
||||
---
|
||||
|
||||
### 评论 4 - hanxi
|
||||
|
||||
设备掉线了
|
||||
|
||||
---
|
||||
|
||||
### 评论 5 - 201692929
|
||||
|
||||
怎么获取 他正在播放什么?或者是播放进度 ?播放列表?我想给他加进去
|
||||

|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 6 - hanxi
|
||||
|
||||
> 怎么获取 他正在播放什么?或者是播放进度 ?播放列表?我想给他加进去 
|
||||
|
||||
这个接口 `/playingmusic`
|
||||
|
||||
---
|
||||
|
||||
### 评论 7 - 114514thD
|
||||
|
||||
加不加"type":"radio"都会一直播放不切换到下一首歌是为什么呢
|
||||
|
||||
---
|
||||
|
||||
### 评论 8 - hanxi
|
||||
|
||||
> 加不加"type":"radio"都会一直播放不切换到下一首歌是为什么呢
|
||||
|
||||
发出来看看?
|
||||
|
||||
---
|
||||
|
||||
### 评论 9 - 114514thD
|
||||
|
||||
> > 加不加"type":"radio"都会一直播放不切换到下一首歌是为什么呢
|
||||
>
|
||||
> 发出来看看?
|
||||
|
||||
~~本地开服务器,生成的m3u列表
|
||||
格式如下
|
||||
`#EXTINF:247,周传雄 - 临别一眼.mp3
|
||||
http://192.168.1.147:8000/%E5%91%A8%E4%BC%A0%E9%9B%84%20-%20%E4%B8%B4%E5%88%AB%E4%B8%80%E7%9C%BC.mp3`
|
||||
包含了时长信息
|
||||
版本是0.3.46
|
||||
potplayer里播放完全正常~~
|
||||
|
||||
仔细研究了一下,发现确实存在问题,不过是另一种情况,下面单说
|
||||
|
||||
---
|
||||
|
||||
### 评论 10 - 114514thD
|
||||
|
||||
> > 加不加"type":"radio"都会一直播放不切换到下一首歌是为什么呢
|
||||
>
|
||||
> 发出来看看?
|
||||
|
||||
经过实验发现,本地生成的m3u用potplayer播放正常
|
||||

|
||||
转换为json(去掉"type":"radio")后用小爱播放也正常
|
||||

|
||||
|
||||
但是alist链接就不正常,alist生成的m3u格式如下
|
||||
`#EXTM3U
|
||||
#EXTINF:-1,Let Me Hear.mp3
|
||||
http://192.168.1.198:5244/d/%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90%20%E9%9F%B3%E4%B9%90%E4%BA%91%E7%9B%98/Let%20Me%20Hear.mp3?sign=xxxx=:0`
|
||||
没有时长信息,但是用potplayer一播放就出现时长了
|
||||

|
||||
而用小爱播放就始终没有时长(切歌、等待都试过了)
|
||||

|
||||
大佬你的示例链接(gist.github.com/hanxi/dda82d964a28f8110f8fba81c3ff8314)里的又是正常的,感觉可能是alist的流比较特殊。。
|
||||

|
||||
|
||||
---
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/78)
|
74
docs/issues/88.md
Normal file
74
docs/issues/88.md
Normal file
@ -0,0 +1,74 @@
|
||||
---
|
||||
title: 如何添加m3u格式文件的电台
|
||||
---
|
||||
|
||||
# 如何添加m3u格式文件的电台
|
||||
|
||||
比如可以找到这样的 m3u 电台文件: https://github.com/YueChan/Live/blob/main/Radio.m3u
|
||||
|
||||
1. 复制文件内容,粘贴到 m3u 转换工具里,点击转换为 json 格式:
|
||||
|
||||

|
||||
|
||||
2. 然后复制 json 内容,粘贴到歌单内容里,点击保存,再返回首页:
|
||||
|
||||

|
||||
|
||||
3. 在首页点击刷新列表,选择所有电台,再点击播放列表歌曲:
|
||||
|
||||

|
||||
|
||||
4. 也可以用口令播放电台: `播放列表所有电台` ,或者口令: `播放歌曲北京城市广播`
|
||||
|
||||
## 评论
|
||||
|
||||
|
||||
### 评论 1 - guoxiangke
|
||||
|
||||
转换m3u链接: http://127.0.0.1:8090/static/m3u.html
|
||||
|
||||
---
|
||||
|
||||
### 评论 2 - guoxiangke
|
||||
|
||||
http://127.0.0.1:8090/playurl?did=mydid&url=https://a.com/test.m3u 如果能支持 这么播放m3u 就太完美了
|
||||
希望能够支持,谢谢作者。
|
||||
|
||||
---
|
||||
|
||||
### 评论 3 - hanxi
|
||||
|
||||
> http://127.0.0.1:8090/playurl?did=mydid&url=https://a.com/test.m3u 如果能支持 这么播放m3u 就太完美了 希望能够支持,谢谢作者。
|
||||
|
||||
不想破坏现有接口,可以考虑用插件的方式来实现。
|
||||
|
||||
---
|
||||
|
||||
### 评论 4 - lazybabyz
|
||||
|
||||
potplayer 测试 https://raw.githubusercontent.com/YueChan/Live/refs/heads/main/Radio.m3u 部分可以听
|
||||
xiaomusic测试 https://github.com/YueChan/Live/blob/main/Radio.m3u 复制raw文件转换 全部失败不停转台
|
||||
|
||||
以下potplayer测试 可以听,xiaomusic测试 复制raw文件转换 全部失败不停转台
|
||||
|
||||
https://raw.githubusercontent.com/kaige-cai/live/refs/heads/main/radio.m3u
|
||||
https://raw.githubusercontent.com/imDazui/Tvlist-awesome-m3u-m3u8/master/m3u/%E5%B9%BF%E6%92%AD%E7%94%B5%E5%8F%B02021.m3u
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 5 - hanxi
|
||||
|
||||
检查一下是不是 ipv6 的地址?小米音箱不支持 ipv6
|
||||
|
||||
---
|
||||
|
||||
### 评论 6 - lazybabyz
|
||||
|
||||
> 检查一下是不是 ipv6 的地址?小米音箱不支持 ipv6
|
||||
|
||||
是我硬件设置的问题 重新安装了 解决!
|
||||
|
||||
---
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/88)
|
101
docs/issues/94.md
Normal file
101
docs/issues/94.md
Normal file
@ -0,0 +1,101 @@
|
||||
---
|
||||
title: 采用config.json配置方式
|
||||
---
|
||||
|
||||
# 采用config.json配置方式
|
||||
|
||||
docker 方式部署默认推荐使用环境变量的方式来配置参数,如果是自己用命令行启动,目前支持的参数配置比较少,但是是支持 `--config` 参数。
|
||||
|
||||
使用 pip 安装 xiaomusic 【0.1.83版本才支持 pip 安装】
|
||||
|
||||
```shell
|
||||
pip install xiaomusic
|
||||
```
|
||||
|
||||
依赖的 ffmpeg 需要自己安装。
|
||||
|
||||

|
||||
|
||||
仓库中有个 config-example.json 文件,可以把这个文件拷贝为 config.json 然后修改 config.json 里的配置,再用下面的命令启动。
|
||||
|
||||
```shell
|
||||
xiaomusic --config ./config.json
|
||||
```
|
||||
|
||||
默认的 config.json 模板如下:
|
||||
|
||||
```json
|
||||
{
|
||||
"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
|
||||
}
|
||||
```
|
||||
|
||||
如果采用 docker compose 启动想用 config.json 的配置方式,可以这样配:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
xiaomusic:
|
||||
image: hanxi/xiaomusic
|
||||
container_name: xiaomusic
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 8090:8090
|
||||
volumes:
|
||||
- ./music:/app/music
|
||||
- ./config.json:/app/config.json
|
||||
command: ['--config', '/app/config.json']
|
||||
```
|
||||
主要就是把 config.json 文件映射进容器和传 `--config` 参数。
|
||||
|
||||
## 评论
|
||||
|
||||
|
||||
### 评论 1 - alitime
|
||||
|
||||
正需要,有配置文件方便多了
|
||||
|
||||
---
|
||||
|
||||
### 评论 2 - hanxi
|
||||
|
||||
ffmpeg 如果是用 apt install 这类系统工具安装的,默认会在 /usr/bin 目录下,ffmpeg_location 这个参数就需要设置为 /usr/bin .
|
||||
|
||||
目前 armv7 cpu 的 docker 镜像里的 ffmpeg 有问题,最好是用 pip 方式安装运行。
|
||||
|
||||
---
|
||||
|
||||
### 评论 3 - hanxi
|
||||
|
||||
> ffmpeg 如果是用 apt install 这类系统工具安装的,默认会在 /usr/bin 目录下,ffmpeg_location 这个参数就需要设置为 /usr/bin .
|
||||
>
|
||||
> 目前 armv7 cpu 的 docker 镜像里的 ffmpeg 有问题,最好是用 pip 方式安装运行。
|
||||
|
||||
armv7 问题已经解决。
|
||||
|
||||
---
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/94)
|
17
docs/issues/96.md
Normal file
17
docs/issues/96.md
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
title: ios系统上的捷径配置
|
||||
---
|
||||
|
||||
# ios系统上的捷径配置
|
||||
|
||||
下面是播放音乐和关机两个示例。只要在 web 页面上能看到的功能,都有对应的 http 请求接口,都可以用来配置捷径。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
## 评论
|
||||
|
||||
没有评论。
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/96)
|
969
docs/issues/99.md
Normal file
969
docs/issues/99.md
Normal file
@ -0,0 +1,969 @@
|
||||
---
|
||||
title: 💬 FAQ问题集合
|
||||
---
|
||||
|
||||
# 💬 FAQ问题集合
|
||||
|
||||
> [!NOTE]
|
||||
> 这个 issue 用来总结报错日志和对应的解决方法。
|
||||
|
||||
## ❓ XIAOMUSIC_HOSTNAME 怎么填
|
||||
|
||||
填写 docker 主机的 ip ,**不是小爱音箱的ip**,一般就是网页访问的后台地址里的 ip ,只要确保 ip 和小爱音箱在一个局域网内就行。
|
||||
|
||||
同时也支持 xx.xx.com 的域名格式,用于配置反代供外网访问,比如小爱音箱和 docker 主机不在同一个局域网内。
|
||||
|
||||
|
||||
## ❓ Login Failed 登陆失败
|
||||
|
||||
表现就是 **后台看不到设备列表** ,日志中会有对应的报错。
|
||||
|
||||
这个有专门的讨论,见 </issues/16.html> ,一般是因为开了加速代理,关代理再尝试即可。也可以试试在局域网设备里的米家app上退出再重新登录一下。
|
||||
|
||||
在小米官网 www.mi.com 登陆过人脸或滑块验证基本上能解决 99%的 login failed 问题。
|
||||
|
||||
来自 @yilikun 的友情提示:
|
||||
> 1. 关闭本地代理。
|
||||
> 2. 如果是nas运行的,网络由bridge改为host。
|
||||
> 3. 米家app重新登陆。
|
||||
> 4. mi.com官网重新登陆。
|
||||
|
||||
## ❓ 网页后台可以播放,语音控制无效
|
||||
|
||||
这种情况是拉取不到对话记录导致的。
|
||||
如果是首次在网页后台保存 did 后需要重启一次容器。
|
||||
其他情况可能是被限制拉取对话记录次数,也可以尝试重启容器。
|
||||
还有一种情况是配错了唤醒口令,可以在小爱音箱app里查看对话记录,也可以查看 xiaomusic 的日志。默认口令前缀是【播放歌曲】,没有这个前缀是无法识别的,说播放音乐是没用的,除非自己设置其他口令词。
|
||||
已知 `M01/XMYX01JY 小米小爱音箱HD` 获取对话记录的接口比较特殊,需要开启【特殊型号获取对话记录:】开关才能正常语音控制。
|
||||
|
||||
## ❓ 日志显示正在播放,却没有声音
|
||||
|
||||
可以点击播放链接按钮,看看默认的那个链接能否播放。
|
||||
|
||||
已知部分触屏版不能播放可以在后台设置 【型号兼容模式】为 true 试试。
|
||||
|
||||
其他情况可能是 XIAOMUSIC_HOSTNAME 配错了地址,不是 docker 主机地址会导致小爱音箱无法访问到,而且需要和小爱音箱在同一个**局域网**下的地址。还有可能是端口配错了,**修改了默认 8090 端口映射**,需要同步修改其他参数,可以翻阅端口修改的文档。
|
||||
|
||||
如果端口不是8090,首次启动没配好端口的话,需要手动修改setting.json文件里的端口,或者把setting.json文件删除重新配置,或者在后台修改监听端口后重启。
|
||||
|
||||
可以点击播放歌曲后,查看日志里的歌曲链接,放到浏览器里打开试试,不能访问说明是端口或者hostname问题,如果是异地访问,需要把 hostname 修改为外网ip或者域名,需要注意音箱只支持访问ipv4,不能是ipv6的公网。
|
||||
|
||||
如果是配了公网反代端口,注意区分是 http 还是 https ,如果是 https 的,配置 XIAOMUSIC_HOSTNAME 时需要加上 `https:// ` 前缀。
|
||||
|
||||
## ❓ 无法播放 flac 格式歌曲
|
||||
|
||||
因设备差异和文件格式差异,已知部分设备不支持 flac 格式,比如 L05B L05C 。
|
||||
|
||||
## ❓ docker 镜像拉取失败
|
||||
|
||||
请更换镜像源或者使用代理。不同环境更换镜像源的方式不一样,可以网上搜索自己的 NAS 如何更换镜像源。
|
||||
|
||||
已经可以通过 [DaoCloud](https://github.com/DaoCloud/public-image-mirror) 拉取镜像。
|
||||
|
||||
```
|
||||
docker pull m.daocloud.io/docker.io/hanxi/xiaomusic:latest
|
||||
docker tag m.daocloud.io/docker.io/hanxi/xiaomusic:latest hanxi/xiaomusic:latest
|
||||
```
|
||||
|
||||
## ❓ 启动失败,日志中出现 RuntimeError: can't start new thread
|
||||
|
||||
一般是 docker 版本太低,或者系统限制了 docker 使用的 cpu 数量,可以尝试升级 docker 到最新版本。
|
||||
|
||||
## ❓ DNS 解析错误
|
||||
|
||||
一般会出现下面这样的日志,表现就是设置页面看不到设备列表。
|
||||
|
||||
```
|
||||
aiohttp.client_ _exceptions. ClientConnectorError: Cannot connect to host account.xiaomi.com:443 ssl:False [Temporary failure in name resolution]
|
||||
```
|
||||
|
||||
可以尝试把主机的 DNS 设为 223.5.5.5 之后重启 docker 主机。
|
||||
|
||||
如果还是不行可以把 docker 的网络模式改成 host 模式。
|
||||
|
||||
|
||||
## ❓ 点击播放后需要很久才开始播放的问题
|
||||
|
||||
这个问题新版本已经解决,如果还存在请反馈。
|
||||
|
||||
~目前0.3.x版本还存在这个问题没有完全解决,可以暂时回退到0.2.0版本继续使用。~
|
||||
|
||||
## ❓ 如何配置多个歌曲目录
|
||||
|
||||
```yaml
|
||||
services:
|
||||
xiaomusic:
|
||||
image: hanxi/xiaomusic
|
||||
container_name: xiaomusic
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 8090:8090
|
||||
volumes:
|
||||
- /data/music1:/app/music/music1
|
||||
- /data/music2:/app/music/music2
|
||||
- /data/xiaomusic/conf:/app/conf
|
||||
```
|
||||
|
||||
冒号左边的 `/data/music1` 和 `/data/music2` 改成你的目录即可。如果你是 windows 的 docker ,可以改成 `D:/music1` 和 `D:/music2`,盘符号开头,用 `/` 分割。
|
||||
|
||||
如果是 docker 部署的,建议不要去修改 web 后台里的音乐路径和配置路径等等所有路径除非你熟悉 docker 的目录映射机制。
|
||||
|
||||
## ❓ 能不能中文名
|
||||
|
||||
```yaml
|
||||
services:
|
||||
xiaomusic:
|
||||
image: hanxi/xiaomusic
|
||||
container_name: xiaomusic
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 8090:8090
|
||||
volumes:
|
||||
- /data/music1:/app/music/歌曲目录1
|
||||
- /data/music2:/app/music/歌曲目录2
|
||||
- /data/xiaomusic/conf:/app/conf
|
||||
```
|
||||
|
||||
## ❓ 能不能多层目录
|
||||
|
||||
可以,每层的每个目录会识别为一个播放列表。
|
||||
|
||||
## ❓ 是否需要手动获取 did
|
||||
|
||||
新版本不需要手动获取配置 did,不需要配置环境变量,直接在 web 后台填入小米账号密码保存后会自动获取到 did ,然后勾选对应的设备即可。
|
||||
|
||||
## ❓ 报错 601
|
||||
|
||||
报错日志大致如下:
|
||||
|
||||
```txt
|
||||
Exception: Error https://api2.mina.mi.com/remote/ubus: {"code":601,"message":"illegal argument exception","data":"IllegalArgumentException: ubus call format illegal!"}
|
||||
```
|
||||
|
||||
原因是没有配置 did ,或者 did 配置错误。可以到设置页面选择正确的设备类型和 did 然后保存。
|
||||
|
||||
## ❓ 新功能没有生效
|
||||
|
||||
在设置页面重新保存一下,或者删除 setting.json 文件,重新在后台设置一次。
|
||||
|
||||
## ❓ 为什么会先说小爱音箱自带的回答,再说下载中或者过一会儿才播放本地歌曲
|
||||
|
||||
设计原理就是每秒不停的抓取对话记录,然后再打断小爱音箱自带的处理流程。整个过程下来会有延时,所以打断不会很及时,做不到无缝衔接。
|
||||
|
||||
## 评论
|
||||
|
||||
|
||||
### 评论 1 - shissx
|
||||
|
||||
安装的最新版本,即使没有使用,日志一直在不停的刷新,示例:
|
||||
[10:20:36] [0.1.101] [DEBUG] Polling_event, timestamp: {'eeb70da5-baa9-4b56-b2f3-7ee01276a18a': 1720430457236}
|
||||
[10:20:36] [0.1.101] [DEBUG] Sleep 0.0003166699898429215, timestamp: {'eeb70da5-baa9-4b56-b2f3-7ee01276a18a': 1720430457236}
|
||||
[10:20:37] [0.1.101] [DEBUG] Listening new message, timestamp: {'eeb70da5-baa9-4b56-b2f3-7ee01276a18a
|
||||
|
||||
之前的版本没有这个问题,这个是设置错误?还是本来就如此呢?
|
||||
|
||||
---
|
||||
|
||||
### 评论 2 - hanxi
|
||||
|
||||
> 安装的最新版本,即使没有使用,日志一直在不停的刷新,示例: [10:20:36] [0.1.101] [DEBUG] Polling_event, timestamp: {'eeb70da5-baa9-4b56-b2f3-7ee01276a18a': 1720430457236} [10:20:36] [0.1.101] [DEBUG] Sleep 0.0003166699898429215, timestamp: {'eeb70da5-baa9-4b56-b2f3-7ee01276a18a': 1720430457236} [10:20:37] [0.1.101] [DEBUG] Listening new message, timestamp: {'eeb70da5-baa9-4b56-b2f3-7ee01276a18a
|
||||
>
|
||||
> 之前的版本没有这个问题,这个是设置错误?还是本来就如此呢?
|
||||
|
||||
正常现象,现在默认把调试日志打开了,可以在后台设置关闭调试日志的。
|
||||
|
||||
---
|
||||
|
||||
### 评论 3 - Dx0123
|
||||
|
||||
大佬,docker安装提示缺少很多module,我一个个在dockerfilie里加上,最后卡在miservice装不上了~
|
||||
|
||||
---
|
||||
|
||||
### 评论 4 - hanxi
|
||||
|
||||
@Dx0123 其实不用手动安装依赖的,直接一行应该就行。
|
||||
```
|
||||
RUN pip install -U xiaomusic
|
||||
```
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 5 - Dx0123
|
||||
|
||||
> @Dx0123 其实不用手动安装依赖的,直接一行应该就行。
|
||||
>
|
||||
> ```
|
||||
> RUN pip install -U xiaomusic
|
||||
> ```
|
||||
|
||||
我直接用pip安装好之后,执行仍然有缺少的依赖,和docker里缺的一样。截图的module安装了之后还会有其他依赖缺失
|
||||

|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 6 - hanxi
|
||||
|
||||
@Dx0123 你的python版本是不是有问题?你参考下项目里的Dockerfile,用同一个From镜像试试。
|
||||
|
||||
---
|
||||
|
||||
### 评论 7 - hanxi
|
||||
|
||||
> 有时候指令已停止,可是一会儿,又自动播放下一首,根本就停不下来。需要重启容器才能正常
|
||||
|
||||
点关机按钮也不行吗?
|
||||
|
||||
---
|
||||
|
||||
### 评论 8 - hanxi
|
||||
|
||||
> > > 有时候指令已停止,可是一会儿,又自动播放下一首,根本就停不下来。需要重启容器才能正常
|
||||
> >
|
||||
> >
|
||||
> > 点关机按钮也不行吗?
|
||||
>
|
||||
> 是的,说关机,点关机,暂停都不行。只能重启容器。
|
||||
|
||||
有没有日志看看?
|
||||
|
||||
---
|
||||
|
||||
### 评论 9 - sqmcool
|
||||
|
||||
为什么我的没有显示设备?
|
||||

|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 10 - hanxi
|
||||
|
||||
> 为什么我的没有显示设备? 
|
||||
|
||||
应该是登陆失败,可以查看一下日志。
|
||||
|
||||
---
|
||||
|
||||
### 评论 11 - schppd
|
||||
|
||||
楼主您好,请问这个我需要怎么处理?
|
||||

|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 12 - hanxi
|
||||
|
||||
> 楼主您好,请问这个我需要怎么处理? 
|
||||
|
||||
删掉重新配置一下试试。
|
||||
|
||||
---
|
||||
|
||||
### 评论 13 - schppd
|
||||
|
||||
会不会跟网络不稳定有关系?我都弄了几次还是这样子
|
||||
|
||||
|
||||
|
||||
|
||||
------------------ 原始邮件 ------------------
|
||||
发件人: "hanxi/xiaomusic" ***@***.***>;
|
||||
发送时间: 2024年9月15日(星期天) 晚上10:57
|
||||
***@***.***>;
|
||||
***@***.******@***.***>;
|
||||
主题: Re: [hanxi/xiaomusic] FAQ问题集合 (Issue #99)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
楼主您好,请问这个我需要怎么处理?
|
||||
|
||||
删掉重新配置一下试试。
|
||||
|
||||
—
|
||||
Reply to this email directly, view it on GitHub, or unsubscribe.
|
||||
You are receiving this because you commented.Message ID: ***@***.***>
|
||||
|
||||
---
|
||||
|
||||
### 评论 14 - hanxi
|
||||
|
||||
> 会不会跟网络不稳定有关系?我都弄了几次还是这样子
|
||||
> […](#)
|
||||
> ------------------ 原始邮件 ------------------ 发件人: "hanxi/xiaomusic" ***@***.***>; 发送时间: 2024年9月15日(星期天) 晚上10:57 ***@***.***>; ***@***.******@***.***>; 主题: Re: [hanxi/xiaomusic] FAQ问题集合 (Issue #99) 楼主您好,请问这个我需要怎么处理? 删掉重新配置一下试试。 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: ***@***.***>
|
||||
|
||||
有可能的,用代理试试。
|
||||
|
||||
---
|
||||
|
||||
### 评论 15 - guoxiangke
|
||||
|
||||
定制的时候,"全部"和”所有歌曲"的区别,帮助有需要的朋友:
|
||||
歌单中 "全部" 指的是 所有歌单中歌曲,但不包括“歌单内容”配置(http://127.0.0.1:8090/static/setting.html)中的电台 "type": "radio",的
|
||||
”所有歌曲" 指的是下载的歌曲,在download文件夹里
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 16 - agigogo
|
||||
|
||||

|
||||
在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 17 - hanxi
|
||||
|
||||
>  在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
|
||||
|
||||
设置页面输入小米的账号密码后,再勾选一个设备。
|
||||
|
||||
---
|
||||
|
||||
### 评论 18 - agigogo
|
||||
|
||||
> >  在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
|
||||
>
|
||||
> 设置页面输入小米的账号密码后,再勾选一个设备。
|
||||
|
||||
设置页面里没有勾选的选项
|
||||
|
||||
> >  在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
|
||||
>
|
||||
> 设置页面输入小米的账号密码后,再勾选一个设备。
|
||||
|
||||

|
||||
设置页面没有可勾选项?
|
||||
|
||||
---
|
||||
|
||||
### 评论 19 - agigogo
|
||||
|
||||
> > >  在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
|
||||
> >
|
||||
> >
|
||||
> > 设置页面输入小米的账号密码后,再勾选一个设备。
|
||||
>
|
||||
> 设置页面里没有勾选的选项
|
||||
>
|
||||
> > >  在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
|
||||
> >
|
||||
> >
|
||||
> > 设置页面输入小米的账号密码后,再勾选一个设备。
|
||||
>
|
||||
>  设置页面没有可勾选项?
|
||||
|
||||

|
||||
|
||||
显示未检测到设备,设备型号是MDZ-25-DA
|
||||
|
||||
---
|
||||
|
||||
### 评论 20 - hanxi
|
||||
|
||||
@agigogo 应该是登陆失败了,局域网的手机重新登陆一下小爱音箱app吧。
|
||||
|
||||
---
|
||||
|
||||
### 评论 21 - agigogo
|
||||
|
||||
> @agigogo 应该是登陆失败了,局域网的手机重新登陆一下小爱音箱app吧。
|
||||
|
||||
一直都是用米家APP来控制小爱音箱,那要下个小爱音响APP试一试
|
||||
|
||||
---
|
||||
|
||||
### 评论 22 - agigogo
|
||||
|
||||
> @agigogo 应该是登陆失败了,局域网的手机重新登陆一下小爱音箱app吧。
|
||||
|
||||
搞定了,小爱音箱app重新绑定就可以了。真6~
|
||||
|
||||
---
|
||||
|
||||
### 评论 23 - Tueafternoon
|
||||
|
||||
一首歌结束不能自动切到下一首,随机播放模式,日志中显示下一曲定时器不见了....这个是咋回事啊
|
||||
|
||||
---
|
||||
|
||||
### 评论 24 - hanxi
|
||||
|
||||
> 一首歌结束不能自动切到下一首,随机播放模式,日志中显示下一曲定时器不见了....这个是咋回事啊
|
||||
|
||||
可能是音乐文件有问题,获取歌曲长度失败,你可以把歌曲文件上传一下给我测试。
|
||||
|
||||
---
|
||||
|
||||
### 评论 25 - hanxi
|
||||
|
||||
或者搜下日志里有没有 不会设置下一首歌的定时器 这个
|
||||
|
||||
---
|
||||
|
||||
### 评论 26 - Tueafternoon
|
||||
|
||||
> 或者搜下日志里有没有 不会设置下一首歌的定时器 这个
|
||||
|
||||
有这个,应该是我的文件格式问题,晚上我处理一下再试试
|
||||
|
||||
---
|
||||
|
||||
### 评论 27 - zealler9560
|
||||
|
||||

|
||||
|
||||
istore系统可以拉取创建镜像,但是无法启动,错误提示见图一,求助大佬!路由器信息见图二
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 评论 28 - adidas004
|
||||
|
||||
在群晖使用docker安装的,只能通过重装来升级到最新版本吗?有快捷的一键升级吗
|
||||
|
||||
---
|
||||
|
||||
### 评论 29 - hanxi
|
||||
|
||||
> 在群晖使用docker安装的,只能通过重装来升级到最新版本吗?有快捷的一键升级吗
|
||||
|
||||
不会命令行,就用这个工具吧。 https://github.com/onlyLTY/dockerCopilot
|
||||
|
||||
---
|
||||
|
||||
### 评论 30 - adidas004
|
||||
|
||||
谢谢您的工具,我刚去群晖的docker上有提示直接升级,还是非常的感觉你的回答
|
||||
|
||||
|
||||
|
||||
|
||||
------------------ 原始邮件 ------------------
|
||||
发件人: ***@***.***>;
|
||||
发送时间: 2024年11月11日(星期一) 下午4:20
|
||||
收件人: ***@***.***>;
|
||||
抄送: ***@***.***>; ***@***.***>;
|
||||
主题: Re: [hanxi/xiaomusic] 💬 FAQ问题集合 (Issue #99)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
在群晖使用docker安装的,只能通过重装来升级到最新版本吗?有快捷的一键升级吗
|
||||
|
||||
不会命令行,就用这个工具吧。 https://github.com/onlyLTY/dockerCopilot
|
||||
|
||||
—
|
||||
Reply to this email directly, view it on GitHub, or unsubscribe.
|
||||
You are receiving this because you commented.Message ID: ***@***.***>
|
||||
|
||||
---
|
||||
|
||||
### 评论 31 - sinojelly
|
||||
|
||||
运行时遇到下面问题,请问要怎么排查?
|
||||
```
|
||||
2024/11/21 19:27:00 xiaomusic.py: error: unrecognized arguments: .venv/bin/python3 xiaomusic.py
|
||||
2024/11/21 19:27:00 [--enable_config_example]
|
||||
2024/11/21 19:27:00 [--ffmpeg_location FFMPEG_LOCATION]
|
||||
2024/11/21 19:27:00 [--config CONFIG]
|
||||
2024/11/21 19:27:00 [--verbose]
|
||||
2024/11/21 19:27:00 [--cookie COOKIE]
|
||||
2024/11/21 19:27:00 [--password PASSWORD]
|
||||
2024/11/21 19:27:00 [--account ACCOUNT]
|
||||
2024/11/21 19:27:00 [--hardware HARDWARE]
|
||||
2024/11/21 19:27:00 [--port PORT]
|
||||
2024/11/21 19:27:00 [-h]
|
||||
2024/11/21 19:27:00 usage: xiaomusic.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 评论 32 - hanxi
|
||||
|
||||
> 运行时遇到下面问题,请问要怎么排查?
|
||||
>
|
||||
> ```
|
||||
> 2024/11/21 19:27:00 xiaomusic.py: error: unrecognized arguments: .venv/bin/python3 xiaomusic.py
|
||||
> 2024/11/21 19:27:00 [--enable_config_example]
|
||||
> 2024/11/21 19:27:00 [--ffmpeg_location FFMPEG_LOCATION]
|
||||
> 2024/11/21 19:27:00 [--config CONFIG]
|
||||
> 2024/11/21 19:27:00 [--verbose]
|
||||
> 2024/11/21 19:27:00 [--cookie COOKIE]
|
||||
> 2024/11/21 19:27:00 [--password PASSWORD]
|
||||
> 2024/11/21 19:27:00 [--account ACCOUNT]
|
||||
> 2024/11/21 19:27:00 [--hardware HARDWARE]
|
||||
> 2024/11/21 19:27:00 [--port PORT]
|
||||
> 2024/11/21 19:27:00 [-h]
|
||||
> 2024/11/21 19:27:00 usage: xiaomusic.py
|
||||
> ```
|
||||
|
||||
看不出来
|
||||
|
||||
---
|
||||
|
||||
### 评论 33 - sinojelly
|
||||
|
||||
请问登录验证失败要怎么定位?小米登录邮箱,还是小米id 都报同样的错。
|
||||
```
|
||||
2024/11/25 0:50:44 [2024-11-25 00:50:44] [0.3.48] [ERROR] xiaomusic.py:259: /root/.mi.token file not exist
|
||||
2024/11/25 0:50:44 Exception: Error https://api2.mina.mi.com/admin/v2/device_list?master=0&requestId=app_ios_: Login failed
|
||||
2024/11/25 0:50:44 raise Exception(f"Error {url}: {resp}")
|
||||
2024/11/25 0:50:44 File "/app/.venv/lib/python3.10/site-packages/miservice/miaccount.py", line 150, in mi_request
|
||||
2024/11/25 0:50:44 return await self.account.mi_request(
|
||||
2024/11/25 0:50:44 File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 49, in mina_request
|
||||
2024/11/25 0:50:44 result = await self.mina_request("/admin/v2/device_list?master=" + str(master))
|
||||
2024/11/25 0:50:44 File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 54, in device_list
|
||||
2024/11/25 0:50:44 hardware_data = await self.mina_service.device_list()
|
||||
2024/11/25 0:50:44 File "/app/xiaomusic/xiaomusic.py", line 232, in try_update_device_id
|
||||
2024/11/25 0:50:44 Traceback (most recent call last):
|
||||
2024/11/25 0:50:44 [2024-11-25 00:50:44] [0.3.48] [ERROR] xiaomusic.py:251: Execption Error https://api2.mina.mi.com/admin/v2/device_list?master=0&requestId=app_ios_xx: Login failed
|
||||
2024/11/25 0:50:44 Exception: {'qs': '%3Fsid%3Dmicoapi%26_json%3Dtrue', 'code': 70016, 'description': '登录验证失败', 'securityStatus': 0, '_sign': 'xxx', 'sid': 'micoapi', 'result': 'error', 'captchaUrl': None, 'callback': 'https://api2.mina.mi.com/sts', 'location': '', 'pwd': 0, 'child': 0, 'desc': '登录验证失败'}
|
||||
2024/11/25 0:50:44 raise Exception(resp)
|
||||
2024/11/25 0:50:44 File "/app/.venv/lib/python3.10/site-packages/miservice/miaccount.py", line 69, in login
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 评论 34 - hanxi
|
||||
|
||||
> 请问登录验证失败要怎么定位?小米登录邮箱,还是小米id 都报同样的错。
|
||||
>
|
||||
> ```
|
||||
> 2024/11/25 0:50:44 [2024-11-25 00:50:44] [0.3.48] [ERROR] xiaomusic.py:259: /root/.mi.token file not exist
|
||||
> 2024/11/25 0:50:44 Exception: Error https://api2.mina.mi.com/admin/v2/device_list?master=0&requestId=app_ios_: Login failed
|
||||
> 2024/11/25 0:50:44 raise Exception(f"Error {url}: {resp}")
|
||||
> 2024/11/25 0:50:44 File "/app/.venv/lib/python3.10/site-packages/miservice/miaccount.py", line 150, in mi_request
|
||||
> 2024/11/25 0:50:44 return await self.account.mi_request(
|
||||
> 2024/11/25 0:50:44 File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 49, in mina_request
|
||||
> 2024/11/25 0:50:44 result = await self.mina_request("/admin/v2/device_list?master=" + str(master))
|
||||
> 2024/11/25 0:50:44 File "/app/.venv/lib/python3.10/site-packages/miservice/minaservice.py", line 54, in device_list
|
||||
> 2024/11/25 0:50:44 hardware_data = await self.mina_service.device_list()
|
||||
> 2024/11/25 0:50:44 File "/app/xiaomusic/xiaomusic.py", line 232, in try_update_device_id
|
||||
> 2024/11/25 0:50:44 Traceback (most recent call last):
|
||||
> 2024/11/25 0:50:44 [2024-11-25 00:50:44] [0.3.48] [ERROR] xiaomusic.py:251: Execption Error https://api2.mina.mi.com/admin/v2/device_list?master=0&requestId=app_ios_xx: Login failed
|
||||
> 2024/11/25 0:50:44 Exception: {'qs': '%3Fsid%3Dmicoapi%26_json%3Dtrue', 'code': 70016, 'description': '登录验证失败', 'securityStatus': 0, '_sign': 'xxx', 'sid': 'micoapi', 'result': 'error', 'captchaUrl': None, 'callback': 'https://api2.mina.mi.com/sts', 'location': '', 'pwd': 0, 'child': 0, 'desc': '登录验证失败'}
|
||||
> 2024/11/25 0:50:44 raise Exception(resp)
|
||||
> 2024/11/25 0:50:44 File "/app/.venv/lib/python3.10/site-packages/miservice/miaccount.py", line 69, in login
|
||||
> ```
|
||||
|
||||
上面给出了4个办法都试过了吗?局域网登陆mi.com了?
|
||||
|
||||
---
|
||||
|
||||
### 评论 35 - wusemao
|
||||
|
||||
设置web访问登录时,账号密码设置完之后登不进去了,账号名称用的中文的可以么
|
||||
|
||||
---
|
||||
|
||||
### 评论 36 - hanxi
|
||||
|
||||
> 设置web访问登录时,账号密码设置完之后登不进去了,账号名称用的中文的可以么
|
||||
|
||||
不确定是否可以,你可以考虑setting.json里的内容,不行就修改再重启。
|
||||
|
||||
---
|
||||
|
||||
### 评论 37 - quanmao
|
||||
|
||||
运行后会在音乐目录下生成一个tmp文件夹,如何指定路径,因为还有其应用访问音乐路径,不希望其识别tmp目录下的音乐。
|
||||
|
||||
---
|
||||
|
||||
### 评论 38 - hanxi
|
||||
|
||||
> 运行后会在音乐目录下生成一个tmp文件夹,如何指定路径,因为还有其应用访问音乐路径,不希望其识别tmp目录下的音乐。
|
||||
|
||||
忽略目录(逗号分割) 改成 `@eaDir,tmp` 即可。
|
||||
|
||||
---
|
||||
|
||||
### 评论 39 - quanmao
|
||||
|
||||
> > 运行后会在音乐目录下生成一个tmp文件夹,如何指定路径,因为还有其应用访问音乐路径,不希望其识别tmp目录下的音乐。
|
||||
>
|
||||
> 忽略目录(逗号分割) 改成 `@eaDir,tmp` 即可。
|
||||
|
||||
抱歉,是我没有说清楚,是运行xiaomusic后会在音乐路径下生成tmp文件夹, 但我同时还在用navidrome,也会访问音乐目录,他会把tmp目录下的歌曲也扫描进去,所以想移动tmp目录。 navidrome没找到在哪里可以设置,忽略这个文件夹
|
||||
|
||||
---
|
||||
|
||||
### 评论 40 - hanxi
|
||||
|
||||
> > > 运行后会在音乐目录下生成一个tmp文件夹,如何指定路径,因为还有其应用访问音乐路径,不希望其识别tmp目录下的音乐。
|
||||
> >
|
||||
> >
|
||||
> > 忽略目录(逗号分割) 改成 `@eaDir,tmp` 即可。
|
||||
>
|
||||
> 抱歉,是我没有说清楚,是运行xiaomusic后会在音乐路径下生成tmp文件夹, 但我同时还在用navidrome,也会访问音乐目录,他会把tmp目录下的歌曲也扫描进去,所以想移动tmp目录。 navidrome没找到在哪里可以设置,忽略这个文件夹
|
||||
|
||||
提个新 issue 吧,有空加下配置项。
|
||||
|
||||
---
|
||||
|
||||
### 评论 41 - CallEdison
|
||||
|
||||

|
||||

|
||||
问题一:能进控制面板,进不了设置页面,容器没有log生成,我昨天已经设置好了,现在功能能正常使用,但是进不了设置页面了问题二:昨天能进的时候发现本地下载目录有歌曲,但是设置里面的全部歌曲里面没有,搜索框搜索又能搜的到。
|
||||
|
||||
---
|
||||
|
||||
### 评论 42 - hanxi
|
||||
|
||||
>   问题一:能进控制面板,进不了设置页面,容器没有log生成,我昨天已经设置好了,现在功能能正常使用,但是进不了设置页面了问题二:昨天能进的时候发现本地下载目录有歌曲,但是设置里面的全部歌曲里面没有,搜索框搜索又能搜的到。
|
||||
|
||||
问题一:打不开的地址是哪个?
|
||||
问题二:可以点击刷新列表按钮试试。
|
||||
|
||||
---
|
||||
|
||||
### 评论 43 - huahua-er
|
||||
|
||||
是关闭了网络搜索了吗?现在的搜索只有本地数据没有网络歌曲了?
|
||||
|
||||
---
|
||||
|
||||
### 评论 44 - CallEdison
|
||||
|
||||
默认主题有歌曲
|
||||
|
||||
|
||||
pure主题没有歌曲
|
||||
|
||||
xmusicPlayer也没有歌曲
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Edison
|
||||
***@***.***
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
------------------ 原始邮件 ------------------
|
||||
发件人: ***@***.***>;
|
||||
发送时间: 2024年11月30日(星期六) 上午6:26
|
||||
收件人: ***@***.***>;
|
||||
抄送: ***@***.***>; ***@***.***>;
|
||||
主题: Re: [hanxi/xiaomusic] 💬 FAQ问题集合 (Issue #99)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
是关闭了网络搜索了吗?现在的搜索只有本地数据没有网络歌曲了?
|
||||
|
||||
—
|
||||
Reply to this email directly, view it on GitHub, or unsubscribe.
|
||||
You are receiving this because you commented.Message ID: ***@***.***>
|
||||
|
||||
---
|
||||
|
||||
### 评论 45 - hanxi
|
||||
|
||||
> 是关闭了网络搜索了吗?现在的搜索只有本地数据没有网络歌曲了?
|
||||
|
||||
等 yt-dlp 修复。
|
||||
|
||||
---
|
||||
|
||||
### 评论 46 - hanxi
|
||||
|
||||
> 默认主题有歌曲 pure主题没有歌曲 xmusicPlayer也没有歌曲 Edison ***@***.***
|
||||
> […](#)
|
||||
> ------------------ 原始邮件 ------------------ 发件人: ***@***.***>; 发送时间: 2024年11月30日(星期六) 上午6:26 收件人: ***@***.***>; 抄送: ***@***.***>; ***@***.***>; 主题: Re: [hanxi/xiaomusic] 💬 FAQ问题集合 (Issue #99) 是关闭了网络搜索了吗?现在的搜索只有本地数据没有网络歌曲了? — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: ***@***.***>
|
||||
|
||||
需要刷新缓存
|
||||
|
||||
---
|
||||
|
||||
### 评论 47 - like1020
|
||||
|
||||

|
||||
请教一下,本地列表歌单里的歌曲即便设置为全部循环或随机播放,依然是不断地单曲循环,只能自己手动点下一首,请问是什么情况?
|
||||
|
||||
---
|
||||
|
||||
### 评论 48 - tchgtr
|
||||
|
||||
请问网络搜索功能修复了吗?感谢!
|
||||
|
||||
---
|
||||
|
||||
### 评论 49 - hanxi
|
||||
|
||||
> 请问网络搜索功能修复了吗?感谢!
|
||||
|
||||
修复了。
|
||||
|
||||
---
|
||||
|
||||
### 评论 50 - tchgtr
|
||||
|
||||
> > 请问网络搜索功能修复了吗?感谢!
|
||||
>
|
||||
> 修复了。
|
||||
|
||||
我已经更新到最新版0.3.55,音箱是LX04触屏音箱,但是使用指令对小爱说“播放歌曲。。。“还是通过音箱绑定的QQ音乐播放,解绑了QQ音乐账号,就会提示先让我绑定账号(包括播放本地歌曲指令),感觉音箱还没跟docker连接上(已经重启过容器)。但是通过8090端口进入后台,搜索歌曲,播放,调节声音大小,单曲、随机所有的功能都可以通过按键实现,唯独不能通过语音跟小爱对话播放我指定的内容,请问这个是什么问题,感谢!
|
||||
|
||||
---
|
||||
|
||||
### 评论 51 - hanxi
|
||||
|
||||
> > > 请问网络搜索功能修复了吗?感谢!
|
||||
> >
|
||||
> >
|
||||
> > 修复了。
|
||||
>
|
||||
> 我已经更新到最新版0.3.55,音箱是LX04触屏音箱,但是使用指令对小爱说“播放歌曲。。。“还是通过音箱绑定的QQ音乐播放,解绑了QQ音乐账号,就会提示先让我绑定账号(包括播放本地歌曲指令),感觉音箱还没跟docker连接上(已经重启过容器)。但是通过8090端口进入后台,搜索歌曲,播放,调节声音大小,单曲、随机所有的功能都可以通过按键实现,唯独不能通过语音跟小爱对话播放我指定的内容,请问这个是什么问题,感谢!
|
||||
|
||||
贴下你的 setting.json 文件看看吧,把里面的账号密码删除。
|
||||
|
||||
---
|
||||
|
||||
### 评论 52 - tchgtr
|
||||
|
||||
> > > > 请问网络搜索功能修复了吗?感谢!
|
||||
> > >
|
||||
> > >
|
||||
> > > 修复了。
|
||||
> >
|
||||
> >
|
||||
> > 我已经更新到最新版0.3.55,音箱是LX04触屏音箱,但是使用指令对小爱说“播放歌曲。。。“还是通过音箱绑定的QQ音乐播放,解绑了QQ音乐账号,就会提示先让我绑定账号(包括播放本地歌曲指令),感觉音箱还没跟docker连接上(已经重启过容器)。但是通过8090端口进入后台,搜索歌曲,播放,调节声音大小,单曲、随机所有的功能都可以通过按键实现,唯独不能通过语音跟小爱对话播放我指定的内容,请问这个是什么问题,感谢!
|
||||
>
|
||||
> 贴下你的 setting.json 文件看看吧,把里面的账号密码删除。
|
||||
|
||||
{
|
||||
"account": "",
|
||||
"password": "",
|
||||
"mi_did": "603807070",
|
||||
"miio_tts_command": "",
|
||||
"cookie": "",
|
||||
"verbose": false,
|
||||
"music_path": "music",
|
||||
"temp_path": "music/tmp",
|
||||
"download_path": "music/download",
|
||||
"conf_path": "conf",
|
||||
"cache_dir": "cache",
|
||||
"hostname": "192.168.31.159",
|
||||
"port": 8090,
|
||||
"public_port": 0,
|
||||
"proxy": "",
|
||||
"search_prefix": "bilisearch:",
|
||||
"ffmpeg_location": "./ffmpeg/bin",
|
||||
"active_cmd": "play,set_play_type_rnd,playlocal,play_music_list,play_music_list_index,stop_after_minute,stop",
|
||||
"exclude_dirs": "@eaDir,tmp",
|
||||
"music_path_depth": 10,
|
||||
"disable_httpauth": true,
|
||||
"httpauth_username": "",
|
||||
"httpauth_password": "",
|
||||
"music_list_url": "",
|
||||
"music_list_json": "",
|
||||
"custom_play_list_json": "",
|
||||
"disable_download": false,
|
||||
"key_word_dict": {
|
||||
"下一首": "play_next",
|
||||
"上一首": "play_prev",
|
||||
"单曲循环": "set_play_type_one",
|
||||
"全部循环": "set_play_type_all",
|
||||
"随机播放": "set_play_type_rnd",
|
||||
"单曲播放": "set_play_type_sin",
|
||||
"顺序播放": "set_play_type_seq",
|
||||
"分钟后关机": "stop_after_minute",
|
||||
"刷新列表": "gen_music_list",
|
||||
"加入收藏": "add_to_favorites",
|
||||
"收藏歌曲": "add_to_favorites",
|
||||
"取消收藏": "del_from_favorites",
|
||||
"播放列表第": "play_music_list_index",
|
||||
"播放本地歌曲": "playlocal",
|
||||
"本地播放歌曲": "playlocal",
|
||||
"播放歌曲": "play",
|
||||
"放歌曲": "play",
|
||||
"关机": "stop",
|
||||
"暂停": "stop",
|
||||
"停止": "stop",
|
||||
"停止播放": "stop",
|
||||
"播放列表": "play_music_list",
|
||||
"播放歌单": "play_music_list",
|
||||
"测试自定义口令": "exec#code1(\"hello\")",
|
||||
"测试链接": "exec#httpget(\"https://github.com/hanxi/xiaomusic\")"
|
||||
},
|
||||
"key_match_order": [
|
||||
"分钟后关机",
|
||||
"下一首",
|
||||
"上一首",
|
||||
"单曲循环",
|
||||
"全部循环",
|
||||
"随机播放",
|
||||
"单曲播放",
|
||||
"顺序播放",
|
||||
"关机",
|
||||
"刷新列表",
|
||||
"播放列表第",
|
||||
"播放列表",
|
||||
"加入收藏",
|
||||
"收藏歌曲",
|
||||
"取消收藏",
|
||||
"播放本地歌曲",
|
||||
"本地播放歌曲",
|
||||
"播放歌曲",
|
||||
"放歌曲",
|
||||
"暂停",
|
||||
"停止",
|
||||
"停止播放",
|
||||
"播放歌单",
|
||||
"测试自定义口令",
|
||||
"测试链接"
|
||||
],
|
||||
"use_music_api": false,
|
||||
"use_music_audio_id": "1582971365183456177",
|
||||
"use_music_id": "355454500",
|
||||
"log_file": "xiaomusic.log.txt",
|
||||
"fuzzy_match_cutoff": 0.6,
|
||||
"enable_fuzzy_match": true,
|
||||
"stop_tts_msg": "收到,再见",
|
||||
"enable_config_example": false,
|
||||
"keywords_playlocal": "播放本地歌曲,本地播放歌曲",
|
||||
"keywords_play": "播放歌曲,放歌曲",
|
||||
"keywords_stop": "关机,暂停,停止,停止播放",
|
||||
"keywords_playlist": "播放列表,播放歌单",
|
||||
"user_key_word_dict": {
|
||||
"测试自定义口令": "exec#code1(\"hello\")",
|
||||
"测试链接": "exec#httpget(\"https://github.com/hanxi/xiaomusic\")"
|
||||
},
|
||||
"enable_force_stop": false,
|
||||
"devices": {
|
||||
"603807070": {
|
||||
"did": "603807070",
|
||||
"device_id": "60b8f875-4101-416a-9278-4d4170929b4d",
|
||||
"hardware": "LX04",
|
||||
"name": "小爱触屏音箱",
|
||||
"play_type": 1,
|
||||
"cur_music": "七里香",
|
||||
"cur_playlist": "临时搜索列表"
|
||||
}
|
||||
},
|
||||
"group_list": "",
|
||||
"remove_id3tag": false,
|
||||
"convert_to_mp3": false,
|
||||
"delay_sec": 3,
|
||||
"continue_play": false,
|
||||
"pull_ask_sec": 1,
|
||||
"crontab_json": "",
|
||||
"enable_yt_dlp_cookies": false,
|
||||
"get_ask_by_mina": true,
|
||||
"play_type_one_tts_msg": "已经设置为单曲循环",
|
||||
"play_type_all_tts_msg": "已经设置为全部循环",
|
||||
"play_type_rnd_tts_msg": "已经设置为随机播放",
|
||||
"play_type_sin_tts_msg": "已经设置为单曲播放",
|
||||
"play_type_seq_tts_msg": "已经设置为顺序播放",
|
||||
"recently_added_playlist_len": 50
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
### 评论 53 - hanxi
|
||||
|
||||
get_ask_by_mina 【特殊型号获取对话记录】这个需要设置为 false
|
||||
|
||||
---
|
||||
|
||||
### 评论 54 - tchgtr
|
||||
|
||||
> get_ask_by_mina 【特殊型号获取对话记录】这个需要设置为 false
|
||||
|
||||
已经重新设置并重启容器,尝试还是不行,会不会是这个触屏音箱不支持?
|
||||
|
||||
---
|
||||
|
||||
### 评论 55 - tchgtr
|
||||
|
||||
> > get_ask_by_mina 【特殊型号获取对话记录】这个需要设置为 false
|
||||
>
|
||||
> 已经重新设置并重启容器,尝试还是不行,会不会是这个触屏音箱不支持?
|
||||
|
||||
或者是在创建容器的时候,我的小米账号填写了我的手机号码,应该需要填写实际的小米账号?因为手机号码对应的小米账号,和输入对应的密码,都是可以登陆的,但是我不知道有什么区别,就把手机号码输入进去了
|
||||
|
||||
---
|
||||
|
||||
### 评论 56 - tchgtr
|
||||
|
||||
> > > get_ask_by_mina 【特殊型号获取对话记录】这个需要设置为 false
|
||||
> >
|
||||
> >
|
||||
> > 已经重新设置并重启容器,尝试还是不行,会不会是这个触屏音箱不支持?
|
||||
>
|
||||
> 或者是在创建容器的时候,我的小米账号填写了我的手机号码,应该需要填写实际的小米账号?因为手机号码对应的小米账号,和输入对应的密码,都是可以登陆的,但是我不知道有什么区别,就把手机号码输入进去了
|
||||
|
||||
我重新创建容器,问题解决了,主要是两个地方改变了,一个是上面的小米账号的问题,另外一个是关于conf和music这两个文件夹,这次我都把他们放在/container/xiaomusic下,即/container/xiaomusic/conf(music),分别对应两个容器和主机app/conf(music),问题就解决了。之前我是分开在两个文件夹的。
|
||||
|
||||
---
|
||||
|
||||
### 评论 57 - tianting123
|
||||
|
||||
0 B的APE文件, 建议直接跳过播放
|
||||
|
||||
---
|
||||
|
||||
### 评论 58 - oklrc
|
||||
|
||||
新人请教:使用DOCKER镜像 或者 composer安装 如何升级到最新版本呢?是删除镜像再重新拉取吗
|
||||
|
||||
---
|
||||
|
||||
### 评论 59 - hanxi
|
||||
|
||||
> 新人请教:使用DOCKER镜像 或者 composer安装 如何升级到最新版本呢?是删除镜像再重新拉取吗
|
||||
|
||||
```
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 评论 60 - zhiquanchi
|
||||
|
||||
我在阿里云的服务器上运行的docker,我登录了小米账号,但是 操控面板 里面 不显示我的设备。音箱是pro LX06
|
||||
|
||||
---
|
||||
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/99)
|
366
docs/issues/index.md
Normal file
366
docs/issues/index.md
Normal file
@ -0,0 +1,366 @@
|
||||
# XiaoMusic: 无限听歌,解放小爱音箱
|
||||
[](https://github.com/hanxi/xiaomusic)
|
||||
[](https://hub.docker.com/r/hanxi/xiaomusic)
|
||||
[](https://hub.docker.com/r/hanxi/xiaomusic)
|
||||
[](https://pypi.org/project/xiaomusic/)
|
||||
[](https://pypi.org/project/xiaomusic/)
|
||||
[](https://pypi.org/project/xiaomusic/)
|
||||
[](https://github.com/hanxi/xiaomusic/releases)
|
||||
[](https://visitorbadge.io/status?path=hanxi%2Fxiaomusic)
|
||||
[](https://visitorbadge.io/status?path=hanxi%2Fxiaomusic)
|
||||
|
||||
|
||||
使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。
|
||||
|
||||
<https://github.com/hanxi/xiaomusic>
|
||||
|
||||
> [!TIP]
|
||||
> 初次安装遇到问题请查阅 [💬 FAQ问题集合](https://github.com/hanxi/xiaomusic/issues/99) ,一般遇到的问题都已经有解决办法。
|
||||
|
||||
## 👋 最简配置运行
|
||||
|
||||
已经支持在 web 页面配置其他参数,docker 启动命令如下:
|
||||
|
||||
```bash
|
||||
docker run -p 8090:8090 -v /xiaomusic/music:/app/music -v /xiaomusic/conf:/app/conf hanxi/xiaomusic
|
||||
```
|
||||
|
||||
🔥 国内:
|
||||
|
||||
```bash
|
||||
docker run -p 8090:8090 -v /xiaomusic/music:/app/music -v /xiaomusic/conf:/app/conf m.daocloud.io/docker.io/hanxi/xiaomusic
|
||||
```
|
||||
|
||||
对应的 docker compose 配置如下:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
xiaomusic:
|
||||
image: hanxi/xiaomusic
|
||||
container_name: xiaomusic
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 8090:8090
|
||||
volumes:
|
||||
- /xiaomusic/music:/app/music
|
||||
- /xiaomusic/conf:/app/conf
|
||||
```
|
||||
|
||||
🔥 国内:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
xiaomusic:
|
||||
image: m.daocloud.io/docker.io/hanxi/xiaomusic
|
||||
container_name: xiaomusic
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 8090:8090
|
||||
volumes:
|
||||
- /xiaomusic/music:/app/music
|
||||
- /xiaomusic/conf:/app/conf
|
||||
```
|
||||
|
||||
其中 conf 目录为配置文件存放目录,music 目录为音乐存放目录,建议分开配置为不同的目录。
|
||||
|
||||
> [!NOTE]
|
||||
> 上面配置的 /xiaomusic/music 和 /xiaomusic/conf 是 docker 主机里的 /xiaomusic 目录下的,可以修改为其他目录。如果报错找不到 /xiaomusic/music 目录,可以先执行 `mkdir -p /xiaomusic/{music,conf}` 命令新建目录。
|
||||
|
||||
docker 和 docker compose 二选一即可,启动成功后,在 web 页面可以配置其他参数,带有 `*` 号的配置是必须要配置的,其他的用不上时不用修改。初次配置时需要在页面上输入小米账号和密码保存后才能获取到设备列表。
|
||||
|
||||
> [!TIP]
|
||||
> 目前安装步骤已经是最简化了,如果还是嫌安装麻烦,可以微信或者 QQ 约我远程安装,我一般周末和晚上才有时间,收个辛苦费 :moneybag: 50 元一次,安装失败不收费。
|
||||
|
||||
### 🔥 修改默认8090端口映射
|
||||
|
||||
#### 方法1: 不修改监听端口 8090
|
||||
|
||||
【监听端口】保持为默认的 8090 不变,把【外网访问端口】改为 5678 。
|
||||
|
||||
```yaml
|
||||
services:
|
||||
xiaomusic:
|
||||
image: hanxi/xiaomusic
|
||||
container_name: xiaomusic
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 5678:8090
|
||||
volumes:
|
||||
- /xiaomusic/music:/app/music
|
||||
- /xiaomusic/conf:/app/conf
|
||||
environment:
|
||||
XIAOMUSIC_PUBLIC_PORT: 5678
|
||||
```
|
||||
|
||||
XIAOMUSIC_PUBLIC_PORT 对应后台设置里的【外网访问端口】,修改后可以不用重启。
|
||||
|
||||
#### 方法2: 修改监听端口 8090 为 5678
|
||||
|
||||
如果需要修改 8090 端口为其他端口,比如 5678,需要这样配,3个数字都需要是 5678 。见 <https://github.com/hanxi/xiaomusic/issues/19>
|
||||
|
||||
```yaml
|
||||
services:
|
||||
xiaomusic:
|
||||
image: hanxi/xiaomusic
|
||||
container_name: xiaomusic
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 5678:5678
|
||||
volumes:
|
||||
- /xiaomusic/music:/app/music
|
||||
- /xiaomusic/conf:/app/conf
|
||||
environment:
|
||||
XIAOMUSIC_PORT: 5678
|
||||
```
|
||||
|
||||
如果不是首次修改端口,还需要修改 /xiaomusic/conf/setting.json 文件里的端口(也可以在后台修改监听端口后重启)。
|
||||
|
||||
遇到问题可以去 web 设置页面底部点击【下载日志文件】按钮,然后搜索一下日志文件内容确保里面没有账号密码信息后(有就删除这些敏感信息),然后在提 issues 反馈问题时把下载的日志文件带上。
|
||||
|
||||
> [!IMPORTANT]
|
||||
> XIAOMUSIC_PORT 也可以在后台配置,对应的是监听端口,修改后记得重启。
|
||||
|
||||
|
||||
### 🤐 支持语音口令
|
||||
|
||||
- 【播放歌曲】,播放本地的歌曲
|
||||
- 【播放歌曲+歌名】,比如:播放歌曲周杰伦晴天
|
||||
- 【上一首】
|
||||
- 【下一首】
|
||||
- 【单曲循环】
|
||||
- 【全部循环】
|
||||
- 【随机播放】
|
||||
- 【关机】,【停止播放】,两个效果是一样的。
|
||||
- 【刷新列表】,当复制了歌曲进 music 目录后,可以用这个口令刷新歌单。
|
||||
- 【播放列表+列表名】,比如:播放列表其他。
|
||||
- 【加入收藏】,把当前播放的歌曲加入收藏歌单。
|
||||
- 【取消收藏】,把当前播放的歌曲从收藏歌单里移除。
|
||||
- 【播放列表收藏】,这个用于播放收藏歌单。
|
||||
- 【播放本地歌曲+歌名】,这个口令和播放歌曲的区别是本地找不到也不会去下载。
|
||||
- 【播放列表第几个+列表名】,具体见: <https://github.com/hanxi/xiaomusic/issues/158>
|
||||
- 【搜索播放+关键词】,会搜索关键词作为临时搜索列表播放,比如说【搜索播放林俊杰】,会播放所有林俊杰的歌。
|
||||
- 【本地搜索播放+关键词】,跟搜索播放的区别是本地找不到也不会去下载。
|
||||
|
||||
> [!TIP]
|
||||
> 隐藏玩法: 对小爱同学说播放歌曲小猪佩奇的故事,会先下载小猪佩奇的故事,然后再播放小猪佩奇的故事。
|
||||
|
||||
## 🛠️ pip 方式安装运行
|
||||
|
||||
```shell
|
||||
> pip install -U xiaomusic
|
||||
> xiaomusic --help
|
||||
__ __ _ __ __ _
|
||||
\ \/ / (_) __ _ ___ | \/ | _ _ ___ (_) ___
|
||||
\ / | | / _` | / _ \ | |\/| | | | | | / __| | | / __|
|
||||
/ \ | | | (_| | | (_) | | | | | | |_| | \__ \ | | | (__
|
||||
/_/\_\ |_| \__,_| \___/ |_| |_| \__,_| |___/ |_| \___|
|
||||
XiaoMusic v0.3.37 by: github.com/hanxi
|
||||
|
||||
usage: xiaomusic [-h] [--port PORT] [--hardware HARDWARE] [--account ACCOUNT]
|
||||
[--password PASSWORD] [--cookie COOKIE] [--verbose]
|
||||
[--config CONFIG] [--ffmpeg_location FFMPEG_LOCATION]
|
||||
|
||||
options:
|
||||
-h, --help show this help message and exit
|
||||
--port PORT 监听端口
|
||||
--hardware HARDWARE 小爱音箱型号
|
||||
--account ACCOUNT xiaomi account
|
||||
--password PASSWORD xiaomi password
|
||||
--cookie COOKIE xiaomi cookie
|
||||
--verbose show info
|
||||
--config CONFIG config file path
|
||||
--ffmpeg_location FFMPEG_LOCATION
|
||||
ffmpeg bin path
|
||||
> xiaomusic --config config.json
|
||||
```
|
||||
|
||||
其中 `config.json` 文件可以参考 `config-example.json` 文件配置。见 <https://github.com/hanxi/xiaomusic/issues/94>
|
||||
|
||||
不修改默认端口 8090 的情况下,只需要执行 `xiaomusic` 即可启动。
|
||||
|
||||
## 🔩 开发环境运行
|
||||
|
||||
- 使用 install_dependencies.sh 下载依赖
|
||||
- 使用 pdm 安装环境
|
||||
- 默认监听了端口 8090 , 使用其他端口自行修改。
|
||||
|
||||
```shell
|
||||
pdm run xiaomusic.py
|
||||
````
|
||||
|
||||
如果是开发前端界面,可以通过 <http://localhost:8090/docs>
|
||||
查看有什么接口。目前的 web 控制台非常简陋,欢迎有兴趣的朋友帮忙实现一个漂亮的前端,需要什么接口可以随时提需求。
|
||||
|
||||
### 🚦 代码提交规范
|
||||
|
||||
提交前请执行
|
||||
|
||||
```
|
||||
pdm lintfmt
|
||||
```
|
||||
|
||||
用于检查代码和格式化代码。
|
||||
|
||||
### 本地编译 Docker Image
|
||||
|
||||
```shell
|
||||
docker build -t xiaomusic .
|
||||
```
|
||||
|
||||
### 技术栈
|
||||
|
||||
- 后端代码使用 Python 语言编写。
|
||||
- HTTP 服务使用的是 FastAPI 框架,~~早期版本使用的是 Flask~~。
|
||||
- 使用了 Docker ,在 NAS 上安装更方便。
|
||||
- 默认的前端主题使用了 jQuery 。
|
||||
|
||||
|
||||
## 已测试支持的设备
|
||||
|
||||
| 型号 | 名称 |
|
||||
| ---- | ---------------------------------------------------------------------------------------------- |
|
||||
| L06A | [小爱音箱](https://home.mi.com/baike/index.html#/detail?model=xiaomi.wifispeaker.l06a) |
|
||||
| L07A | [Redmi小爱音箱 Play](https://home.mi.com/webapp/content/baike/product/index.html?model=xiaomi.wifispeaker.l7a) |
|
||||
| S12/S12A/MDZ-25-DA | [小米AI音箱](https://home.mi.com/baike/index.html#/detail?model=xiaomi.wifispeaker.s12) |
|
||||
| LX5A | [小爱音箱 万能遥控版](https://home.mi.com/baike/index.html#/detail?model=xiaomi.wifispeaker.lx5a) |
|
||||
| LX05 | [小爱音箱Play(2019款)](https://home.mi.com/baike/index.html#/detail?model=xiaomi.wifispeaker.lx05) |
|
||||
| L15A | [小米AI音箱(第二代)](https://home.mi.com/webapp/content/baike/product/index.html?model=xiaomi.wifispeaker.l15a#/) |
|
||||
| L16A | [Xiaomi Sound](https://home.mi.com/baike/index.html#/detail?model=xiaomi.wifispeaker.l16a) |
|
||||
| L17A | [Xiaomi Sound Pro](https://home.mi.com/baike/index.html#/detail?model=xiaomi.wifispeaker.l17a) |
|
||||
| LX06 | [小爱音箱Pro](https://home.mi.com/baike/index.html#/detail?model=xiaomi.wifispeaker.lx06) |
|
||||
| LX01 | [小爱音箱mini](https://home.mi.com/baike/index.html#/detail?model=xiaomi.wifispeaker.lx01) |
|
||||
| L05B | [小爱音箱Play](https://home.mi.com/baike/index.html#/detail?model=xiaomi.wifispeaker.l05b) |
|
||||
| L05C | [小米小爱音箱Play 增强版](https://home.mi.com/baike/index.html#/detail?model=xiaomi.wifispeaker.l05c) |
|
||||
| L09A | [小米音箱Art](https://home.mi.com/webapp/content/baike/product/index.html?model=xiaomi.wifispeaker.l09a) |
|
||||
| LX04 X10A X08A | 已经支持的触屏版 |
|
||||
| X08C X08E X8F | 需要设置【型号兼容模式】选项为 true |
|
||||
| M01/XMYX01JY | 小米小爱音箱HD 需要设置【特殊型号获取对话记录】选项为 true 才能语音播放|
|
||||
|
||||
型号与产品名称对照可以在这里查询 <https://home.miot-spec.com/s/xiaomi.wifispeaker>
|
||||
|
||||
> [!NOTE]
|
||||
> 如果你的设备支持播放,请反馈给我添加到支持列表里,谢谢。
|
||||
> 目前应该所有设备类型都已经支持播放,有问题随时反馈。
|
||||
> 其他触屏版不能播放可以设置【型号兼容模式】选项为 true 试试。见 <https://github.com/hanxi/xiaomusic/issues/30>
|
||||
|
||||
## 🎵 支持音乐格式
|
||||
|
||||
- mp3
|
||||
- flac
|
||||
- wav
|
||||
- ape
|
||||
- ogg
|
||||
- m4a
|
||||
|
||||
> [!NOTE]
|
||||
> 本地音乐会搜索目录下上面格式的文件,下载的歌曲是 mp3 格式的。
|
||||
> 已知 L05B L05C LX06 L16A 不支持 flac 格式。
|
||||
> 如果格式不能播放可以打开【转换为MP3】和【型号兼容模式】选项。具体见 <https://github.com/hanxi/xiaomusic/issues/153#issuecomment-2328168689>
|
||||
|
||||
|
||||
## 💡 简易的控制面板
|
||||
|
||||
浏览器进入 <http://192.168.2.5:8090>
|
||||
|
||||
- ip 是 XIAOMUSIC_HOSTNAME 设置的
|
||||
- 8090 是默认端口
|
||||
- 支持功能
|
||||
- 显示正在播放的歌曲
|
||||
- 模糊搜索本地歌曲
|
||||
- 播放列表
|
||||
- 删除歌曲
|
||||
- 设置页面
|
||||
- 配置网络歌单
|
||||
- 日志文件下载
|
||||
|
||||
采用新的设置页面之后,没有必须在启动前配置的环境变量了,除非是改默认的 8090 端口才需要配置环境变量。
|
||||
|
||||
## 🌏 网络歌单功能
|
||||
|
||||
可以配置一个 json 格式的歌单,支持电台和歌曲,也可以直接用别人分享的链接,同时配备了 m3u 文件格式转换工具,可以很方便的把 m3u 电台文件转换成网络歌单格式的 json 文件,具体用法见 <https://github.com/hanxi/xiaomusic/issues/78>
|
||||
|
||||
> [!NOTE]
|
||||
> 欢迎有想法的朋友们制作更多的歌单转换工具。
|
||||
|
||||
## 🍺 更多其他可选配置
|
||||
|
||||
- XIAOMUSIC_ACTIVE_CMD 环境变量,对应后台的 【允许唤醒的命令】,用于唤醒口令,配置成'play,random_play',在非播放状态下,只有这两个指令(播放歌曲和随机播放)可以触发,触发后,xiaomusic进入playing状态,其他指令则可以正常触发。具体见 <https://github.com/hanxi/xiaomusic/pull/43>
|
||||
- XIAOMUSIC_EXCLUDE_DIRS 配置歌曲目录里需要忽略的目录,对应后台的 【忽略目录】
|
||||
- XIAOMUSIC_MUSIC_PATH_DEPTH 配置歌曲目录搜索深度,对应后台的 【目录深度】,具体见 <https://github.com/hanxi/xiaomusic/issues/76>
|
||||
- XIAOMUSIC_DISABLE_HTTPAUTH 配置成 false 表示开启密码访问web控制台,对应后台的 【关闭密码验证】,具体见 <https://github.com/hanxi/xiaomusic/issues/47>
|
||||
- XIAOMUSIC_HTTPAUTH_USERNAME 配置 web 控制台用户,对应后台的 【控制台账户】
|
||||
- XIAOMUSIC_HTTPAUTH_PASSWORD 配置 web 控制台密码,对应后台的 【控制台密码】
|
||||
- XIAOMUSIC_CONF_PATH 用来存放配置文件的目录,对应后台的 【配置文件目录】,记得把目录映射到主机,默认为 `/app/config` ,具体见 <https://github.com/hanxi/xiaomusic/issues/74>
|
||||
- XIAOMUSIC_CACHE_DIR 用来音乐 tag 缓存,默认为 `/app/cache`,对应后台的 【缓存文件目录】。
|
||||
- XIAOMUSIC_DISABLE_DOWNLOAD 设为 true 时关闭下载功能,对应后台的 【关闭下载功能】,见 <https://github.com/hanxi/xiaomusic/issues/82>
|
||||
- XIAOMUSIC_USE_MUSIC_API 设为 true 时使用 player_play_music 接口播放音乐,对应后台的 【型号兼容模式】,用于兼容不能播放的型号,如果发现需要设置这个选项的时候请告知我加一下设备型号,方便以后不用设置。 见 <https://github.com/hanxi/xiaomusic/issues/30>
|
||||
- XIAOMUSIC_KEYWORDS_PLAY 用来播放歌曲的口令前缀,对应后台的 【播放歌曲口令】,默认是 "播放歌曲,放歌曲" ,可以用英文逗号分割配置多个
|
||||
- XIAOMUSIC_KEYWORDS_STOP 用来关机的口令,对应后台的 【停止口令】,默认是 "关机,暂停,停止" ,可以用英文逗号分割配置多个。
|
||||
- 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>
|
||||
- XIAOMUSIC_PUBLIC_PORT 用于设置外网端口,对应后台的 【外网访问端口】,当使用反向代理时可以设置为外网端口,XIAOMUSIC_HOSTNAME 设为外网IP或者域名即可。
|
||||
- XIAOMUSIC_DOWNLOAD_PATH 变量可以配置下载目录,默认为空,表示使用 music 目录为下载目录,对应后台的 【音乐下载目录】。设置这个目录必须是 music 的子目录,否则刷新列表后会找不到歌曲。具体见 <https://github.com/hanxi/xiaomusic/issues/98>
|
||||
- XIAOMUSIC_PROXY 用于配置国内使用 youtube 源下载歌曲时使用的代理,参数格式参考 yt-dlp 文档说明。 见 <https://github.com/hanxi/xiaomusic/issues/2> 和 <https://github.com/hanxi/xiaomusic/issues/11>
|
||||
- MIIO_TTS_CMD 用于部分机型(如:`L05C`)使用 MiIO 支持 tts 能力,默认为空,命令选择见 [MiService-fork 文档](https://github.com/yihong0618/MiService)
|
||||
|
||||
### ⚠️ 安全提醒
|
||||
|
||||
> [!IMPORTANT]
|
||||
> 1. 如果配置了公网访问 xiaomusic ,请一定要开启密码登陆,并设置复杂的密码。且不要在公共场所的 WiFi 环境下使用,否则可能造成小米账号密码泄露。
|
||||
> 2. 强烈不建议将小爱音箱的小米账号绑定摄像头,代码难免会有 bug ,一旦小米账号密码泄露,可能监控录像也会泄露。
|
||||
|
||||
## 🤔 高级篇
|
||||
|
||||
- 自定义口令功能 <https://github.com/hanxi/xiaomusic/issues/105>
|
||||
- [ ] 缺少一篇教程 [如何写自定义插件](https://github.com/hanxi/xiaomusic/issues/105)
|
||||
|
||||
## 📢 讨论区
|
||||
|
||||
- [点击链接加入QQ频道【xiaomusic】](https://pd.qq.com/s/e2jybz0ss)
|
||||
- [点击链接加入群聊【xiaomusic】 604526973](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=13St5PLVcTxYlWTAs_iAawazjtdD1l-a&authKey=dJWEpaT2fDBDpdUUOWj%2FLt6NS1ePBfShDfz7a6seNURi05VvVnAGQzXF%2FM%2F5HgIm&noverify=0&group_code=604526973)
|
||||
- <https://github.com/hanxi/xiaomusic/issues>
|
||||
- [微信群二维码](https://github.com/hanxi/xiaomusic/issues/86)
|
||||
|
||||
## ❤️ 感谢
|
||||
|
||||
- [xiaomi](https://www.mi.com/)
|
||||
- [PDM](https://pdm.fming.dev/latest/)
|
||||
- [xiaogpt](https://github.com/yihong0618/xiaogpt)
|
||||
- [MiService](https://github.com/yihong0618/MiService)
|
||||
- [实现原理](https://github.com/yihong0618/gitblog/issues/258)
|
||||
- [yt-dlp](https://github.com/yt-dlp/yt-dlp)
|
||||
- [awesome-xiaoai](https://github.com/zzz6519003/awesome-xiaoai)
|
||||
- [微信小程序: XIAO晓音](https://github.com/F-loat/xiaoplayer)
|
||||
- [pure 主题 xiaomusicUI](https://github.com/52fisher/xiaomusicUI)
|
||||
- [移动端的播放器主题](https://github.com/52fisher/XMusicPlayer)
|
||||
- [一个第三方的主题](https://github.com/DarrenWen/xiaomusicui)
|
||||
- 所有帮忙调试和测试的朋友
|
||||
- 所有反馈问题和建议的朋友
|
||||
|
||||
### 👉 其他教程
|
||||
|
||||
更多功能见 [📝 文档汇总](https://github.com/hanxi/xiaomusic/issues/211)
|
||||
|
||||
## 🚨 免责声明
|
||||
|
||||
本项目仅供学习和研究目的,不得用于任何商业活动。用户在使用本项目时应遵守所在地区的法律法规,对于违法使用所导致的后果,本项目及作者不承担任何责任。
|
||||
本项目可能存在未知的缺陷和风险(包括但不限于设备损坏和账号封禁等),使用者应自行承担使用本项目所产生的所有风险及责任。
|
||||
作者不保证本项目的准确性、完整性、及时性、可靠性,也不承担任何因使用本项目而产生的任何损失或损害责任。
|
||||
使用本项目即表示您已阅读并同意本免责声明的全部内容。
|
||||
|
||||
## Star History
|
||||
|
||||
[](https://star-history.com/#hanxi/xiaomusic&Date)
|
||||
|
||||
## 赞赏
|
||||
|
||||
- :moneybag: 爱发电 <https://afdian.com/a/imhanxi>
|
||||
- 点个 Star :star:
|
||||
- 谢谢 :heart:
|
||||
- 
|
||||
|
||||
## License
|
||||
|
||||
[MIT](https://github.com/hanxi/xiaomusic/blob/main/LICENSE) License © 2024 涵曦
|
||||
|
3680
docs/package-lock.json
generated
Normal file
3680
docs/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
14
docs/package.json
Normal file
14
docs/package.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"vitepress": "^1.5.0"
|
||||
},
|
||||
"scripts": {
|
||||
"docs:dev": "vitepress dev --host=0.0.0.0 --port=3030",
|
||||
"docs:build": "vitepress build",
|
||||
"docs:preview": "vitepress preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^1.7.9",
|
||||
"vite-plugin-vitepress-auto-sidebar": "^1.7.0"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user