MIT 开源
完全开源,自主可控
diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index 4e5d6a5..97e0311 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -31,13 +31,28 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '20' + - name: Install dependencies + working-directory: ./docs # 指定工作目录为 docs + run: | + npm install + + - name: Build VitePress + working-directory: ./docs # 指定工作目录为 docs + run: | + npm run docs:build + - name: Setup Pages uses: actions/configure-pages@v5 - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: # Upload entire repository - path: 'docs/.vitepress/dist' + path: './docs/.vitepress/dist' - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index b5c37be..a311932 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -1,59 +1,69 @@ -import { defineConfig } from 'vitepress' +import { loadEnv, 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' } - ], +export default async ({ mode }) => { + const env = loadEnv(mode || '', process.cwd()) + return defineConfig({ + title: "XiaoMusic", + description: "XiaoMusic doc", + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + nav: [ + { text: 'Guide', link: '/issues' }, + { text: 'Admin', link: 'https://x.hanxi.cc' }, + ], - 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); - }; + socialLinks: [ + { icon: 'github', link: 'https://github.com/hanxi/xiaomusic' } + ], + + footer: { + message: '基于 MIT 许可发布', + copyright: `版权所有 © 2023-${new Date().getFullYear()} 涵曦` + }, }, - }, - 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', - }, - ], - }), + sitemap: { + hostname: 'https://xdocs.hanxi.cc' + }, + head: [ + ['script', { defer: true, src: 'https://umami.hanxi.cc/script.js', 'data-website-id': '29cca3f5-e420-432b-adc7-8a1325d31c68' }] ], - } -}) + 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: env.VITE_GITHUB_ISSUES_TOKEN, + replaceRules:[ + { + baseUrl: 'https://github.com/hanxi/xiaomusic/issues', + targetUrl: '/issues', + }, + ], + }), + ], + } + }) +} diff --git a/docs/.vitepress/dist/404.html b/docs/.vitepress/dist/404.html deleted file mode 100644 index a6365b8..0000000 --- a/docs/.vitepress/dist/404.html +++ /dev/null @@ -1,22 +0,0 @@ - - -
- - -{const{slotScopeIds:I}=p;I&&(j=j?j.concat(I):I);const _=o(g),P=x(i(g),p,_,A,D,j,K);return P&&on(P)&&P.data==="]"?i(p.anchor=P):(bt(),c(p.anchor=u("]"),_,P),P)},O=(g,p,A,D,j,K)=>{if(ln(g.parentElement,1)||bt(),p.el=null,K){const P=G(g);for(;;){const b=i(g);if(b&&b!==P)l(b);else break}}const I=i(g),_=o(g);return l(g),n(null,p,_,I,A,D,rn(_),j),A&&(A.vnode.el=p.el,qi(A,p.el)),I},G=(g,p="[",A="]")=>{let D=0;for(;g;)if(g=i(g),g&&on(g)&&(g.data===p&&D++,g.data===A)){if(D===0)return i(g);D--}return g},U=(g,p,A)=>{const D=p.parentNode;D&&D.replaceChild(g,p);let j=A;for(;j;)j.vnode.el===p&&(j.vnode.el=j.subTree.el=g),j=j.parent},W=g=>g.nodeType===1&&g.tagName==="TEMPLATE";return[a,h]}const er="data-allow-mismatch",Al={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function ln(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(er);)e=e.parentElement;const n=e&&e.getAttribute(er);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:n.split(",").includes(Al[t])}}An().requestIdleCallback;An().cancelIdleCallback;const pt=e=>!!e.type.__asyncLoader,Nn=e=>e.type.__isKeepAlive;function Rl(e,t){Si(e,"a",t)}function Ol(e,t){Si(e,"da",t)}function Si(e,t,n=fe){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Fn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)Nn(r.parent.vnode)&&Ml(s,t,n,r),r=r.parent}}function Ml(e,t,n,s){const r=Fn(t,e,s,!0);Hn(()=>{Ts(s[t],r)},n)}function Fn(e,t,n=fe,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{rt();const l=zt(n),c=He(t,n,e,o);return l(),it(),c});return s?r.unshift(i):r.push(i),i}}const Ye=e=>(t,n=fe)=>{(!Gt||e==="sp")&&Fn(e,(...s)=>t(...s),n)},Il=Ye("bm"),Ot=Ye("m"),Ll=Ye("bu"),Pl=Ye("u"),Ei=Ye("bum"),Hn=Ye("um"),Nl=Ye("sp"),Fl=Ye("rtg"),Hl=Ye("rtc");function $l(e,t=fe){Fn("ec",e,t)}const Ci="components";function Ja(e,t){return Ai(Ci,e,!0,t)||e}const Ti=Symbol.for("v-ndc");function za(e){return re(e)?Ai(Ci,e,!1)||e:e||Ti}function Ai(e,t,n=!0,s=!1){const r=ve||fe;if(r){const i=r.type;{const l=wc(i,!1);if(l&&(l===t||l===Le(t)||l===Tn(Le(t))))return i}const o=tr(r[e]||i[e],t)||tr(r.appContext[e],t);return!o&&s?i:o}}function tr(e,t){return e&&(e[t]||e[Le(t)]||e[Tn(Le(t))])}function Qa(e,t,n,s){let r;const i=n,o=B(e);if(o||re(e)){const l=o&&ht(e);let c=!1;l&&(c=!Ie(e),e=On(e)),r=new Array(e.length);for(let u=0,a=e.length;ut(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,u=l.length;cqt(t)?!(t.type===ye||t.type===xe&&!Ri(t.children)):!0)?e:null}function ef(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:dn(s)]=e[s];return n}const gs=e=>e?Zi(e)?Vs(e):gs(e.parent):null,$t=le(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>gs(e.parent),$root:e=>gs(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>$s(e),$forceUpdate:e=>e.f||(e.f=()=>{Hs(e.update)}),$nextTick:e=>e.n||(e.n=Pn.bind(e.proxy)),$watch:e=>ic.bind(e)}),Xn=(e,t)=>e!==te&&!e.__isScriptSetup&&z(e,t),Dl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let u;if(t[0]!=="$"){const x=o[t];if(x!==void 0)switch(x){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(Xn(s,t))return o[t]=1,s[t];if(r!==te&&z(r,t))return o[t]=2,r[t];if((u=e.propsOptions[0])&&z(u,t))return o[t]=3,i[t];if(n!==te&&z(n,t))return o[t]=4,n[t];ms&&(o[t]=0)}}const a=$t[t];let h,v;if(a)return t==="$attrs"&&ge(e.attrs,"get",""),a(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==te&&z(n,t))return o[t]=4,n[t];if(v=c.config.globalProperties,z(v,t))return v[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return Xn(r,t)?(r[t]=n,!0):s!==te&&z(s,t)?(s[t]=n,!0):z(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==te&&z(e,o)||Xn(t,o)||(l=i[0])&&z(l,o)||z(s,o)||z($t,o)||z(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:z(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function tf(){return jl().slots}function jl(){const e=jn();return e.setupContext||(e.setupContext=to(e))}function nr(e){return B(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ms=!0;function Vl(e){const t=$s(e),n=e.proxy,s=e.ctx;ms=!1,t.beforeCreate&&sr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:u,created:a,beforeMount:h,mounted:v,beforeUpdate:x,updated:L,activated:O,deactivated:G,beforeDestroy:U,beforeUnmount:W,destroyed:g,unmounted:p,render:A,renderTracked:D,renderTriggered:j,errorCaptured:K,serverPrefetch:I,expose:_,inheritAttrs:P,components:b,directives:V,filters:se}=t;if(u&&Ul(u,s,null),o)for(const Y in o){const F=o[Y];q(F)&&(s[Y]=F.bind(n))}if(r){const Y=r.call(n,n);ne(Y)&&(e.data=Mn(Y))}if(ms=!0,i)for(const Y in i){const F=i[Y],ae=q(F)?F.bind(n,n):q(F.get)?F.get.bind(n,n):Ue,Qt=!q(F)&&q(F.set)?F.set.bind(n):Ue,ot=oe({get:ae,set:Qt});Object.defineProperty(s,Y,{enumerable:!0,configurable:!0,get:()=>ot.value,set:$e=>ot.value=$e})}if(l)for(const Y in l)Oi(l[Y],s,n,Y);if(c){const Y=q(c)?c.call(n):c;Reflect.ownKeys(Y).forEach(F=>{Gl(F,Y[F])})}a&&sr(a,e,"c");function H(Y,F){B(F)?F.forEach(ae=>Y(ae.bind(n))):F&&Y(F.bind(n))}if(H(Il,h),H(Ot,v),H(Ll,x),H(Pl,L),H(Rl,O),H(Ol,G),H($l,K),H(Hl,D),H(Fl,j),H(Ei,W),H(Hn,p),H(Nl,I),B(_))if(_.length){const Y=e.exposed||(e.exposed={});_.forEach(F=>{Object.defineProperty(Y,F,{get:()=>n[F],set:ae=>n[F]=ae})})}else e.exposed||(e.exposed={});A&&e.render===Ue&&(e.render=A),P!=null&&(e.inheritAttrs=P),b&&(e.components=b),V&&(e.directives=V),I&&xi(e)}function Ul(e,t,n=Ue){B(e)&&(e=ys(e));for(const s in e){const r=e[s];let i;ne(r)?"default"in r?i=At(r.from||s,r.default,!0):i=At(r.from||s):i=At(r),ce(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function sr(e,t,n){He(B(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Oi(e,t,n,s){let r=s.includes(".")?Wi(n,s):()=>n[s];if(re(e)){const i=t[e];q(i)&&Fe(r,i)}else if(q(e))Fe(r,e.bind(n));else if(ne(e))if(B(e))e.forEach(i=>Oi(i,t,n,s));else{const i=q(e.handler)?e.handler.bind(n):t[e.handler];q(i)&&Fe(r,i,e)}}function $s(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(u=>xn(c,u,o,!0)),xn(c,t,o)),ne(t)&&i.set(t,c),c}function xn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&xn(e,i,n,!0),r&&r.forEach(o=>xn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Bl[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Bl={data:rr,props:ir,emits:ir,methods:Nt,computed:Nt,beforeCreate:_e,created:_e,beforeMount:_e,mounted:_e,beforeUpdate:_e,updated:_e,beforeDestroy:_e,beforeUnmount:_e,destroyed:_e,unmounted:_e,activated:_e,deactivated:_e,errorCaptured:_e,serverPrefetch:_e,components:Nt,directives:Nt,watch:Wl,provide:rr,inject:kl};function rr(e,t){return t?e?function(){return le(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function kl(e,t){return Nt(ys(e),ys(t))}function ys(e){if(B(e)){const t={};for(let n=0;n 由于现在群晖已经无法正常下载 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 6、配置端口 MI_DID=前面第4 步骤获取的,第4步骤在哪? MI_DID=前面第4 步骤获取的,第4步骤在哪? 不用设置 MI_DID 国内 docker 镜像 如果手头上有能科学上网的机器,直接把群辉的代理服务器IP填写成可以科学上网的机器IP+端口,翻墙软件打开允许局域网连接就可以 由于现在群晖已经无法正常下载 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 6、配置端口 MI_DID=前面第4 步骤获取的,第4步骤在哪? MI_DID=前面第4 步骤获取的,第4步骤在哪? 不用设置 MI_DID 国内 docker 镜像 如果手头上有能科学上网的机器,直接把群辉的代理服务器IP填写成可以科学上网的机器IP+端口,翻墙软件打开允许局域网连接就可以 自定义口令配置需要配置到 config.json 文件里,使用 config.json 方式启动。参考 </issues/94.html> 。 口令的配置方式见 config-example.json 文件。口令对应的代码需要写到 config.json 格式是下面这样的。 配置自定义口令时,只需要配置 user_key_word_dict 即可,会自动插入到 key_word_dict 里的。配置格式是: 其中 "测试自定义口令" 就是对小爱音箱说的, 这里只是演示了打印日志和让小爱音箱说话。还有一个示例插件是 httpget ,可以用来访问 url 。 比如下面这样配置的话,当对小爱音箱说测试链接时,会去访问 url ,可以用来很多其他的事情。 最后还需要在 感兴趣的可以体验一下,写了有什么好玩的插件也可以在这里分享,或者提 pr 合并进官方库里作为自带插件。 如果开启服务的状态下 如何唤醒才能调用原有的播放QQ 网易云?而特定唤醒词调用xiaoai播放? 如果开启服务的状态下 如何唤醒才能调用原有的播放QQ 网易云?而特定唤醒词调用xiaoai播放? 不使用 xiaomusic 的唤醒词就会调用音箱自带的,比如说播放音乐 我用code1的代码执行报错,有大佬知道为什么吗? @shellingford37 重构后漏改了,修复了。 先说播放歌曲,再说 测试自定义口令 就行 想请教下插件那个功能,如何把用户的语音输入作为参数内容传到自定义函数里 想请教下插件那个功能,如何把用户的语音输入作为参数内容传到自定义函数里 现在获取不到,等我加个接口获取吧。 666,支持以后我可以贡献一个接入通义模型的插件 @CZJCC 你可以更新看看 plugins/code1.py 的测试代码,我测试了是可以拿到语音输入的原始内容的。 文档更新了下,active_cmd 也需要配置一下才能正常唤醒。 @CZJCC 你可以更新看看 plugins/code1.py 的测试代码,我测试了是可以拿到语音输入的原始内容的。 我原先设想的事用户的话术是”通义提问为什么地球是圆的“,指令匹配的时候通义提问前缀匹配到类似于code1方法,为什么地球是圆的作为参数传入这个函数,但我看现在是拿历史记录实现的 是的,插件函数里面再切割一下前缀就行。last_record就是当前的那条语音数据。 @CZJCC 你可以更新看看 plugins/code1.py 的测试代码,我测试了是可以拿到语音输入的原始内容的。 我原先设想的事用户的话术是”通义提问为什么地球是圆的“,指令匹配的时候通义提问前缀匹配到类似于code1方法,为什么地球是圆的作为参数传入这个函数,但我看现在是拿历史记录实现的 是的,这样比较简单,交给插件里面处理也比较自由。 key_word_dict中的“播放歌曲”口令是不能修改的是吧?因为以前用小爱同学播放歌曲说习惯了,总是触发xiaomusic自动下载歌曲,我想把口令改成“查找歌曲”,这样我当说播放歌曲的时候就调用网易云音乐或者QQ音乐,当我说查找歌曲的时候就先看本地有没有歌曲,没有话就自动下载到本地。 当我先按照config-example.json的模板写好如下配置并重命名为config.json 用以下命令安装docker 似乎自定义的口令只能以插入的方式添加上去,并不能替换掉原来的口令 key_word_dict中的“播放歌曲”口令是不能修改的是吧?因为以前用小爱同学播放歌曲说习惯了,总是触发xiaomusic自动下载歌曲,我想把口令改成“查找歌曲”,这样我当说播放歌曲的时候就调用网易云音乐或者QQ音乐,当我说查找歌曲的时候就先看本地有没有歌曲,没有话就自动下载到本地。 当我先按照config-example.json的模板写好如下配置并重命名为config.json 用以下命令安装docker 似乎自定义的口令只能以插入的方式添加上去,并不能替换掉原来的口令 可以在网页后台设置页面改。 不行,后台设置如图 使用的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的自定义口令 @mogeqian 另外提个 issue 吧,现在应该是不支持删除默认的口令。 好的,已经重开了一个issue #259 自定义口令配置需要配置到 config.json 文件里,使用 config.json 方式启动。参考 </issues/94.html> 。 口令的配置方式见 config-example.json 文件。口令对应的代码需要写到 config.json 格式是下面这样的。 配置自定义口令时,只需要配置 user_key_word_dict 即可,会自动插入到 key_word_dict 里的。配置格式是: 其中 "测试自定义口令" 就是对小爱音箱说的, 这里只是演示了打印日志和让小爱音箱说话。还有一个示例插件是 httpget ,可以用来访问 url 。 比如下面这样配置的话,当对小爱音箱说测试链接时,会去访问 url ,可以用来很多其他的事情。 最后还需要在 感兴趣的可以体验一下,写了有什么好玩的插件也可以在这里分享,或者提 pr 合并进官方库里作为自带插件。 如果开启服务的状态下 如何唤醒才能调用原有的播放QQ 网易云?而特定唤醒词调用xiaoai播放? 如果开启服务的状态下 如何唤醒才能调用原有的播放QQ 网易云?而特定唤醒词调用xiaoai播放? 不使用 xiaomusic 的唤醒词就会调用音箱自带的,比如说播放音乐 我用code1的代码执行报错,有大佬知道为什么吗? @shellingford37 重构后漏改了,修复了。 先说播放歌曲,再说 测试自定义口令 就行 想请教下插件那个功能,如何把用户的语音输入作为参数内容传到自定义函数里 想请教下插件那个功能,如何把用户的语音输入作为参数内容传到自定义函数里 现在获取不到,等我加个接口获取吧。 666,支持以后我可以贡献一个接入通义模型的插件 @CZJCC 你可以更新看看 plugins/code1.py 的测试代码,我测试了是可以拿到语音输入的原始内容的。 文档更新了下,active_cmd 也需要配置一下才能正常唤醒。 @CZJCC 你可以更新看看 plugins/code1.py 的测试代码,我测试了是可以拿到语音输入的原始内容的。 我原先设想的事用户的话术是”通义提问为什么地球是圆的“,指令匹配的时候通义提问前缀匹配到类似于code1方法,为什么地球是圆的作为参数传入这个函数,但我看现在是拿历史记录实现的 是的,插件函数里面再切割一下前缀就行。last_record就是当前的那条语音数据。 @CZJCC 你可以更新看看 plugins/code1.py 的测试代码,我测试了是可以拿到语音输入的原始内容的。 我原先设想的事用户的话术是”通义提问为什么地球是圆的“,指令匹配的时候通义提问前缀匹配到类似于code1方法,为什么地球是圆的作为参数传入这个函数,但我看现在是拿历史记录实现的 是的,这样比较简单,交给插件里面处理也比较自由。 key_word_dict中的“播放歌曲”口令是不能修改的是吧?因为以前用小爱同学播放歌曲说习惯了,总是触发xiaomusic自动下载歌曲,我想把口令改成“查找歌曲”,这样我当说播放歌曲的时候就调用网易云音乐或者QQ音乐,当我说查找歌曲的时候就先看本地有没有歌曲,没有话就自动下载到本地。 当我先按照config-example.json的模板写好如下配置并重命名为config.json 用以下命令安装docker 似乎自定义的口令只能以插入的方式添加上去,并不能替换掉原来的口令 key_word_dict中的“播放歌曲”口令是不能修改的是吧?因为以前用小爱同学播放歌曲说习惯了,总是触发xiaomusic自动下载歌曲,我想把口令改成“查找歌曲”,这样我当说播放歌曲的时候就调用网易云音乐或者QQ音乐,当我说查找歌曲的时候就先看本地有没有歌曲,没有话就自动下载到本地。 当我先按照config-example.json的模板写好如下配置并重命名为config.json 用以下命令安装docker 似乎自定义的口令只能以插入的方式添加上去,并不能替换掉原来的口令 可以在网页后台设置页面改。 不行,后台设置如图 使用的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的自定义口令 @mogeqian 另外提个 issue 吧,现在应该是不支持删除默认的口令。 好的,已经重开了一个issue #259 支持采用 crontab 的格式配置定时任务,已经支持下面的任务类型: 示例中的意思是: 注意星期一是0,星期二是1,星期日是6。 (0-6 or mon,tue,wed,thu,fri,sat,sun) The first weekday is always monday. 0.3.38版本功能。 支持采用 crontab 的格式配置定时任务,已经支持下面的任务类型: 示例中的意思是: 注意星期一是0,星期二是1,星期日是6。 (0-6 or mon,tue,wed,thu,fri,sat,sun) The first weekday is always monday. 0.3.38版本功能。 docker-compose 修改映射端口会播放失败 从日志看继续调用了 http://10.0.0.4:8090 而不是修改映射的80,还原成 则一切正常 需要添加环境变量 需要添加环境变量 自己走了点弯路,半天才搞明白。补充说明: environment: XIAOMUSIC_PORT: 5678 #就是“5678”可以根据自己要求设置,但要求上下的5678都设置成一个 ports: - 5678:5678 如果换端口,需要3个数字一致,比如 文档类型的我都打开下,方便其他人看到。 docker-compose 中对应关系应该是 以上,docker 环境中基本不存在需要修改 bbbb 的情况,也就是不用设置 XIAOMUSIC_PORT。如果需要修改端口,只需要修改两处 aaaa 如果使用反向代理,则转发 localhost:aaaa,XIAOMUSIC_PUBLIC_PORT 设置成代理的监听端口 cccc 另外,setting 文件存在会覆盖环境变量。启动过之后需要直接修改 settings.json 或者在后台修改 docker-compose 修改映射端口会播放失败 从日志看继续调用了 http://10.0.0.4:8090 而不是修改映射的80,还原成 则一切正常 需要添加环境变量 需要添加环境变量 自己走了点弯路,半天才搞明白。补充说明: environment: XIAOMUSIC_PORT: 5678 #就是“5678”可以根据自己要求设置,但要求上下的5678都设置成一个 ports: - 5678:5678 如果换端口,需要3个数字一致,比如 文档类型的我都打开下,方便其他人看到。 docker-compose 中对应关系应该是 以上,docker 环境中基本不存在需要修改 bbbb 的情况,也就是不用设置 XIAOMUSIC_PORT。如果需要修改端口,只需要修改两处 aaaa 如果使用反向代理,则转发 localhost:aaaa,XIAOMUSIC_PUBLIC_PORT 设置成代理的监听端口 cccc 另外,setting 文件存在会覆盖环境变量。启动过之后需要直接修改 settings.json 或者在后台修改 此功能用于解决 yt-dlp 下载资源失败时使用,比如 ip 被 B站或者 youtube 加入黑名单后才需要使用。 上传的文件用于 yt-dlp 的 原因见 https://github.com/yt-dlp/yt-dlp/wiki/Extractors#exporting-youtube-cookies 0.3.37的版本并没有发现可以开启yt-dlp-cookies 并上传cookies文件的地方,尝试把导出的cookies.txt手工上传到conf目录下,没有生效. 需要等38版本,或者用测试版本,镜像名后面加 :main 需要等38版本,或者用测试版本,镜像名后面加 :main 谢谢 此功能用于解决 yt-dlp 下载资源失败时使用,比如 ip 被 B站或者 youtube 加入黑名单后才需要使用。 上传的文件用于 yt-dlp 的 原因见 https://github.com/yt-dlp/yt-dlp/wiki/Extractors#exporting-youtube-cookies 0.3.37的版本并没有发现可以开启yt-dlp-cookies 并上传cookies文件的地方,尝试把导出的cookies.txt手工上传到conf目录下,没有生效. 需要等38版本,或者用测试版本,镜像名后面加 :main 需要等38版本,或者用测试版本,镜像名后面加 :main 谢谢 NOTE 下面教程可能比较旧,只供参考 redmi小爱触屏音箱8,仍然需要打开“型号兼容模式”才能播放 打开兼容模式后的问题有:每首歌曲播放完毕后都要再从头播放4、5秒才播放下一曲;语音命令小爱同学播放下一曲,它会从头开始播放当前歌曲。 redmi小爱触屏音箱8,仍然需要打开“型号兼容模式”才能播放 打开兼容模式后的问题有:每首歌曲播放完毕后都要再从头播放4、5秒才播放下一曲;语音命令小爱同学播放下一曲,它会从头开始播放当前歌曲。 播放歌曲的接口应该是有点问题,等有设备有开发能力的人来搞吧。 想问下如何利用反向代理,完成使得小爱外网访问nas呢,您能提供一下关键词,我自己去检索学下一下吗 想问下如何利用反向代理,完成使得小爱外网访问nas呢,您能提供一下关键词,我自己去检索学下一下吗 内网穿透,frp能实现,就是把局域网的端口映射成公网的端口。 NOTE 下面教程可能比较旧,只供参考 redmi小爱触屏音箱8,仍然需要打开“型号兼容模式”才能播放 打开兼容模式后的问题有:每首歌曲播放完毕后都要再从头播放4、5秒才播放下一曲;语音命令小爱同学播放下一曲,它会从头开始播放当前歌曲。 redmi小爱触屏音箱8,仍然需要打开“型号兼容模式”才能播放 打开兼容模式后的问题有:每首歌曲播放完毕后都要再从头播放4、5秒才播放下一曲;语音命令小爱同学播放下一曲,它会从头开始播放当前歌曲。 播放歌曲的接口应该是有点问题,等有设备有开发能力的人来搞吧。 想问下如何利用反向代理,完成使得小爱外网访问nas呢,您能提供一下关键词,我自己去检索学下一下吗 想问下如何利用反向代理,完成使得小爱外网访问nas呢,您能提供一下关键词,我自己去检索学下一下吗 内网穿透,frp能实现,就是把局域网的端口映射成公网的端口。 批量下载歌曲依赖的是 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 。 也支持单独下载一个链接只有一首歌曲的。 默认主题 => 设置 =>没有显示找到 歌曲下载工具, 有一个 歌单地址 歌单内容: 输入B站测试地址显示返回无效 等0.3.38版本。 批量下载歌曲依赖的是 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 。 也支持单独下载一个链接只有一首歌曲的。 默认主题 => 设置 =>没有显示找到 歌曲下载工具, 有一个 歌单地址 歌单内容: 输入B站测试地址显示返回无效 等0.3.38版本。 利用 NeteaseCloudMusicApi 获取歌单和播放地址 我在你基础上改了一下,但是我的逻辑不合理 https://github.com/dissipator/xiaomusic 建议通过插件实现或者新增一个页面工具把歌单导出 json 。 歌单的 json 格式见 /issues/78.html 利用 NeteaseCloudMusicApi 获取歌单和播放地址 我在你基础上改了一下,但是我的逻辑不合理 dissipator/xiaomusic 老哥在实现插件了吗?我也急需播放歌单 我诉求是:我用网易云音乐单独新建了一个歌单,我往里面扔歌曲,以更新歌单。希望创建一个自定义的语音命令,让小爱同学随机播放这个歌单里的音乐。然后我通过在米家里执行,比如触发了「我回来了」的智能场景时,就让小爱音箱执行这个自定义的语音命令,就会自动播放我新建的这个歌单里的音乐了。 现在的小爱音箱虽然能勉强实现,但是很垃圾。随机播放的随机性有问题,并且只能选择歌单里的 30 首歌。 (老哥如果没实现的话,我可以尝试搞搞) 我都能直接利用这个直接播放NeteaseCloudMusicApi这上的歌了。在配合unblk,无敌。我就是没设备,还在路上 通过插件实现,非常好,就是不知道怎么开发,有文档我可以尝试一下。 建议通过插件实现或者新增一个页面工具把歌单导出 json 。 歌单的 json 格式见 #78 配置处直接填了api的接口 http://127.0.0.1:3000/playlist/detail?id=12758992226 我是直接再你歌单保存上强改的。 照着你的说明。而且能成功播发 播放处加了一个判断 建议通过插件实现或者新增一个页面工具把歌单导出 json 。 歌单的 json 格式见 #78 你的修改我看了,不太通用。生成json,再用现有的接口提交json更通用。 是的,不通用。最好是用插件实现。 等有空我写个修改歌单内容的插件示例吧。 等有空我写个修改歌单内容的插件示例吧。 不用拉,插件我已经写出来了 发下你的 setting.json 配置吧,方便他人知道怎么配。 我还在测试,设备到了能用了再发吧 也需要网易歌单功能, 坐等教程 setting.json getmy_playlist.py NeteaseCloudMusicApi似乎获取不到播放地址?其他信息倒是有。 看代码是另一个接口获取url的: 看代码是另一个接口获取url的: 是的,我用的是这个接口,https://registry.hub.docker.com/r/gnehs/neteasecloudmusicapi-docker/ 可能网易修改了api,这些获取不了播放地址了。 我倒不是要这个功能,只是感兴趣看看。我不获取,我直接用yt把歌全下载下来播放。 这个不是网易的接口,是NeteaseCloudMusicApi 接口。proxy=HTTP:%2F%2F127.0.0.1:8080"是UnblockNeteaseMusic 解锁灰色; 完整的使用方式和docker 可以到 https://github.com/dissipator/xiaomusic/tree/dev 看README.md;目前没有教程。本人就在群2,有问题可以找我。 利用 NeteaseCloudMusicApi 获取歌单和播放地址 我在你基础上改了一下,但是我的逻辑不合理 https://github.com/dissipator/xiaomusic 建议通过插件实现或者新增一个页面工具把歌单导出 json 。 歌单的 json 格式见 /issues/78.html 利用 NeteaseCloudMusicApi 获取歌单和播放地址 我在你基础上改了一下,但是我的逻辑不合理 dissipator/xiaomusic 老哥在实现插件了吗?我也急需播放歌单 我诉求是:我用网易云音乐单独新建了一个歌单,我往里面扔歌曲,以更新歌单。希望创建一个自定义的语音命令,让小爱同学随机播放这个歌单里的音乐。然后我通过在米家里执行,比如触发了「我回来了」的智能场景时,就让小爱音箱执行这个自定义的语音命令,就会自动播放我新建的这个歌单里的音乐了。 现在的小爱音箱虽然能勉强实现,但是很垃圾。随机播放的随机性有问题,并且只能选择歌单里的 30 首歌。 (老哥如果没实现的话,我可以尝试搞搞) 我都能直接利用这个直接播放NeteaseCloudMusicApi这上的歌了。在配合unblk,无敌。我就是没设备,还在路上 通过插件实现,非常好,就是不知道怎么开发,有文档我可以尝试一下。 建议通过插件实现或者新增一个页面工具把歌单导出 json 。 歌单的 json 格式见 #78 配置处直接填了api的接口 http://127.0.0.1:3000/playlist/detail?id=12758992226 我是直接再你歌单保存上强改的。 照着你的说明。而且能成功播发 播放处加了一个判断 建议通过插件实现或者新增一个页面工具把歌单导出 json 。 歌单的 json 格式见 #78 你的修改我看了,不太通用。生成json,再用现有的接口提交json更通用。 是的,不通用。最好是用插件实现。 等有空我写个修改歌单内容的插件示例吧。 等有空我写个修改歌单内容的插件示例吧。 不用拉,插件我已经写出来了 发下你的 setting.json 配置吧,方便他人知道怎么配。 我还在测试,设备到了能用了再发吧 也需要网易歌单功能, 坐等教程 setting.json getmy_playlist.py NeteaseCloudMusicApi似乎获取不到播放地址?其他信息倒是有。 看代码是另一个接口获取url的: 看代码是另一个接口获取url的: 是的,我用的是这个接口,https://registry.hub.docker.com/r/gnehs/neteasecloudmusicapi-docker/ 可能网易修改了api,这些获取不了播放地址了。 我倒不是要这个功能,只是感兴趣看看。我不获取,我直接用yt把歌全下载下来播放。 这个不是网易的接口,是NeteaseCloudMusicApi 接口。proxy=HTTP:%2F%2F127.0.0.1:8080"是UnblockNeteaseMusic 解锁灰色; 完整的使用方式和docker 可以到 https://github.com/dissipator/xiaomusic/tree/dev 看README.md;目前没有教程。本人就在群2,有问题可以找我。 借楼加个小程序的图 🥳 https://github.com/F-loat/xiaoplayer @F-loat 可以在欢迎页加个链接显示小程序码。 @hanxi 可以的,这样还能自动把 ip 用参数带过来,我有空搞一下 借楼加个小程序的图 🥳 https://github.com/F-loat/xiaoplayer @F-loat 可以在欢迎页加个链接显示小程序码。 @hanxi 可以的,这样还能自动把 ip 用参数带过来,我有空搞一下 M01:在0.3.55版本【型号兼容模式】与【特殊型号获取对话记录】都设为false或true,都可以语音了。 如果【型号兼容模式】为 true,默认UI显示播放中,但音箱没声音。 型号:S12A、LX04、S12 在米家APP可以联动,比如客厅有人自定义指令:播放歌曲、关机...等 而M01无论【型号兼容模式】与【特殊型号获取对话记录】设为false或true,都无法执行任何自定义指令… M01 保持默认设置应该是能语音和播放的吧。自定义指令的功能应该是 M01 本身就不支持,可能属于放弃维护的产品吧。 M01 保持默认设置应该是能语音和播放的吧。自定义指令的功能应该是 M01 本身就不支持,可能属于放弃维护的产品吧。 刚试了用:pause是可以暂停(不过只暂2分钟左右又自己播放了) 只能网页里点关机按钮,或者语音关机。所有型号都一样。 型号:S12A、LX04、S12 只能网页里点关机按钮,或者语音关机。所有型号都一样。 在型号:S12A、LX04、S12 除了能网页里点关机按钮或者语音开关机外,能在米家APP自定义指令进行播放与关机(例如当客厅客有人自定义指令"播放歌曲",无人自定义指令"关机"。M01自定义指令"pause"可以暂停,其他口令不行。 刚又试了一下,用自定义play stop、power off可以停止播放关机,用自定义play music可以播放音乐,可能M01不需要下划线 感谢你的反馈。 M01:在0.3.55版本【型号兼容模式】与【特殊型号获取对话记录】都设为false或true,都可以语音了。 如果【型号兼容模式】为 true,默认UI显示播放中,但音箱没声音。 型号:S12A、LX04、S12 在米家APP可以联动,比如客厅有人自定义指令:播放歌曲、关机...等 而M01无论【型号兼容模式】与【特殊型号获取对话记录】设为false或true,都无法执行任何自定义指令… M01 保持默认设置应该是能语音和播放的吧。自定义指令的功能应该是 M01 本身就不支持,可能属于放弃维护的产品吧。 M01 保持默认设置应该是能语音和播放的吧。自定义指令的功能应该是 M01 本身就不支持,可能属于放弃维护的产品吧。 刚试了用:pause是可以暂停(不过只暂2分钟左右又自己播放了) 只能网页里点关机按钮,或者语音关机。所有型号都一样。 型号:S12A、LX04、S12 只能网页里点关机按钮,或者语音关机。所有型号都一样。 在型号:S12A、LX04、S12 除了能网页里点关机按钮或者语音开关机外,能在米家APP自定义指令进行播放与关机(例如当客厅客有人自定义指令"播放歌曲",无人自定义指令"关机"。M01自定义指令"pause"可以暂停,其他口令不行。 刚又试了一下,用自定义play stop、power off可以停止播放关机,用自定义play music可以播放音乐,可能M01不需要下划线 感谢你的反馈。 本教程同步更新于最新版的xiaomusic ARM架构自己想办法获取镜像 点名Z2PRO 接着弹出如图所示的页面,耐心等待下载完成。 下载完成后切换到 本地镜像 选项卡 剩余步骤与国内环境相同,见 部署镜像 注意: 友情提醒: 尽量不要修改容器端口号,否则要到配置文件目录修改对应的 友情提醒: 1.请关闭代理,打开浏览器,地址栏输入 极空间IP:本地端口号 如 注意: 点击 设置 按钮进入设置页面 输入小米账号、小米密码、XIAOMUSIC_HOSTNAME(IP或域名):、外网访问端口,滑到页面最下方点击 保存 注意: 4.如果以上步骤没错,你将在设置中心看见设备列表 xiaomusic.txt 既然你映射的5678,为什么你又在那把监听端口改成11999? 我的教程里面全程没有写要修改监听端口 我没讲清楚。我试了两种极空间的桥接和host模式。桥接模式。我按照教程走的。报错如图 提到的第二个问题和日志,是我将网络模式改为host的情况,能连上音箱,但是没法使用语音控制。 我没讲清楚。我试了两种极空间的桥接和host模式。桥接模式。我按照教程走的。报错如图 提到的第二个问题和日志,是我将网络模式改为host的情况,能连上音箱,但是没法使用语音控制。 把外网访问端口改成5678 可以连接上网页控制了,但是语音控制仍然不行。已经按照FAQ问题集合 #99 重启docker。 这是日志, xiaomusic.txt 可以连接上网页控制了,但是语音控制仍然不行。已经按照FAQ问题集合 #99 重启docker。 这是日志, xiaomusic.txt 你的设置 hostname='192.168.31.165', port=8090, public_port=5678, 后台的ip 192.168.31.143 检查一下你的地址 有可能是你的ip地址改变了 可以连接上网页控制了,但是语音控制仍然不行。已经按照FAQ问题集合 #99 重启docker。 这是日志, 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都绑定了。 大佬,这种情况该怎么解决呢。所有设置都是默认,没修改哈。 确实是变了。192.168.31.143是我电脑的ip。 hostname='192.168.31.165'是极空间的。小爱是192.168.31.77。现在我的网络结构是电脑连nas上的istoreos旁路由。nas直连主路由,小爱直连主路由。主路由dhcp都绑定了。 大佬,这种情况该怎么解决呢。所有设置都是默认,没修改哈。 容器的网络模式改成bridge试试呢 没解决的话你加群明天再详聊吧 确实是变了。192.168.31.143是我电脑的ip。 hostname='192.168.31.165'是极空间的。小爱是192.168.31.77。现在我的网络结构是电脑连nas上的istoreos旁路由。nas直连主路由,小爱直连主路由。主路由dhcp都绑定了。 大佬,这种情况该怎么解决呢。所有设置都是默认,没修改哈。 容器的网络模式改成bridge试试呢 没解决的话你加群明天再详聊吧 辛苦了,这么晚还在回复。我一直用的bridge。大佬,群号多少,不行我明天群里问吧。 确实是变了。192.168.31.143是我电脑的ip。 hostname='192.168.31.165'是极空间的。小爱是192.168.31.77。现在我的网络结构是电脑连nas上的istoreos旁路由。nas直连主路由,小爱直连主路由。主路由dhcp都绑定了。 大佬,这种情况该怎么解决呢。所有设置都是默认,没修改哈。 容器的网络模式改成bridge试试呢 没解决的话你加群明天再详聊吧 辛苦了,这么晚还在回复。我一直用的bridge。大佬,群号多少,不行我明天群里问吧。 确实是变了。192.168.31.143是我电脑的ip。 hostname='192.168.31.165'是极空间的。小爱是192.168.31.77。现在我的网络结构是电脑连nas上的istoreos旁路由。nas直连主路由,小爱直连主路由。主路由dhcp都绑定了。 大佬,这种情况该怎么解决呢。所有设置都是默认,没修改哈。 容器的网络模式改成bridge试试呢 没解决的话你加群明天再详聊吧 辛苦了,这么晚还在回复。我一直用的bridge。大佬,群号多少,不行我明天群里问吧。 已自查解决。问题是账号问题。绑定设备的一定是创建者,不能是管理员。 本教程同步更新于最新版的xiaomusic ARM架构自己想办法获取镜像 点名Z2PRO 接着弹出如图所示的页面,耐心等待下载完成。 下载完成后切换到 本地镜像 选项卡 剩余步骤与国内环境相同,见 部署镜像 注意: 友情提醒: 尽量不要修改容器端口号,否则要到配置文件目录修改对应的 友情提醒: 1.请关闭代理,打开浏览器,地址栏输入 极空间IP:本地端口号 如 注意: 点击 设置 按钮进入设置页面 输入小米账号、小米密码、XIAOMUSIC_HOSTNAME(IP或域名):、外网访问端口,滑到页面最下方点击 保存 注意: 4.如果以上步骤没错,你将在设置中心看见设备列表 xiaomusic.txt 既然你映射的5678,为什么你又在那把监听端口改成11999? 我的教程里面全程没有写要修改监听端口 我没讲清楚。我试了两种极空间的桥接和host模式。桥接模式。我按照教程走的。报错如图 提到的第二个问题和日志,是我将网络模式改为host的情况,能连上音箱,但是没法使用语音控制。 我没讲清楚。我试了两种极空间的桥接和host模式。桥接模式。我按照教程走的。报错如图 提到的第二个问题和日志,是我将网络模式改为host的情况,能连上音箱,但是没法使用语音控制。 把外网访问端口改成5678 可以连接上网页控制了,但是语音控制仍然不行。已经按照FAQ问题集合 #99 重启docker。 这是日志, xiaomusic.txt 可以连接上网页控制了,但是语音控制仍然不行。已经按照FAQ问题集合 #99 重启docker。 这是日志, xiaomusic.txt 你的设置 hostname='192.168.31.165', port=8090, public_port=5678, 后台的ip 192.168.31.143 检查一下你的地址 有可能是你的ip地址改变了 可以连接上网页控制了,但是语音控制仍然不行。已经按照FAQ问题集合 #99 重启docker。 这是日志, 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都绑定了。 大佬,这种情况该怎么解决呢。所有设置都是默认,没修改哈。 确实是变了。192.168.31.143是我电脑的ip。 hostname='192.168.31.165'是极空间的。小爱是192.168.31.77。现在我的网络结构是电脑连nas上的istoreos旁路由。nas直连主路由,小爱直连主路由。主路由dhcp都绑定了。 大佬,这种情况该怎么解决呢。所有设置都是默认,没修改哈。 容器的网络模式改成bridge试试呢 没解决的话你加群明天再详聊吧 确实是变了。192.168.31.143是我电脑的ip。 hostname='192.168.31.165'是极空间的。小爱是192.168.31.77。现在我的网络结构是电脑连nas上的istoreos旁路由。nas直连主路由,小爱直连主路由。主路由dhcp都绑定了。 大佬,这种情况该怎么解决呢。所有设置都是默认,没修改哈。 容器的网络模式改成bridge试试呢 没解决的话你加群明天再详聊吧 辛苦了,这么晚还在回复。我一直用的bridge。大佬,群号多少,不行我明天群里问吧。 确实是变了。192.168.31.143是我电脑的ip。 hostname='192.168.31.165'是极空间的。小爱是192.168.31.77。现在我的网络结构是电脑连nas上的istoreos旁路由。nas直连主路由,小爱直连主路由。主路由dhcp都绑定了。 大佬,这种情况该怎么解决呢。所有设置都是默认,没修改哈。 容器的网络模式改成bridge试试呢 没解决的话你加群明天再详聊吧 辛苦了,这么晚还在回复。我一直用的bridge。大佬,群号多少,不行我明天群里问吧。 确实是变了。192.168.31.143是我电脑的ip。 hostname='192.168.31.165'是极空间的。小爱是192.168.31.77。现在我的网络结构是电脑连nas上的istoreos旁路由。nas直连主路由,小爱直连主路由。主路由dhcp都绑定了。 大佬,这种情况该怎么解决呢。所有设置都是默认,没修改哈。 容器的网络模式改成bridge试试呢 没解决的话你加群明天再详聊吧 辛苦了,这么晚还在回复。我一直用的bridge。大佬,群号多少,不行我明天群里问吧。 已自查解决。问题是账号问题。绑定设备的一定是创建者,不能是管理员。 设置页面新增一个输入框配置json格式,可以定义配置音乐源,可以是电台或者其他的m3u8格式的。 再加一个输入框配置这个json文件的url,点击获取按钮把url对应的json内容填充到json输入框,方便直接使用别人分享的歌单。 比如这样的链接 已经测试能播放出来: 预计歌单格式是这样的, type 为 radio 作为电台的设定,会一直播放当前电台,不会播放下一首。 这里分享一个让 chatgpt 写 python 脚本来生成歌单的例子 https://chatgpt.com/share/6751c019-74c0-800a-a978-a20c636d4464 。 可以使用 gist 来配置和分享 json 文件,比如 https://gist.github.com/hanxi/dda82d964a28f8110f8fba81c3ff8314 点击 raw 得到 json 文件的链接 https://gist.githubusercontent.com/hanxi/dda82d964a28f8110f8fba81c3ff8314/raw/8787844d81c39dbfaad4e37954dd449d8bba5728/example.json 当然还可以用其他工具分享json文件,比如 github 和国内的 gitee 。 已经有工具支持将 m3u 格式的电台文件转为网络歌单格式,见 /issues/88.html 欢迎有兴趣的朋友制作其他格式转换工具,比如网易歌单那一类的。 按照教程设置后 播放列表选择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后音悦台 失败 设备掉线了 怎么获取 他正在播放什么?或者是播放进度 ?播放列表?我想给他加进去 怎么获取 他正在播放什么?或者是播放进度 ?播放列表?我想给他加进去 这个接口 加不加"type":"radio"都会一直播放不切换到下一首歌是为什么呢 加不加"type":"radio"都会一直播放不切换到下一首歌是为什么呢 发出来看看? 加不加"type":"radio"都会一直播放不切换到下一首歌是为什么呢 发出来看看? 仔细研究了一下,发现确实存在问题,不过是另一种情况,下面单说 加不加"type":"radio"都会一直播放不切换到下一首歌是为什么呢 发出来看看? 经过实验发现,本地生成的m3u用potplayer播放正常 但是alist链接就不正常,alist生成的m3u格式如下 设置页面新增一个输入框配置json格式,可以定义配置音乐源,可以是电台或者其他的m3u8格式的。 再加一个输入框配置这个json文件的url,点击获取按钮把url对应的json内容填充到json输入框,方便直接使用别人分享的歌单。 比如这样的链接 已经测试能播放出来: 预计歌单格式是这样的, type 为 radio 作为电台的设定,会一直播放当前电台,不会播放下一首。 这里分享一个让 chatgpt 写 python 脚本来生成歌单的例子 https://chatgpt.com/share/6751c019-74c0-800a-a978-a20c636d4464 。 可以使用 gist 来配置和分享 json 文件,比如 https://gist.github.com/hanxi/dda82d964a28f8110f8fba81c3ff8314 点击 raw 得到 json 文件的链接 https://gist.githubusercontent.com/hanxi/dda82d964a28f8110f8fba81c3ff8314/raw/8787844d81c39dbfaad4e37954dd449d8bba5728/example.json 当然还可以用其他工具分享json文件,比如 github 和国内的 gitee 。 已经有工具支持将 m3u 格式的电台文件转为网络歌单格式,见 /issues/88.html 欢迎有兴趣的朋友制作其他格式转换工具,比如网易歌单那一类的。 按照教程设置后 播放列表选择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后音悦台 失败 设备掉线了 怎么获取 他正在播放什么?或者是播放进度 ?播放列表?我想给他加进去 怎么获取 他正在播放什么?或者是播放进度 ?播放列表?我想给他加进去 这个接口 加不加"type":"radio"都会一直播放不切换到下一首歌是为什么呢 加不加"type":"radio"都会一直播放不切换到下一首歌是为什么呢 发出来看看? 加不加"type":"radio"都会一直播放不切换到下一首歌是为什么呢 发出来看看? 仔细研究了一下,发现确实存在问题,不过是另一种情况,下面单说 加不加"type":"radio"都会一直播放不切换到下一首歌是为什么呢 发出来看看? 经过实验发现,本地生成的m3u用potplayer播放正常 但是alist链接就不正常,alist生成的m3u格式如下 比如可以找到这样的 m3u 电台文件: https://github.com/YueChan/Live/blob/main/Radio.m3u 转换m3u链接: http://127.0.0.1:8090/static/m3u.html http://127.0.0.1:8090/playurl?did=mydid&url=https://a.com/test.m3u 如果能支持 这么播放m3u 就太完美了 希望能够支持,谢谢作者。 http://127.0.0.1:8090/playurl?did=mydid&url=https://a.com/test.m3u 如果能支持 这么播放m3u 就太完美了 希望能够支持,谢谢作者。 不想破坏现有接口,可以考虑用插件的方式来实现。 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.m3uhttps://raw.githubusercontent.com/imDazui/Tvlist-awesome-m3u-m3u8/master/m3u/广播电台2021.m3u 检查一下是不是 ipv6 的地址?小米音箱不支持 ipv6 检查一下是不是 ipv6 的地址?小米音箱不支持 ipv6 是我硬件设置的问题 重新安装了 解决! 比如可以找到这样的 m3u 电台文件: https://github.com/YueChan/Live/blob/main/Radio.m3u 转换m3u链接: http://127.0.0.1:8090/static/m3u.html http://127.0.0.1:8090/playurl?did=mydid&url=https://a.com/test.m3u 如果能支持 这么播放m3u 就太完美了 希望能够支持,谢谢作者。 http://127.0.0.1:8090/playurl?did=mydid&url=https://a.com/test.m3u 如果能支持 这么播放m3u 就太完美了 希望能够支持,谢谢作者。 不想破坏现有接口,可以考虑用插件的方式来实现。 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.m3uhttps://raw.githubusercontent.com/imDazui/Tvlist-awesome-m3u-m3u8/master/m3u/广播电台2021.m3u 检查一下是不是 ipv6 的地址?小米音箱不支持 ipv6 检查一下是不是 ipv6 的地址?小米音箱不支持 ipv6 是我硬件设置的问题 重新安装了 解决! docker 方式部署默认推荐使用环境变量的方式来配置参数,如果是自己用命令行启动,目前支持的参数配置比较少,但是是支持 使用 pip 安装 xiaomusic 【0.1.83版本才支持 pip 安装】 依赖的 ffmpeg 需要自己安装。 仓库中有个 config-example.json 文件,可以把这个文件拷贝为 config.json 然后修改 config.json 里的配置,再用下面的命令启动。 默认的 config.json 模板如下: 如果采用 docker compose 启动想用 config.json 的配置方式,可以这样配: 主要就是把 config.json 文件映射进容器和传 正需要,有配置文件方便多了 ffmpeg 如果是用 apt install 这类系统工具安装的,默认会在 /usr/bin 目录下,ffmpeg_location 这个参数就需要设置为 /usr/bin . 目前 armv7 cpu 的 docker 镜像里的 ffmpeg 有问题,最好是用 pip 方式安装运行。 ffmpeg 如果是用 apt install 这类系统工具安装的,默认会在 /usr/bin 目录下,ffmpeg_location 这个参数就需要设置为 /usr/bin . 目前 armv7 cpu 的 docker 镜像里的 ffmpeg 有问题,最好是用 pip 方式安装运行。 armv7 问题已经解决。 docker 方式部署默认推荐使用环境变量的方式来配置参数,如果是自己用命令行启动,目前支持的参数配置比较少,但是是支持 使用 pip 安装 xiaomusic 【0.1.83版本才支持 pip 安装】 依赖的 ffmpeg 需要自己安装。 仓库中有个 config-example.json 文件,可以把这个文件拷贝为 config.json 然后修改 config.json 里的配置,再用下面的命令启动。 默认的 config.json 模板如下: 如果采用 docker compose 启动想用 config.json 的配置方式,可以这样配: 主要就是把 config.json 文件映射进容器和传 正需要,有配置文件方便多了 ffmpeg 如果是用 apt install 这类系统工具安装的,默认会在 /usr/bin 目录下,ffmpeg_location 这个参数就需要设置为 /usr/bin . 目前 armv7 cpu 的 docker 镜像里的 ffmpeg 有问题,最好是用 pip 方式安装运行。 ffmpeg 如果是用 apt install 这类系统工具安装的,默认会在 /usr/bin 目录下,ffmpeg_location 这个参数就需要设置为 /usr/bin . 目前 armv7 cpu 的 docker 镜像里的 ffmpeg 有问题,最好是用 pip 方式安装运行。 armv7 问题已经解决。 下面是播放音乐和关机两个示例。只要在 web 页面上能看到的功能,都有对应的 http 请求接口,都可以用来配置捷径。 没有评论。 链接到 GitHub Issue 下面是播放音乐和关机两个示例。只要在 web 页面上能看到的功能,都有对应的 http 请求接口,都可以用来配置捷径。 没有评论。 链接到 GitHub Issue NOTE 这个 issue 用来总结报错日志和对应的解决方法。 填写 docker 主机的 ip ,不是小爱音箱的ip,一般就是网页访问的后台地址里的 ip ,只要确保 ip 和小爱音箱在一个局域网内就行。 同时也支持 xx.xx.com 的域名格式,用于配置反代供外网访问,比如小爱音箱和 docker 主机不在同一个局域网内。 表现就是 后台看不到设备列表 ,日志中会有对应的报错。 这个有专门的讨论,见 </issues/16.html> ,一般是因为开了加速代理,关代理再尝试即可。也可以试试在局域网设备里的米家app上退出再重新登录一下。 在小米官网 www.mi.com 登陆过人脸或滑块验证基本上能解决 99%的 login failed 问题。 来自 @yilikun 的友情提示: 这种情况是拉取不到对话记录导致的。 如果是首次在网页后台保存 did 后需要重启一次容器。 其他情况可能是被限制拉取对话记录次数,也可以尝试重启容器。 还有一种情况是配错了唤醒口令,可以在小爱音箱app里查看对话记录,也可以查看 xiaomusic 的日志。默认口令前缀是【播放歌曲】,没有这个前缀是无法识别的,说播放音乐是没用的,除非自己设置其他口令词。 已知 可以点击播放链接按钮,看看默认的那个链接能否播放。 已知部分触屏版不能播放可以在后台设置 【型号兼容模式】为 true 试试。 其他情况可能是 XIAOMUSIC_HOSTNAME 配错了地址,不是 docker 主机地址会导致小爱音箱无法访问到,而且需要和小爱音箱在同一个局域网下的地址。还有可能是端口配错了,修改了默认 8090 端口映射,需要同步修改其他参数,可以翻阅端口修改的文档。 如果端口不是8090,首次启动没配好端口的话,需要手动修改setting.json文件里的端口,或者把setting.json文件删除重新配置,或者在后台修改监听端口后重启。 可以点击播放歌曲后,查看日志里的歌曲链接,放到浏览器里打开试试,不能访问说明是端口或者hostname问题,如果是异地访问,需要把 hostname 修改为外网ip或者域名,需要注意音箱只支持访问ipv4,不能是ipv6的公网。 如果是配了公网反代端口,注意区分是 http 还是 https ,如果是 https 的,配置 XIAOMUSIC_HOSTNAME 时需要加上 因设备差异和文件格式差异,已知部分设备不支持 flac 格式,比如 L05B L05C 。 请更换镜像源或者使用代理。不同环境更换镜像源的方式不一样,可以网上搜索自己的 NAS 如何更换镜像源。 已经可以通过 DaoCloud 拉取镜像。 一般是 docker 版本太低,或者系统限制了 docker 使用的 cpu 数量,可以尝试升级 docker 到最新版本。 一般会出现下面这样的日志,表现就是设置页面看不到设备列表。 可以尝试把主机的 DNS 设为 223.5.5.5 之后重启 docker 主机。 如果还是不行可以把 docker 的网络模式改成 host 模式。 这个问题新版本已经解决,如果还存在请反馈。 ~目前0.3.x版本还存在这个问题没有完全解决,可以暂时回退到0.2.0版本继续使用。~ 冒号左边的 如果是 docker 部署的,建议不要去修改 web 后台里的音乐路径和配置路径等等所有路径除非你熟悉 docker 的目录映射机制。 可以,每层的每个目录会识别为一个播放列表。 新版本不需要手动获取配置 did,不需要配置环境变量,直接在 web 后台填入小米账号密码保存后会自动获取到 did ,然后勾选对应的设备即可。 报错日志大致如下: 原因是没有配置 did ,或者 did 配置错误。可以到设置页面选择正确的设备类型和 did 然后保存。 在设置页面重新保存一下,或者删除 setting.json 文件,重新在后台设置一次。 设计原理就是每秒不停的抓取对话记录,然后再打断小爱音箱自带的处理流程。整个过程下来会有延时,所以打断不会很及时,做不到无缝衔接。 安装的最新版本,即使没有使用,日志一直在不停的刷新,示例: [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 之前的版本没有这个问题,这个是设置错误?还是本来就如此呢? 安装的最新版本,即使没有使用,日志一直在不停的刷新,示例: [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 之前的版本没有这个问题,这个是设置错误?还是本来就如此呢? 正常现象,现在默认把调试日志打开了,可以在后台设置关闭调试日志的。 大佬,docker安装提示缺少很多module,我一个个在dockerfilie里加上,最后卡在miservice装不上了~ @Dx0123 其实不用手动安装依赖的,直接一行应该就行。 @Dx0123 其实不用手动安装依赖的,直接一行应该就行。 我直接用pip安装好之后,执行仍然有缺少的依赖,和docker里缺的一样。截图的module安装了之后还会有其他依赖缺失 @Dx0123 你的python版本是不是有问题?你参考下项目里的Dockerfile,用同一个From镜像试试。 有时候指令已停止,可是一会儿,又自动播放下一首,根本就停不下来。需要重启容器才能正常 点关机按钮也不行吗? 有时候指令已停止,可是一会儿,又自动播放下一首,根本就停不下来。需要重启容器才能正常 点关机按钮也不行吗? 是的,说关机,点关机,暂停都不行。只能重启容器。 有没有日志看看? 为什么我的没有显示设备? 为什么我的没有显示设备? 应该是登陆失败,可以查看一下日志。 楼主您好,请问这个我需要怎么处理? 楼主您好,请问这个我需要怎么处理? 删掉重新配置一下试试。 会不会跟网络不稳定有关系?我都弄了几次还是这样子 ------------------ 原始邮件 ------------------ 发件人: "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: @.***> 会不会跟网络不稳定有关系?我都弄了几次还是这样子 … ------------------ 原始邮件 ------------------ 发件人: "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: @.***> 有可能的,用代理试试。 定制的时候,"全部"和”所有歌曲"的区别,帮助有需要的朋友: 歌单中 "全部" 指的是 所有歌单中歌曲,但不包括“歌单内容”配置(http://127.0.0.1:8090/static/setting.html)中的电台 "type": "radio",的 ”所有歌曲" 指的是下载的歌曲,在download文件夹里 设置页面输入小米的账号密码后,再勾选一个设备。 设置页面输入小米的账号密码后,再勾选一个设备。 设置页面里没有勾选的选项 设置页面输入小米的账号密码后,再勾选一个设备。 设置页面输入小米的账号密码后,再勾选一个设备。 设置页面里没有勾选的选项 设置页面输入小米的账号密码后,再勾选一个设备。 显示未检测到设备,设备型号是MDZ-25-DA @agigogo 应该是登陆失败了,局域网的手机重新登陆一下小爱音箱app吧。 @agigogo 应该是登陆失败了,局域网的手机重新登陆一下小爱音箱app吧。 一直都是用米家APP来控制小爱音箱,那要下个小爱音响APP试一试 @agigogo 应该是登陆失败了,局域网的手机重新登陆一下小爱音箱app吧。 搞定了,小爱音箱app重新绑定就可以了。真6~ 一首歌结束不能自动切到下一首,随机播放模式,日志中显示下一曲定时器不见了....这个是咋回事啊 一首歌结束不能自动切到下一首,随机播放模式,日志中显示下一曲定时器不见了....这个是咋回事啊 可能是音乐文件有问题,获取歌曲长度失败,你可以把歌曲文件上传一下给我测试。 或者搜下日志里有没有 不会设置下一首歌的定时器 这个 或者搜下日志里有没有 不会设置下一首歌的定时器 这个 有这个,应该是我的文件格式问题,晚上我处理一下再试试 istore系统可以拉取创建镜像,但是无法启动,错误提示见图一,求助大佬!路由器信息见图二 在群晖使用docker安装的,只能通过重装来升级到最新版本吗?有快捷的一键升级吗 在群晖使用docker安装的,只能通过重装来升级到最新版本吗?有快捷的一键升级吗 不会命令行,就用这个工具吧。 https://github.com/onlyLTY/dockerCopilot 谢谢您的工具,我刚去群晖的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: @.***> 运行时遇到下面问题,请问要怎么排查? 运行时遇到下面问题,请问要怎么排查? 看不出来 请问登录验证失败要怎么定位?小米登录邮箱,还是小米id 都报同样的错。 请问登录验证失败要怎么定位?小米登录邮箱,还是小米id 都报同样的错。 上面给出了4个办法都试过了吗?局域网登陆mi.com了? 设置web访问登录时,账号密码设置完之后登不进去了,账号名称用的中文的可以么 设置web访问登录时,账号密码设置完之后登不进去了,账号名称用的中文的可以么 不确定是否可以,你可以考虑setting.json里的内容,不行就修改再重启。 运行后会在音乐目录下生成一个tmp文件夹,如何指定路径,因为还有其应用访问音乐路径,不希望其识别tmp目录下的音乐。 运行后会在音乐目录下生成一个tmp文件夹,如何指定路径,因为还有其应用访问音乐路径,不希望其识别tmp目录下的音乐。 忽略目录(逗号分割) 改成 运行后会在音乐目录下生成一个tmp文件夹,如何指定路径,因为还有其应用访问音乐路径,不希望其识别tmp目录下的音乐。 忽略目录(逗号分割) 改成 抱歉,是我没有说清楚,是运行xiaomusic后会在音乐路径下生成tmp文件夹, 但我同时还在用navidrome,也会访问音乐目录,他会把tmp目录下的歌曲也扫描进去,所以想移动tmp目录。 navidrome没找到在哪里可以设置,忽略这个文件夹 运行后会在音乐目录下生成一个tmp文件夹,如何指定路径,因为还有其应用访问音乐路径,不希望其识别tmp目录下的音乐。 忽略目录(逗号分割) 改成 抱歉,是我没有说清楚,是运行xiaomusic后会在音乐路径下生成tmp文件夹, 但我同时还在用navidrome,也会访问音乐目录,他会把tmp目录下的歌曲也扫描进去,所以想移动tmp目录。 navidrome没找到在哪里可以设置,忽略这个文件夹 提个新 issue 吧,有空加下配置项。 问题一:打不开的地址是哪个? 问题二:可以点击刷新列表按钮试试。 是关闭了网络搜索了吗?现在的搜索只有本地数据没有网络歌曲了? 默认主题有歌曲 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: @.***> 是关闭了网络搜索了吗?现在的搜索只有本地数据没有网络歌曲了? 等 yt-dlp 修复。 默认主题有歌曲 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: @.***> 需要刷新缓存 请问网络搜索功能修复了吗?感谢! 请问网络搜索功能修复了吗?感谢! 修复了。 请问网络搜索功能修复了吗?感谢! 修复了。 我已经更新到最新版0.3.55,音箱是LX04触屏音箱,但是使用指令对小爱说“播放歌曲。。。“还是通过音箱绑定的QQ音乐播放,解绑了QQ音乐账号,就会提示先让我绑定账号(包括播放本地歌曲指令),感觉音箱还没跟docker连接上(已经重启过容器)。但是通过8090端口进入后台,搜索歌曲,播放,调节声音大小,单曲、随机所有的功能都可以通过按键实现,唯独不能通过语音跟小爱对话播放我指定的内容,请问这个是什么问题,感谢! 请问网络搜索功能修复了吗?感谢! 修复了。 我已经更新到最新版0.3.55,音箱是LX04触屏音箱,但是使用指令对小爱说“播放歌曲。。。“还是通过音箱绑定的QQ音乐播放,解绑了QQ音乐账号,就会提示先让我绑定账号(包括播放本地歌曲指令),感觉音箱还没跟docker连接上(已经重启过容器)。但是通过8090端口进入后台,搜索歌曲,播放,调节声音大小,单曲、随机所有的功能都可以通过按键实现,唯独不能通过语音跟小爱对话播放我指定的内容,请问这个是什么问题,感谢! 贴下你的 setting.json 文件看看吧,把里面的账号密码删除。 请问网络搜索功能修复了吗?感谢! 修复了。 我已经更新到最新版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 } get_ask_by_mina 【特殊型号获取对话记录】这个需要设置为 false get_ask_by_mina 【特殊型号获取对话记录】这个需要设置为 false 已经重新设置并重启容器,尝试还是不行,会不会是这个触屏音箱不支持? get_ask_by_mina 【特殊型号获取对话记录】这个需要设置为 false 已经重新设置并重启容器,尝试还是不行,会不会是这个触屏音箱不支持? 或者是在创建容器的时候,我的小米账号填写了我的手机号码,应该需要填写实际的小米账号?因为手机号码对应的小米账号,和输入对应的密码,都是可以登陆的,但是我不知道有什么区别,就把手机号码输入进去了 get_ask_by_mina 【特殊型号获取对话记录】这个需要设置为 false 已经重新设置并重启容器,尝试还是不行,会不会是这个触屏音箱不支持? 或者是在创建容器的时候,我的小米账号填写了我的手机号码,应该需要填写实际的小米账号?因为手机号码对应的小米账号,和输入对应的密码,都是可以登陆的,但是我不知道有什么区别,就把手机号码输入进去了 我重新创建容器,问题解决了,主要是两个地方改变了,一个是上面的小米账号的问题,另外一个是关于conf和music这两个文件夹,这次我都把他们放在/container/xiaomusic下,即/container/xiaomusic/conf(music),分别对应两个容器和主机app/conf(music),问题就解决了。之前我是分开在两个文件夹的。 0 B的APE文件, 建议直接跳过播放 新人请教:使用DOCKER镜像 或者 composer安装 如何升级到最新版本呢?是删除镜像再重新拉取吗 新人请教:使用DOCKER镜像 或者 composer安装 如何升级到最新版本呢?是删除镜像再重新拉取吗 我在阿里云的服务器上运行的docker,我登录了小米账号,但是 操控面板 里面 不显示我的设备。音箱是pro LX06 NOTE 这个 issue 用来总结报错日志和对应的解决方法。 填写 docker 主机的 ip ,不是小爱音箱的ip,一般就是网页访问的后台地址里的 ip ,只要确保 ip 和小爱音箱在一个局域网内就行。 同时也支持 xx.xx.com 的域名格式,用于配置反代供外网访问,比如小爱音箱和 docker 主机不在同一个局域网内。 表现就是 后台看不到设备列表 ,日志中会有对应的报错。 这个有专门的讨论,见 </issues/16.html> ,一般是因为开了加速代理,关代理再尝试即可。也可以试试在局域网设备里的米家app上退出再重新登录一下。 在小米官网 www.mi.com 登陆过人脸或滑块验证基本上能解决 99%的 login failed 问题。 来自 @yilikun 的友情提示: 这种情况是拉取不到对话记录导致的。 如果是首次在网页后台保存 did 后需要重启一次容器。 其他情况可能是被限制拉取对话记录次数,也可以尝试重启容器。 还有一种情况是配错了唤醒口令,可以在小爱音箱app里查看对话记录,也可以查看 xiaomusic 的日志。默认口令前缀是【播放歌曲】,没有这个前缀是无法识别的,说播放音乐是没用的,除非自己设置其他口令词。 已知 可以点击播放链接按钮,看看默认的那个链接能否播放。 已知部分触屏版不能播放可以在后台设置 【型号兼容模式】为 true 试试。 其他情况可能是 XIAOMUSIC_HOSTNAME 配错了地址,不是 docker 主机地址会导致小爱音箱无法访问到,而且需要和小爱音箱在同一个局域网下的地址。还有可能是端口配错了,修改了默认 8090 端口映射,需要同步修改其他参数,可以翻阅端口修改的文档。 如果端口不是8090,首次启动没配好端口的话,需要手动修改setting.json文件里的端口,或者把setting.json文件删除重新配置,或者在后台修改监听端口后重启。 可以点击播放歌曲后,查看日志里的歌曲链接,放到浏览器里打开试试,不能访问说明是端口或者hostname问题,如果是异地访问,需要把 hostname 修改为外网ip或者域名,需要注意音箱只支持访问ipv4,不能是ipv6的公网。 如果是配了公网反代端口,注意区分是 http 还是 https ,如果是 https 的,配置 XIAOMUSIC_HOSTNAME 时需要加上 因设备差异和文件格式差异,已知部分设备不支持 flac 格式,比如 L05B L05C 。 请更换镜像源或者使用代理。不同环境更换镜像源的方式不一样,可以网上搜索自己的 NAS 如何更换镜像源。 已经可以通过 DaoCloud 拉取镜像。 一般是 docker 版本太低,或者系统限制了 docker 使用的 cpu 数量,可以尝试升级 docker 到最新版本。 一般会出现下面这样的日志,表现就是设置页面看不到设备列表。 可以尝试把主机的 DNS 设为 223.5.5.5 之后重启 docker 主机。 如果还是不行可以把 docker 的网络模式改成 host 模式。 这个问题新版本已经解决,如果还存在请反馈。 ~目前0.3.x版本还存在这个问题没有完全解决,可以暂时回退到0.2.0版本继续使用。~ 冒号左边的 如果是 docker 部署的,建议不要去修改 web 后台里的音乐路径和配置路径等等所有路径除非你熟悉 docker 的目录映射机制。 可以,每层的每个目录会识别为一个播放列表。 新版本不需要手动获取配置 did,不需要配置环境变量,直接在 web 后台填入小米账号密码保存后会自动获取到 did ,然后勾选对应的设备即可。 报错日志大致如下: 原因是没有配置 did ,或者 did 配置错误。可以到设置页面选择正确的设备类型和 did 然后保存。 在设置页面重新保存一下,或者删除 setting.json 文件,重新在后台设置一次。 设计原理就是每秒不停的抓取对话记录,然后再打断小爱音箱自带的处理流程。整个过程下来会有延时,所以打断不会很及时,做不到无缝衔接。 安装的最新版本,即使没有使用,日志一直在不停的刷新,示例: [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 之前的版本没有这个问题,这个是设置错误?还是本来就如此呢? 安装的最新版本,即使没有使用,日志一直在不停的刷新,示例: [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 之前的版本没有这个问题,这个是设置错误?还是本来就如此呢? 正常现象,现在默认把调试日志打开了,可以在后台设置关闭调试日志的。 大佬,docker安装提示缺少很多module,我一个个在dockerfilie里加上,最后卡在miservice装不上了~ @Dx0123 其实不用手动安装依赖的,直接一行应该就行。 @Dx0123 其实不用手动安装依赖的,直接一行应该就行。 我直接用pip安装好之后,执行仍然有缺少的依赖,和docker里缺的一样。截图的module安装了之后还会有其他依赖缺失 @Dx0123 你的python版本是不是有问题?你参考下项目里的Dockerfile,用同一个From镜像试试。 有时候指令已停止,可是一会儿,又自动播放下一首,根本就停不下来。需要重启容器才能正常 点关机按钮也不行吗? 有时候指令已停止,可是一会儿,又自动播放下一首,根本就停不下来。需要重启容器才能正常 点关机按钮也不行吗? 是的,说关机,点关机,暂停都不行。只能重启容器。 有没有日志看看? 为什么我的没有显示设备? 为什么我的没有显示设备? 应该是登陆失败,可以查看一下日志。 楼主您好,请问这个我需要怎么处理? 楼主您好,请问这个我需要怎么处理? 删掉重新配置一下试试。 会不会跟网络不稳定有关系?我都弄了几次还是这样子 ------------------ 原始邮件 ------------------ 发件人: "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: @.***> 会不会跟网络不稳定有关系?我都弄了几次还是这样子 … ------------------ 原始邮件 ------------------ 发件人: "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: @.***> 有可能的,用代理试试。 定制的时候,"全部"和”所有歌曲"的区别,帮助有需要的朋友: 歌单中 "全部" 指的是 所有歌单中歌曲,但不包括“歌单内容”配置(http://127.0.0.1:8090/static/setting.html)中的电台 "type": "radio",的 ”所有歌曲" 指的是下载的歌曲,在download文件夹里 设置页面输入小米的账号密码后,再勾选一个设备。 设置页面输入小米的账号密码后,再勾选一个设备。 设置页面里没有勾选的选项 设置页面输入小米的账号密码后,再勾选一个设备。 设置页面输入小米的账号密码后,再勾选一个设备。 设置页面里没有勾选的选项 设置页面输入小米的账号密码后,再勾选一个设备。 显示未检测到设备,设备型号是MDZ-25-DA @agigogo 应该是登陆失败了,局域网的手机重新登陆一下小爱音箱app吧。 @agigogo 应该是登陆失败了,局域网的手机重新登陆一下小爱音箱app吧。 一直都是用米家APP来控制小爱音箱,那要下个小爱音响APP试一试 @agigogo 应该是登陆失败了,局域网的手机重新登陆一下小爱音箱app吧。 搞定了,小爱音箱app重新绑定就可以了。真6~ 一首歌结束不能自动切到下一首,随机播放模式,日志中显示下一曲定时器不见了....这个是咋回事啊 一首歌结束不能自动切到下一首,随机播放模式,日志中显示下一曲定时器不见了....这个是咋回事啊 可能是音乐文件有问题,获取歌曲长度失败,你可以把歌曲文件上传一下给我测试。 或者搜下日志里有没有 不会设置下一首歌的定时器 这个 或者搜下日志里有没有 不会设置下一首歌的定时器 这个 有这个,应该是我的文件格式问题,晚上我处理一下再试试 istore系统可以拉取创建镜像,但是无法启动,错误提示见图一,求助大佬!路由器信息见图二 在群晖使用docker安装的,只能通过重装来升级到最新版本吗?有快捷的一键升级吗 在群晖使用docker安装的,只能通过重装来升级到最新版本吗?有快捷的一键升级吗 不会命令行,就用这个工具吧。 https://github.com/onlyLTY/dockerCopilot 谢谢您的工具,我刚去群晖的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: @.***> 运行时遇到下面问题,请问要怎么排查? 运行时遇到下面问题,请问要怎么排查? 看不出来 请问登录验证失败要怎么定位?小米登录邮箱,还是小米id 都报同样的错。 请问登录验证失败要怎么定位?小米登录邮箱,还是小米id 都报同样的错。 上面给出了4个办法都试过了吗?局域网登陆mi.com了? 设置web访问登录时,账号密码设置完之后登不进去了,账号名称用的中文的可以么 设置web访问登录时,账号密码设置完之后登不进去了,账号名称用的中文的可以么 不确定是否可以,你可以考虑setting.json里的内容,不行就修改再重启。 运行后会在音乐目录下生成一个tmp文件夹,如何指定路径,因为还有其应用访问音乐路径,不希望其识别tmp目录下的音乐。 运行后会在音乐目录下生成一个tmp文件夹,如何指定路径,因为还有其应用访问音乐路径,不希望其识别tmp目录下的音乐。 忽略目录(逗号分割) 改成 运行后会在音乐目录下生成一个tmp文件夹,如何指定路径,因为还有其应用访问音乐路径,不希望其识别tmp目录下的音乐。 忽略目录(逗号分割) 改成 抱歉,是我没有说清楚,是运行xiaomusic后会在音乐路径下生成tmp文件夹, 但我同时还在用navidrome,也会访问音乐目录,他会把tmp目录下的歌曲也扫描进去,所以想移动tmp目录。 navidrome没找到在哪里可以设置,忽略这个文件夹 运行后会在音乐目录下生成一个tmp文件夹,如何指定路径,因为还有其应用访问音乐路径,不希望其识别tmp目录下的音乐。 忽略目录(逗号分割) 改成 抱歉,是我没有说清楚,是运行xiaomusic后会在音乐路径下生成tmp文件夹, 但我同时还在用navidrome,也会访问音乐目录,他会把tmp目录下的歌曲也扫描进去,所以想移动tmp目录。 navidrome没找到在哪里可以设置,忽略这个文件夹 提个新 issue 吧,有空加下配置项。 问题一:打不开的地址是哪个? 问题二:可以点击刷新列表按钮试试。 是关闭了网络搜索了吗?现在的搜索只有本地数据没有网络歌曲了? 默认主题有歌曲 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: @.***> 是关闭了网络搜索了吗?现在的搜索只有本地数据没有网络歌曲了? 等 yt-dlp 修复。 默认主题有歌曲 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: @.***> 需要刷新缓存 请问网络搜索功能修复了吗?感谢! 请问网络搜索功能修复了吗?感谢! 修复了。 请问网络搜索功能修复了吗?感谢! 修复了。 我已经更新到最新版0.3.55,音箱是LX04触屏音箱,但是使用指令对小爱说“播放歌曲。。。“还是通过音箱绑定的QQ音乐播放,解绑了QQ音乐账号,就会提示先让我绑定账号(包括播放本地歌曲指令),感觉音箱还没跟docker连接上(已经重启过容器)。但是通过8090端口进入后台,搜索歌曲,播放,调节声音大小,单曲、随机所有的功能都可以通过按键实现,唯独不能通过语音跟小爱对话播放我指定的内容,请问这个是什么问题,感谢! 请问网络搜索功能修复了吗?感谢! 修复了。 我已经更新到最新版0.3.55,音箱是LX04触屏音箱,但是使用指令对小爱说“播放歌曲。。。“还是通过音箱绑定的QQ音乐播放,解绑了QQ音乐账号,就会提示先让我绑定账号(包括播放本地歌曲指令),感觉音箱还没跟docker连接上(已经重启过容器)。但是通过8090端口进入后台,搜索歌曲,播放,调节声音大小,单曲、随机所有的功能都可以通过按键实现,唯独不能通过语音跟小爱对话播放我指定的内容,请问这个是什么问题,感谢! 贴下你的 setting.json 文件看看吧,把里面的账号密码删除。 请问网络搜索功能修复了吗?感谢! 修复了。 我已经更新到最新版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 } get_ask_by_mina 【特殊型号获取对话记录】这个需要设置为 false get_ask_by_mina 【特殊型号获取对话记录】这个需要设置为 false 已经重新设置并重启容器,尝试还是不行,会不会是这个触屏音箱不支持? get_ask_by_mina 【特殊型号获取对话记录】这个需要设置为 false 已经重新设置并重启容器,尝试还是不行,会不会是这个触屏音箱不支持? 或者是在创建容器的时候,我的小米账号填写了我的手机号码,应该需要填写实际的小米账号?因为手机号码对应的小米账号,和输入对应的密码,都是可以登陆的,但是我不知道有什么区别,就把手机号码输入进去了 get_ask_by_mina 【特殊型号获取对话记录】这个需要设置为 false 已经重新设置并重启容器,尝试还是不行,会不会是这个触屏音箱不支持? 或者是在创建容器的时候,我的小米账号填写了我的手机号码,应该需要填写实际的小米账号?因为手机号码对应的小米账号,和输入对应的密码,都是可以登陆的,但是我不知道有什么区别,就把手机号码输入进去了 我重新创建容器,问题解决了,主要是两个地方改变了,一个是上面的小米账号的问题,另外一个是关于conf和music这两个文件夹,这次我都把他们放在/container/xiaomusic下,即/container/xiaomusic/conf(music),分别对应两个容器和主机app/conf(music),问题就解决了。之前我是分开在两个文件夹的。 0 B的APE文件, 建议直接跳过播放 新人请教:使用DOCKER镜像 或者 composer安装 如何升级到最新版本呢?是删除镜像再重新拉取吗 新人请教:使用DOCKER镜像 或者 composer安装 如何升级到最新版本呢?是删除镜像再重新拉取吗 我在阿里云的服务器上运行的docker,我登录了小米账号,但是 操控面板 里面 不显示我的设备。音箱是pro LX06 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。 https://github.com/hanxi/xiaomusic TIP 初次安装遇到问题请查阅 💬 FAQ问题集合 ,一般遇到的问题都已经有解决办法。 已经支持在 web 页面配置其他参数,docker 启动命令如下: 🔥 国内: 对应的 docker compose 配置如下: 🔥 国内: 其中 conf 目录为配置文件存放目录,music 目录为音乐存放目录,建议分开配置为不同的目录。 NOTE 上面配置的 /xiaomusic/music 和 /xiaomusic/conf 是 docker 主机里的 /xiaomusic 目录下的,可以修改为其他目录。如果报错找不到 /xiaomusic/music 目录,可以先执行 docker 和 docker compose 二选一即可,启动成功后,在 web 页面可以配置其他参数,带有 TIP 目前安装步骤已经是最简化了,如果还是嫌安装麻烦,可以微信或者 QQ 约我远程安装,我一般周末和晚上才有时间,收个辛苦费 💰 50 元一次,安装失败不收费。 【监听端口】保持为默认的 8090 不变,把【外网访问端口】改为 5678 。 XIAOMUSIC_PUBLIC_PORT 对应后台设置里的【外网访问端口】,修改后可以不用重启。 如果需要修改 8090 端口为其他端口,比如 5678,需要这样配,3个数字都需要是 5678 。见 https://github.com/hanxi/xiaomusic/issues/19 如果不是首次修改端口,还需要修改 /xiaomusic/conf/setting.json 文件里的端口(也可以在后台修改监听端口后重启)。 遇到问题可以去 web 设置页面底部点击【下载日志文件】按钮,然后搜索一下日志文件内容确保里面没有账号密码信息后(有就删除这些敏感信息),然后在提 issues 反馈问题时把下载的日志文件带上。 IMPORTANT XIAOMUSIC_PORT 也可以在后台配置,对应的是监听端口,修改后记得重启。 TIP 隐藏玩法: 对小爱同学说播放歌曲小猪佩奇的故事,会先下载小猪佩奇的故事,然后再播放小猪佩奇的故事。 其中 不修改默认端口 8090 的情况下,只需要执行 如果是开发前端界面,可以通过 http://localhost:8090/docs 查看有什么接口。目前的 web 控制台非常简陋,欢迎有兴趣的朋友帮忙实现一个漂亮的前端,需要什么接口可以随时提需求。 提交前请执行 用于检查代码和格式化代码。 型号与产品名称对照可以在这里查询 https://home.miot-spec.com/s/xiaomi.wifispeaker NOTE 如果你的设备支持播放,请反馈给我添加到支持列表里,谢谢。 目前应该所有设备类型都已经支持播放,有问题随时反馈。 其他触屏版不能播放可以设置【型号兼容模式】选项为 true 试试。见 https://github.com/hanxi/xiaomusic/issues/30 NOTE 本地音乐会搜索目录下上面格式的文件,下载的歌曲是 mp3 格式的。 已知 L05B L05C LX06 L16A 不支持 flac 格式。 如果格式不能播放可以打开【转换为MP3】和【型号兼容模式】选项。具体见 https://github.com/hanxi/xiaomusic/issues/153#issuecomment-2328168689 浏览器进入 http://192.168.2.5:8090 采用新的设置页面之后,没有必须在启动前配置的环境变量了,除非是改默认的 8090 端口才需要配置环境变量。 可以配置一个 json 格式的歌单,支持电台和歌曲,也可以直接用别人分享的链接,同时配备了 m3u 文件格式转换工具,可以很方便的把 m3u 电台文件转换成网络歌单格式的 json 文件,具体用法见 https://github.com/hanxi/xiaomusic/issues/78 NOTE 欢迎有想法的朋友们制作更多的歌单转换工具。 IMPORTANT 更多功能见 📝 文档汇总 本项目仅供学习和研究目的,不得用于任何商业活动。用户在使用本项目时应遵守所在地区的法律法规,对于违法使用所导致的后果,本项目及作者不承担任何责任。 本项目可能存在未知的缺陷和风险(包括但不限于设备损坏和账号封禁等),使用者应自行承担使用本项目所产生的所有风险及责任。 作者不保证本项目的准确性、完整性、及时性、可靠性,也不承担任何因使用本项目而产生的任何损失或损害责任。 使用本项目即表示您已阅读并同意本免责声明的全部内容。 MIT License © 2024 涵曦 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。 https://github.com/hanxi/xiaomusic TIP 初次安装遇到问题请查阅 💬 FAQ问题集合 ,一般遇到的问题都已经有解决办法。 已经支持在 web 页面配置其他参数,docker 启动命令如下: 🔥 国内: 对应的 docker compose 配置如下: 🔥 国内: 其中 conf 目录为配置文件存放目录,music 目录为音乐存放目录,建议分开配置为不同的目录。 NOTE 上面配置的 /xiaomusic/music 和 /xiaomusic/conf 是 docker 主机里的 /xiaomusic 目录下的,可以修改为其他目录。如果报错找不到 /xiaomusic/music 目录,可以先执行 docker 和 docker compose 二选一即可,启动成功后,在 web 页面可以配置其他参数,带有 TIP 目前安装步骤已经是最简化了,如果还是嫌安装麻烦,可以微信或者 QQ 约我远程安装,我一般周末和晚上才有时间,收个辛苦费 💰 50 元一次,安装失败不收费。 【监听端口】保持为默认的 8090 不变,把【外网访问端口】改为 5678 。 XIAOMUSIC_PUBLIC_PORT 对应后台设置里的【外网访问端口】,修改后可以不用重启。 如果需要修改 8090 端口为其他端口,比如 5678,需要这样配,3个数字都需要是 5678 。见 https://github.com/hanxi/xiaomusic/issues/19 如果不是首次修改端口,还需要修改 /xiaomusic/conf/setting.json 文件里的端口(也可以在后台修改监听端口后重启)。 遇到问题可以去 web 设置页面底部点击【下载日志文件】按钮,然后搜索一下日志文件内容确保里面没有账号密码信息后(有就删除这些敏感信息),然后在提 issues 反馈问题时把下载的日志文件带上。 IMPORTANT XIAOMUSIC_PORT 也可以在后台配置,对应的是监听端口,修改后记得重启。 TIP 隐藏玩法: 对小爱同学说播放歌曲小猪佩奇的故事,会先下载小猪佩奇的故事,然后再播放小猪佩奇的故事。 其中 不修改默认端口 8090 的情况下,只需要执行 如果是开发前端界面,可以通过 http://localhost:8090/docs 查看有什么接口。目前的 web 控制台非常简陋,欢迎有兴趣的朋友帮忙实现一个漂亮的前端,需要什么接口可以随时提需求。 提交前请执行 用于检查代码和格式化代码。 型号与产品名称对照可以在这里查询 https://home.miot-spec.com/s/xiaomi.wifispeaker NOTE 如果你的设备支持播放,请反馈给我添加到支持列表里,谢谢。 目前应该所有设备类型都已经支持播放,有问题随时反馈。 其他触屏版不能播放可以设置【型号兼容模式】选项为 true 试试。见 https://github.com/hanxi/xiaomusic/issues/30 NOTE 本地音乐会搜索目录下上面格式的文件,下载的歌曲是 mp3 格式的。 已知 L05B L05C LX06 L16A 不支持 flac 格式。 如果格式不能播放可以打开【转换为MP3】和【型号兼容模式】选项。具体见 https://github.com/hanxi/xiaomusic/issues/153#issuecomment-2328168689 浏览器进入 http://192.168.2.5:8090 采用新的设置页面之后,没有必须在启动前配置的环境变量了,除非是改默认的 8090 端口才需要配置环境变量。 可以配置一个 json 格式的歌单,支持电台和歌曲,也可以直接用别人分享的链接,同时配备了 m3u 文件格式转换工具,可以很方便的把 m3u 电台文件转换成网络歌单格式的 json 文件,具体用法见 https://github.com/hanxi/xiaomusic/issues/78 NOTE 欢迎有想法的朋友们制作更多的歌单转换工具。 IMPORTANT 更多功能见 📝 文档汇总 本项目仅供学习和研究目的,不得用于任何商业活动。用户在使用本项目时应遵守所在地区的法律法规,对于违法使用所导致的后果,本项目及作者不承担任何责任。 本项目可能存在未知的缺陷和风险(包括但不限于设备损坏和账号封禁等),使用者应自行承担使用本项目所产生的所有风险及责任。 作者不保证本项目的准确性、完整性、及时性、可靠性,也不承担任何因使用本项目而产生的任何损失或损害责任。 使用本项目即表示您已阅读并同意本免责声明的全部内容。 MIT License © 2024 涵曦 This page demonstrates usage of some of the runtime APIs provided by VitePress. The main This page demonstrates usage of some of the runtime APIs provided by VitePress. The main 在 Create / delete 在 Create / delete This page demonstrates some of the built-in markdown extensions provided by VitePress. VitePress provides Syntax Highlighting powered by Shiki, with additional features like line-highlighting: Input Output Input Output INFO This is an info box. TIP This is a tip. WARNING This is a warning. DANGER This is a dangerous warning. This is a details block. Check out the documentation for the full list of markdown extensions. This page demonstrates some of the built-in markdown extensions provided by VitePress. VitePress provides Syntax Highlighting powered by Shiki, with additional features like line-highlighting: Input Output Input Output INFO This is an info box. TIP This is a tip. WARNING This is a warning. DANGER This is a dangerous warning. This is a details block. Check out the documentation for the full list of markdown extensions.群晖docker安装 xiaomusic
MI_HARDWARE=型号 前面第4 步骤获取的 XIAOMUSIC_SEARCH=搜索方式,我填写的bilisearch: 意思是通过 bilibili 搜索 MI_DID=前面第4 步骤获取的 MI_USER=小米账号 MI_PASS=小米密码 XIAOMUSIC_FUZZY_MATCH_CUTOFF=模糊匹配,最小为 0.1 最大为 1,越小越模糊,越大越精准
7、映射路径
评论
评论 1 - kiwi5656
评论 2 - hanxi
评论 3 - hanxi
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
`,20)]))}const m=i(o,[["render",r]]);export{p as __pageData,m as default};
diff --git a/docs/.vitepress/dist/assets/issues_101.md.DBQG9jJP.lean.js b/docs/.vitepress/dist/assets/issues_101.md.DBQG9jJP.lean.js
deleted file mode 100644
index baf20fb..0000000
--- a/docs/.vitepress/dist/assets/issues_101.md.DBQG9jJP.lean.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{_ as i,c as e,a0 as t,o as s}from"./chunks/framework.p2VkXzrt.js";const p=JSON.parse('{"title":"群晖docker安装 xiaomusic","description":"","frontmatter":{"title":"群晖docker安装 xiaomusic"},"headers":[],"relativePath":"issues/101.md","filePath":"issues/101.md","lastUpdated":null}'),o={name:"issues/101.md"};function r(c,a,d,h,n,l){return s(),e("div",null,a[0]||(a[0]=[t(`群晖docker安装 xiaomusic
MI_HARDWARE=型号 前面第4 步骤获取的 XIAOMUSIC_SEARCH=搜索方式,我填写的bilisearch: 意思是通过 bilibili 搜索 MI_DID=前面第4 步骤获取的 MI_USER=小米账号 MI_PASS=小米密码 XIAOMUSIC_FUZZY_MATCH_CUTOFF=模糊匹配,最小为 0.1 最大为 1,越小越模糊,越大越精准
7、映射路径
评论
评论 1 - kiwi5656
评论 2 - hanxi
评论 3 - hanxi
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
`,20)]))}const m=i(o,[["render",r]]);export{p as __pageData,m as default};
diff --git a/docs/.vitepress/dist/assets/issues_105.md.8_yuCS-D.js b/docs/.vitepress/dist/assets/issues_105.md.8_yuCS-D.js
deleted file mode 100644
index b205293..0000000
--- a/docs/.vitepress/dist/assets/issues_105.md.8_yuCS-D.js
+++ /dev/null
@@ -1,189 +0,0 @@
-import{_ as a,c as i,a0 as n,o as t}from"./chunks/framework.p2VkXzrt.js";const d=JSON.parse('{"title":"【插件】自定义口令功能","description":"","frontmatter":{"title":"【插件】自定义口令功能"},"headers":[],"relativePath":"issues/105.md","filePath":"issues/105.md","lastUpdated":null}'),p={name:"issues/105.md"};function l(e,s,o,h,k,u){return t(),i("div",null,s[0]||(s[0]=[n(`【插件】自定义口令功能
plugins/
目录下面,如果是容器启动,则需要把这个目录挂载出来。{
- "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\\")"
- }
-}
"测试自定义口令": "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("你好,我是自定义的测试口令")
"测试链接": "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,测试自定义口令",
评论
评论 1 - carson512
评论 2 - hanxi
评论 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'
评论 4 - hanxi
评论 5 - guoxiangke
评论 6 - CZJCC
评论 7 - hanxi
评论 8 - CZJCC
评论 9 - hanxi
评论 10 - hanxi
评论 11 - CZJCC
评论 12 - hanxi
评论 13 - hanxi
评论 14 - mogeqian
"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 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": {
- "查找歌曲": "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 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
评论 17 - hanxi
评论 18 - mogeqian
`,84)]))}const r=a(p,[["render",l]]);export{d as __pageData,r as default};
diff --git a/docs/.vitepress/dist/assets/issues_105.md.8_yuCS-D.lean.js b/docs/.vitepress/dist/assets/issues_105.md.8_yuCS-D.lean.js
deleted file mode 100644
index b205293..0000000
--- a/docs/.vitepress/dist/assets/issues_105.md.8_yuCS-D.lean.js
+++ /dev/null
@@ -1,189 +0,0 @@
-import{_ as a,c as i,a0 as n,o as t}from"./chunks/framework.p2VkXzrt.js";const d=JSON.parse('{"title":"【插件】自定义口令功能","description":"","frontmatter":{"title":"【插件】自定义口令功能"},"headers":[],"relativePath":"issues/105.md","filePath":"issues/105.md","lastUpdated":null}'),p={name:"issues/105.md"};function l(e,s,o,h,k,u){return t(),i("div",null,s[0]||(s[0]=[n(`【插件】自定义口令功能
plugins/
目录下面,如果是容器启动,则需要把这个目录挂载出来。{
- "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\\")"
- }
-}
"测试自定义口令": "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("你好,我是自定义的测试口令")
"测试链接": "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,测试自定义口令",
评论
评论 1 - carson512
评论 2 - hanxi
评论 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'
评论 4 - hanxi
评论 5 - guoxiangke
评论 6 - CZJCC
评论 7 - hanxi
评论 8 - CZJCC
评论 9 - hanxi
评论 10 - hanxi
评论 11 - CZJCC
评论 12 - hanxi
评论 13 - hanxi
评论 14 - mogeqian
"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 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": {
- "查找歌曲": "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 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
评论 17 - hanxi
评论 18 - mogeqian
`,84)]))}const r=a(p,[["render",l]]);export{d as __pageData,r as default};
diff --git a/docs/.vitepress/dist/assets/issues_182.md.CpqPtztd.js b/docs/.vitepress/dist/assets/issues_182.md.CpqPtztd.js
deleted file mode 100644
index 7de6584..0000000
--- a/docs/.vitepress/dist/assets/issues_182.md.CpqPtztd.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import{_ as i,c as a,a0 as n,o as t}from"./chunks/framework.p2VkXzrt.js";const d=JSON.parse('{"title":"定时任务配置格式","description":"","frontmatter":{"title":"定时任务配置格式"},"headers":[],"relativePath":"issues/182.md","filePath":"issues/182.md","lastUpdated":null}'),l={name:"issues/182.md"};function h(p,s,k,e,E,r){return t(),a("div",null,s[0]||(s[0]=[n(`定时任务配置格式
示例
[
- {
- "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"
- }
-]
参数意思
|
符合加上目录下面的歌曲名,也可不加。评论
评论 1 - hanxi
`,15)]))}const u=i(l,[["render",h]]);export{d as __pageData,u as default};
diff --git a/docs/.vitepress/dist/assets/issues_182.md.CpqPtztd.lean.js b/docs/.vitepress/dist/assets/issues_182.md.CpqPtztd.lean.js
deleted file mode 100644
index 7de6584..0000000
--- a/docs/.vitepress/dist/assets/issues_182.md.CpqPtztd.lean.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import{_ as i,c as a,a0 as n,o as t}from"./chunks/framework.p2VkXzrt.js";const d=JSON.parse('{"title":"定时任务配置格式","description":"","frontmatter":{"title":"定时任务配置格式"},"headers":[],"relativePath":"issues/182.md","filePath":"issues/182.md","lastUpdated":null}'),l={name:"issues/182.md"};function h(p,s,k,e,E,r){return t(),a("div",null,s[0]||(s[0]=[n(`定时任务配置格式
示例
[
- {
- "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"
- }
-]
参数意思
|
符合加上目录下面的歌曲名,也可不加。评论
评论 1 - hanxi
`,15)]))}const u=i(l,[["render",h]]);export{d as __pageData,u as default};
diff --git a/docs/.vitepress/dist/assets/issues_19.md.DB81ml38.js b/docs/.vitepress/dist/assets/issues_19.md.DB81ml38.js
deleted file mode 100644
index 59438b5..0000000
--- a/docs/.vitepress/dist/assets/issues_19.md.DB81ml38.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import{_ as a,c as n,a0 as i,o as p}from"./chunks/framework.p2VkXzrt.js";const u=JSON.parse('{"title":"如何修改默认的8090端口","description":"","frontmatter":{"title":"如何修改默认的8090端口"},"headers":[],"relativePath":"issues/19.md","filePath":"issues/19.md","lastUpdated":null}'),e={name:"issues/19.md"};function t(l,s,o,c,h,d){return p(),n("div",null,s[0]||(s[0]=[i(`如何修改默认的8090端口
ports:
- - 80:8090
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
评论 3 - hanxi
environment:
- XIAOMUSIC_PORT:6874
-ports:
- - 6874:6874
评论 4 - hanxi
评论 5 - flymin
ports:
- - aaaa:bbbb
-environment:
- XIAOMUSIC_PORT: bbbb # 配置文件中的 port,后台:监听端口(修改后需要重启)
- XIAOMUSIC_PUBLIC_PORT: aaaa # 配置文件中的 public_port,后台:外网访问端口(0表示跟监听端口一致)
`,31)]))}const m=a(e,[["render",t]]);export{u as __pageData,m as default};
diff --git a/docs/.vitepress/dist/assets/issues_19.md.DB81ml38.lean.js b/docs/.vitepress/dist/assets/issues_19.md.DB81ml38.lean.js
deleted file mode 100644
index 59438b5..0000000
--- a/docs/.vitepress/dist/assets/issues_19.md.DB81ml38.lean.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import{_ as a,c as n,a0 as i,o as p}from"./chunks/framework.p2VkXzrt.js";const u=JSON.parse('{"title":"如何修改默认的8090端口","description":"","frontmatter":{"title":"如何修改默认的8090端口"},"headers":[],"relativePath":"issues/19.md","filePath":"issues/19.md","lastUpdated":null}'),e={name:"issues/19.md"};function t(l,s,o,c,h,d){return p(),n("div",null,s[0]||(s[0]=[i(`如何修改默认的8090端口
ports:
- - 80:8090
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
评论 3 - hanxi
environment:
- XIAOMUSIC_PORT:6874
-ports:
- - 6874:6874
评论 4 - hanxi
评论 5 - flymin
ports:
- - aaaa:bbbb
-environment:
- XIAOMUSIC_PORT: bbbb # 配置文件中的 port,后台:监听端口(修改后需要重启)
- XIAOMUSIC_PUBLIC_PORT: aaaa # 配置文件中的 public_port,后台:外网访问端口(0表示跟监听端口一致)
`,31)]))}const m=a(e,[["render",t]]);export{u as __pageData,m as default};
diff --git a/docs/.vitepress/dist/assets/issues_210.md.C4LG69AC.js b/docs/.vitepress/dist/assets/issues_210.md.C4LG69AC.js
deleted file mode 100644
index 0cb1542..0000000
--- a/docs/.vitepress/dist/assets/issues_210.md.C4LG69AC.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{_ as e,c as a,a0 as o,o as i}from"./chunks/framework.p2VkXzrt.js";const u=JSON.parse('{"title":"yt-dlp cookies 文件上传功能","description":"","frontmatter":{"title":"yt-dlp cookies 文件上传功能"},"headers":[],"relativePath":"issues/210.md","filePath":"issues/210.md","lastUpdated":null}'),s={name:"issues/210.md"};function l(c,t,r,n,h,d){return i(),a("div",null,t[0]||(t[0]=[o(`yt-dlp cookies 文件上传功能
--cookies
参数。--cookies FILE Netscape formatted file to read cookies from
- and dump cookie jar in
获取 cookies.txt 文件
上传 cookies.txt
后续用途
评论
评论 1 - kingfly2016
评论 2 - hanxi
评论 3 - kingfly2016
`,23)]))}const b=e(s,[["render",l]]);export{u as __pageData,b as default};
diff --git a/docs/.vitepress/dist/assets/issues_210.md.C4LG69AC.lean.js b/docs/.vitepress/dist/assets/issues_210.md.C4LG69AC.lean.js
deleted file mode 100644
index 0cb1542..0000000
--- a/docs/.vitepress/dist/assets/issues_210.md.C4LG69AC.lean.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{_ as e,c as a,a0 as o,o as i}from"./chunks/framework.p2VkXzrt.js";const u=JSON.parse('{"title":"yt-dlp cookies 文件上传功能","description":"","frontmatter":{"title":"yt-dlp cookies 文件上传功能"},"headers":[],"relativePath":"issues/210.md","filePath":"issues/210.md","lastUpdated":null}'),s={name:"issues/210.md"};function l(c,t,r,n,h,d){return i(),a("div",null,t[0]||(t[0]=[o(`yt-dlp cookies 文件上传功能
--cookies
参数。--cookies FILE Netscape formatted file to read cookies from
- and dump cookie jar in
获取 cookies.txt 文件
上传 cookies.txt
后续用途
评论
评论 1 - kingfly2016
评论 2 - hanxi
评论 3 - kingfly2016
`,23)]))}const b=e(s,[["render",l]]);export{u as __pageData,b as default};
diff --git a/docs/.vitepress/dist/assets/issues_211.md.DUZAr3Vg.js b/docs/.vitepress/dist/assets/issues_211.md.DUZAr3Vg.js
deleted file mode 100644
index 63d05d3..0000000
--- a/docs/.vitepress/dist/assets/issues_211.md.DUZAr3Vg.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as e,c as t,a0 as s,o as l}from"./chunks/framework.p2VkXzrt.js";const p=JSON.parse('{"title":"📝 文档汇总","description":"","frontmatter":{"title":"📝 文档汇总"},"headers":[],"relativePath":"issues/211.md","filePath":"issues/211.md","lastUpdated":null}'),i={name:"issues/211.md"};function r(h,a,o,f,m,u){return l(),t("div",null,a[0]||(a[0]=[s('📝 文档汇总
1️⃣ 基础文档
2️⃣ 进阶文档
3️⃣ 其他安装文档
评论
评论 1 - sghuenn
评论 2 - hanxi
评论 3 - zhoukk37
评论 4 - hanxi
',24)]))}const c=e(i,[["render",r]]);export{p as __pageData,c as default};
diff --git a/docs/.vitepress/dist/assets/issues_211.md.DUZAr3Vg.lean.js b/docs/.vitepress/dist/assets/issues_211.md.DUZAr3Vg.lean.js
deleted file mode 100644
index 63d05d3..0000000
--- a/docs/.vitepress/dist/assets/issues_211.md.DUZAr3Vg.lean.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as e,c as t,a0 as s,o as l}from"./chunks/framework.p2VkXzrt.js";const p=JSON.parse('{"title":"📝 文档汇总","description":"","frontmatter":{"title":"📝 文档汇总"},"headers":[],"relativePath":"issues/211.md","filePath":"issues/211.md","lastUpdated":null}'),i={name:"issues/211.md"};function r(h,a,o,f,m,u){return l(),t("div",null,a[0]||(a[0]=[s('📝 文档汇总
1️⃣ 基础文档
2️⃣ 进阶文档
3️⃣ 其他安装文档
评论
评论 1 - sghuenn
评论 2 - hanxi
评论 3 - zhoukk37
评论 4 - hanxi
',24)]))}const c=e(i,[["render",r]]);export{p as __pageData,c as default};
diff --git a/docs/.vitepress/dist/assets/issues_212.md.j95HTJwO.js b/docs/.vitepress/dist/assets/issues_212.md.j95HTJwO.js
deleted file mode 100644
index e05ad18..0000000
--- a/docs/.vitepress/dist/assets/issues_212.md.j95HTJwO.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as a,c as e,a0 as s,o as i}from"./chunks/framework.p2VkXzrt.js";const u=JSON.parse('{"title":"如何批量下载歌曲","description":"","frontmatter":{"title":"如何批量下载歌曲"},"headers":[],"relativePath":"issues/212.md","filePath":"issues/212.md","lastUpdated":null}'),o={name:"issues/212.md"};function r(p,t,l,h,c,n){return i(),e("div",null,t[0]||(t[0]=[s('如何批量下载歌曲
评论
评论 1 - lazybabyz
评论 2 - hanxi
',22)]))}const b=a(o,[["render",r]]);export{u as __pageData,b as default};
diff --git a/docs/.vitepress/dist/assets/issues_212.md.j95HTJwO.lean.js b/docs/.vitepress/dist/assets/issues_212.md.j95HTJwO.lean.js
deleted file mode 100644
index e05ad18..0000000
--- a/docs/.vitepress/dist/assets/issues_212.md.j95HTJwO.lean.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as a,c as e,a0 as s,o as i}from"./chunks/framework.p2VkXzrt.js";const u=JSON.parse('{"title":"如何批量下载歌曲","description":"","frontmatter":{"title":"如何批量下载歌曲"},"headers":[],"relativePath":"issues/212.md","filePath":"issues/212.md","lastUpdated":null}'),o={name:"issues/212.md"};function r(p,t,l,h,c,n){return i(),e("div",null,t[0]||(t[0]=[s('如何批量下载歌曲
评论
评论 1 - lazybabyz
评论 2 - hanxi
',22)]))}const b=a(o,[["render",r]]);export{u as __pageData,b as default};
diff --git a/docs/.vitepress/dist/assets/issues_269.md.CwdSqsHN.js b/docs/.vitepress/dist/assets/issues_269.md.CwdSqsHN.js
deleted file mode 100644
index 0006635..0000000
--- a/docs/.vitepress/dist/assets/issues_269.md.CwdSqsHN.js
+++ /dev/null
@@ -1,347 +0,0 @@
-import{_ as i,c as a,a0 as n,o as t}from"./chunks/framework.p2VkXzrt.js";const o=JSON.parse('{"title":"如何添加 网易云音乐playlist","description":"","frontmatter":{"title":"如何添加 网易云音乐playlist"},"headers":[],"relativePath":"issues/269.md","filePath":"issues/269.md","lastUpdated":null}'),p={name:"issues/269.md"};function l(h,s,k,e,E,r){return t(),a("div",null,s[0]||(s[0]=[n(`如何添加 网易云音乐playlist
评论
评论 1 - hanxi
评论 2 - qiujie8092916
评论 3 - dissipator
评论 4 - dissipator
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] + "]}]"
@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
评论 6 - dissipator
评论 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
评论 11 - dissipator
评论 12 - guitarbug
评论 13 - dissipator
成功了
最好是在setting.json里去配置,我测试老是不匹配,在setting.json里去配置终于成功。可以直接调用 NeteaseCloudMusicApi 接口,甚至使用UnblockNeteaseMusic 解锁灰色,但是代码需要小调整。
{
- "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
-}
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
评论 16 - hanxi
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 = f"{api_host}/song/url?id={music['id']}&br=350000&realIP=211.161.244.70&proxy=HTTP:%2F%2F127.0.0.1:8080"
评论 18 - dissipator
`,77)]))}const g=i(p,[["render",l]]);export{o as __pageData,g as default};
diff --git a/docs/.vitepress/dist/assets/issues_269.md.CwdSqsHN.lean.js b/docs/.vitepress/dist/assets/issues_269.md.CwdSqsHN.lean.js
deleted file mode 100644
index 0006635..0000000
--- a/docs/.vitepress/dist/assets/issues_269.md.CwdSqsHN.lean.js
+++ /dev/null
@@ -1,347 +0,0 @@
-import{_ as i,c as a,a0 as n,o as t}from"./chunks/framework.p2VkXzrt.js";const o=JSON.parse('{"title":"如何添加 网易云音乐playlist","description":"","frontmatter":{"title":"如何添加 网易云音乐playlist"},"headers":[],"relativePath":"issues/269.md","filePath":"issues/269.md","lastUpdated":null}'),p={name:"issues/269.md"};function l(h,s,k,e,E,r){return t(),a("div",null,s[0]||(s[0]=[n(`如何添加 网易云音乐playlist
评论
评论 1 - hanxi
评论 2 - qiujie8092916
评论 3 - dissipator
评论 4 - dissipator
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] + "]}]"
@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
评论 6 - dissipator
评论 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
评论 11 - dissipator
评论 12 - guitarbug
评论 13 - dissipator
成功了
最好是在setting.json里去配置,我测试老是不匹配,在setting.json里去配置终于成功。可以直接调用 NeteaseCloudMusicApi 接口,甚至使用UnblockNeteaseMusic 解锁灰色,但是代码需要小调整。
{
- "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
-}
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
评论 16 - hanxi
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 = f"{api_host}/song/url?id={music['id']}&br=350000&realIP=211.161.244.70&proxy=HTTP:%2F%2F127.0.0.1:8080"
评论 18 - dissipator
`,77)]))}const g=i(p,[["render",l]]);export{o as __pageData,g as default};
diff --git a/docs/.vitepress/dist/assets/issues_285.md.0b7MF6MA.js b/docs/.vitepress/dist/assets/issues_285.md.0b7MF6MA.js
deleted file mode 100644
index 9677341..0000000
--- a/docs/.vitepress/dist/assets/issues_285.md.0b7MF6MA.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as t,c as e,a0 as s,o}from"./chunks/framework.p2VkXzrt.js";const u=JSON.parse('{"title":"相关工具推荐","description":"","frontmatter":{"title":"相关工具推荐"},"headers":[],"relativePath":"issues/285.md","filePath":"issues/285.md","lastUpdated":null}'),i={name:"issues/285.md"};function r(l,a,h,c,p,n){return o(),e("div",null,a[0]||(a[0]=[s('相关工具推荐
评论
评论 1 - F-loat
小程序码
截图
评论 2 - hanxi
评论 3 - F-loat
',17)]))}const m=t(i,[["render",r]]);export{u as __pageData,m as default};
diff --git a/docs/.vitepress/dist/assets/issues_285.md.0b7MF6MA.lean.js b/docs/.vitepress/dist/assets/issues_285.md.0b7MF6MA.lean.js
deleted file mode 100644
index 9677341..0000000
--- a/docs/.vitepress/dist/assets/issues_285.md.0b7MF6MA.lean.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as t,c as e,a0 as s,o}from"./chunks/framework.p2VkXzrt.js";const u=JSON.parse('{"title":"相关工具推荐","description":"","frontmatter":{"title":"相关工具推荐"},"headers":[],"relativePath":"issues/285.md","filePath":"issues/285.md","lastUpdated":null}'),i={name:"issues/285.md"};function r(l,a,h,c,p,n){return o(),e("div",null,a[0]||(a[0]=[s('相关工具推荐
评论
评论 1 - F-loat
小程序码
截图
评论 2 - hanxi
评论 3 - F-loat
',17)]))}const m=t(i,[["render",r]]);export{u as __pageData,m as default};
diff --git a/docs/.vitepress/dist/assets/issues_294.md.CrOAwh-t.js b/docs/.vitepress/dist/assets/issues_294.md.CrOAwh-t.js
deleted file mode 100644
index 41817af..0000000
--- a/docs/.vitepress/dist/assets/issues_294.md.CrOAwh-t.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as e,c as t,a0 as r,o}from"./chunks/framework.p2VkXzrt.js";const c=JSON.parse('{"title":"关于M01型号的注意事项","description":"","frontmatter":{"title":"关于M01型号的注意事项"},"headers":[],"relativePath":"issues/294.md","filePath":"issues/294.md","lastUpdated":null}'),s={name:"issues/294.md"};function i(h,a,l,n,u,p){return o(),t("div",null,a[0]||(a[0]=[r('关于M01型号的注意事项
评论
评论 1 - hanxi
评论 2 - bj803
评论 3 - hanxi
评论 4 - bj803
评论 5 - bj803
评论 6 - hanxi
',27)]))}const d=e(s,[["render",i]]);export{c as __pageData,d as default};
diff --git a/docs/.vitepress/dist/assets/issues_294.md.CrOAwh-t.lean.js b/docs/.vitepress/dist/assets/issues_294.md.CrOAwh-t.lean.js
deleted file mode 100644
index 41817af..0000000
--- a/docs/.vitepress/dist/assets/issues_294.md.CrOAwh-t.lean.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as e,c as t,a0 as r,o}from"./chunks/framework.p2VkXzrt.js";const c=JSON.parse('{"title":"关于M01型号的注意事项","description":"","frontmatter":{"title":"关于M01型号的注意事项"},"headers":[],"relativePath":"issues/294.md","filePath":"issues/294.md","lastUpdated":null}'),s={name:"issues/294.md"};function i(h,a,l,n,u,p){return o(),t("div",null,a[0]||(a[0]=[r('关于M01型号的注意事项
评论
评论 1 - hanxi
评论 2 - bj803
评论 3 - hanxi
评论 4 - bj803
评论 5 - bj803
评论 6 - hanxi
',27)]))}const d=e(s,[["render",i]]);export{c as __pageData,d as default};
diff --git a/docs/.vitepress/dist/assets/issues_297.md.CtkkBK4R.js b/docs/.vitepress/dist/assets/issues_297.md.CtkkBK4R.js
deleted file mode 100644
index 83c51c8..0000000
--- a/docs/.vitepress/dist/assets/issues_297.md.CtkkBK4R.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as a,c as e,a0 as i,o as s}from"./chunks/framework.p2VkXzrt.js";const M=JSON.parse('{"title":"xiaomusic极空间安装教程(2024/12/4更新)","description":"","frontmatter":{"title":"xiaomusic极空间安装教程(2024/12/4更新)"},"headers":[],"relativePath":"issues/297.md","filePath":"issues/297.md","lastUpdated":null}'),o={name:"issues/297.md"};function c(h,t,l,r,m,n){return s(),e("div",null,t[0]||(t[0]=[i('xiaomusic极空间安装教程(2024-12-4更新)
看不懂/嫌麻烦/懒 但有点小钱,找 hanxi 预约微信或者 QQ 远程安装,他便宜,收费50一次,作法不成功不要钱获取镜像
科学环境:
hanxi/xiaomusic
,在搜索的结果中直接选择第一个,点击下载版本说明
latest
v0.3.55
main
国内环境:
m.daocloud.io/docker.io/hanxi/xiaomusic
,点击 拉取 按钮 部署镜像
文件/文件夹 装载路径 /data/music1 /app/music/music1 /data/music2 /app/music/music2 5678
(示例按照本地端口号5678来进行配置,下同)setting.json
文件中的配置,会增加很多麻烦XIAOMUSIC_HOSTNAME
修改为你的 极空间的IP地址ACCOUNT
和PASSWORD
,没有过风控仍然无法使用!上古时代的教程不要再看了,容易走火入魔!进入xiaomusic网页端进行配置
192.168.2.5:5678
,打开网页后点击 默认主题评论
评论 1 - xiaohuobanhahaha
an'zh 无法使用语音播放歌曲,小爱s12a。极空间z4pro。 1. 按照教程,点击播放本地歌曲,提示hostname和设置的端口映射不匹配。映射5678,容器端口8090. 2.网络host模式,能够本地播放,无法使用语音控制,提示“下载app”。日志已上传
评论 2 - 52fisher
an'zh 无法使用语音播放歌曲,小爱s12a。极空间z4pro。 1. 按照教程,点击播放本地歌曲,提示hostname和设置的端口映射不匹配。映射5678,容器端口8090. 2.网络host模式,能够本地播放,无法使用语音控制,提示“下载app”。日志已上传
评论 3 - xiaohuobanhahaha
评论 4 - 52fisher
评论 5 - xiaohuobanhahaha
评论 6 - 52fisher
评论 7 - xiaohuobanhahaha
评论 8 - 52fisher
评论 9 - xiaohuobanhahaha
评论 10 - 52fisher
评论 11 - xiaohuobanhahaha
',85)]))}const d=a(o,[["render",c]]);export{M as __pageData,d as default};
diff --git a/docs/.vitepress/dist/assets/issues_297.md.CtkkBK4R.lean.js b/docs/.vitepress/dist/assets/issues_297.md.CtkkBK4R.lean.js
deleted file mode 100644
index 83c51c8..0000000
--- a/docs/.vitepress/dist/assets/issues_297.md.CtkkBK4R.lean.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as a,c as e,a0 as i,o as s}from"./chunks/framework.p2VkXzrt.js";const M=JSON.parse('{"title":"xiaomusic极空间安装教程(2024/12/4更新)","description":"","frontmatter":{"title":"xiaomusic极空间安装教程(2024/12/4更新)"},"headers":[],"relativePath":"issues/297.md","filePath":"issues/297.md","lastUpdated":null}'),o={name:"issues/297.md"};function c(h,t,l,r,m,n){return s(),e("div",null,t[0]||(t[0]=[i('xiaomusic极空间安装教程(2024-12-4更新)
看不懂/嫌麻烦/懒 但有点小钱,找 hanxi 预约微信或者 QQ 远程安装,他便宜,收费50一次,作法不成功不要钱获取镜像
科学环境:
hanxi/xiaomusic
,在搜索的结果中直接选择第一个,点击下载版本说明
latest
v0.3.55
main
国内环境:
m.daocloud.io/docker.io/hanxi/xiaomusic
,点击 拉取 按钮 部署镜像
文件/文件夹 装载路径 /data/music1 /app/music/music1 /data/music2 /app/music/music2 5678
(示例按照本地端口号5678来进行配置,下同)setting.json
文件中的配置,会增加很多麻烦XIAOMUSIC_HOSTNAME
修改为你的 极空间的IP地址ACCOUNT
和PASSWORD
,没有过风控仍然无法使用!上古时代的教程不要再看了,容易走火入魔!进入xiaomusic网页端进行配置
192.168.2.5:5678
,打开网页后点击 默认主题评论
评论 1 - xiaohuobanhahaha
an'zh 无法使用语音播放歌曲,小爱s12a。极空间z4pro。 1. 按照教程,点击播放本地歌曲,提示hostname和设置的端口映射不匹配。映射5678,容器端口8090. 2.网络host模式,能够本地播放,无法使用语音控制,提示“下载app”。日志已上传
评论 2 - 52fisher
an'zh 无法使用语音播放歌曲,小爱s12a。极空间z4pro。 1. 按照教程,点击播放本地歌曲,提示hostname和设置的端口映射不匹配。映射5678,容器端口8090. 2.网络host模式,能够本地播放,无法使用语音控制,提示“下载app”。日志已上传
评论 3 - xiaohuobanhahaha
评论 4 - 52fisher
评论 5 - xiaohuobanhahaha
评论 6 - 52fisher
评论 7 - xiaohuobanhahaha
评论 8 - 52fisher
评论 9 - xiaohuobanhahaha
评论 10 - 52fisher
评论 11 - xiaohuobanhahaha
',85)]))}const d=a(o,[["render",c]]);export{M as __pageData,d as default};
diff --git a/docs/.vitepress/dist/assets/issues_78.md.CH6fxnfx.js b/docs/.vitepress/dist/assets/issues_78.md.CH6fxnfx.js
deleted file mode 100644
index be8331e..0000000
--- a/docs/.vitepress/dist/assets/issues_78.md.CH6fxnfx.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import{_ as t,c as s,a0 as a,o as i}from"./chunks/framework.p2VkXzrt.js";const h=JSON.parse('{"title":"已支持配置自定义网络歌单,在这里分享你的歌单","description":"","frontmatter":{"title":"已支持配置自定义网络歌单,在这里分享你的歌单"},"headers":[],"relativePath":"issues/78.md","filePath":"issues/78.md","lastUpdated":null}'),r={name:"issues/78.md"};function p(n,e,o,l,u,d){return i(),s("div",null,e[0]||(e[0]=[a(`已支持配置自定义网络歌单,在这里分享你的歌单
python3 micli.py play http://ngcdn001.cnr.cn/live/zgzs/index.m3u8
[
- {
- "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"
- }
- ]
- }
-]
评论
评论 1 - hanxi
评论 2 - hanxi
评论 3 - lazybabyz
评论 4 - hanxi
评论 5 - 201692929
评论 6 - hanxi
/playingmusic
评论 7 - 114514thD
评论 8 - hanxi
评论 9 - 114514thD
本地开服务器,生成的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
转换为json(去掉"type":"radio")后用小爱播放也正常
#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的流比较特殊。。
`,50)]))}const m=t(r,[["render",p]]);export{h as __pageData,m as default};
diff --git a/docs/.vitepress/dist/assets/issues_78.md.CH6fxnfx.lean.js b/docs/.vitepress/dist/assets/issues_78.md.CH6fxnfx.lean.js
deleted file mode 100644
index be8331e..0000000
--- a/docs/.vitepress/dist/assets/issues_78.md.CH6fxnfx.lean.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import{_ as t,c as s,a0 as a,o as i}from"./chunks/framework.p2VkXzrt.js";const h=JSON.parse('{"title":"已支持配置自定义网络歌单,在这里分享你的歌单","description":"","frontmatter":{"title":"已支持配置自定义网络歌单,在这里分享你的歌单"},"headers":[],"relativePath":"issues/78.md","filePath":"issues/78.md","lastUpdated":null}'),r={name:"issues/78.md"};function p(n,e,o,l,u,d){return i(),s("div",null,e[0]||(e[0]=[a(`已支持配置自定义网络歌单,在这里分享你的歌单
python3 micli.py play http://ngcdn001.cnr.cn/live/zgzs/index.m3u8
[
- {
- "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"
- }
- ]
- }
-]
评论
评论 1 - hanxi
评论 2 - hanxi
评论 3 - lazybabyz
评论 4 - hanxi
评论 5 - 201692929
评论 6 - hanxi
/playingmusic
评论 7 - 114514thD
评论 8 - hanxi
评论 9 - 114514thD
本地开服务器,生成的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
转换为json(去掉"type":"radio")后用小爱播放也正常
#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的流比较特殊。。
`,50)]))}const m=t(r,[["render",p]]);export{h as __pageData,m as default};
diff --git a/docs/.vitepress/dist/assets/issues_88.md.VOyx9x2b.js b/docs/.vitepress/dist/assets/issues_88.md.VOyx9x2b.js
deleted file mode 100644
index 9bd803f..0000000
--- a/docs/.vitepress/dist/assets/issues_88.md.VOyx9x2b.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as t,c as e,a0 as i,o}from"./chunks/framework.p2VkXzrt.js";const p=JSON.parse('{"title":"如何添加m3u格式文件的电台","description":"","frontmatter":{"title":"如何添加m3u格式文件的电台"},"headers":[],"relativePath":"issues/88.md","filePath":"issues/88.md","lastUpdated":null}'),r={name:"issues/88.md"};function s(h,a,l,u,m,n){return o(),e("div",null,a[0]||(a[0]=[i('如何添加m3u格式文件的电台
播放列表所有电台
,或者口令: 播放歌曲北京城市广播
评论
评论 1 - guoxiangke
评论 2 - guoxiangke
评论 3 - hanxi
评论 4 - lazybabyz
评论 5 - hanxi
评论 6 - lazybabyz
',33)]))}const d=t(r,[["render",s]]);export{p as __pageData,d as default};
diff --git a/docs/.vitepress/dist/assets/issues_88.md.VOyx9x2b.lean.js b/docs/.vitepress/dist/assets/issues_88.md.VOyx9x2b.lean.js
deleted file mode 100644
index 9bd803f..0000000
--- a/docs/.vitepress/dist/assets/issues_88.md.VOyx9x2b.lean.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as t,c as e,a0 as i,o}from"./chunks/framework.p2VkXzrt.js";const p=JSON.parse('{"title":"如何添加m3u格式文件的电台","description":"","frontmatter":{"title":"如何添加m3u格式文件的电台"},"headers":[],"relativePath":"issues/88.md","filePath":"issues/88.md","lastUpdated":null}'),r={name:"issues/88.md"};function s(h,a,l,u,m,n){return o(),e("div",null,a[0]||(a[0]=[i('如何添加m3u格式文件的电台
播放列表所有电台
,或者口令: 播放歌曲北京城市广播
评论
评论 1 - guoxiangke
评论 2 - guoxiangke
评论 3 - hanxi
评论 4 - lazybabyz
评论 5 - hanxi
评论 6 - lazybabyz
',33)]))}const d=t(r,[["render",s]]);export{p as __pageData,d as default};
diff --git a/docs/.vitepress/dist/assets/issues_94.md.GErTTh9P.js b/docs/.vitepress/dist/assets/issues_94.md.GErTTh9P.js
deleted file mode 100644
index 2f10e82..0000000
--- a/docs/.vitepress/dist/assets/issues_94.md.GErTTh9P.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import{_ as i,c as a,a0 as n,o as t}from"./chunks/framework.p2VkXzrt.js";const d=JSON.parse('{"title":"采用config.json配置方式","description":"","frontmatter":{"title":"采用config.json配置方式"},"headers":[],"relativePath":"issues/94.md","filePath":"issues/94.md","lastUpdated":null}'),h={name:"issues/94.md"};function p(l,s,k,e,E,o){return t(),a("div",null,s[0]||(s[0]=[n(`采用config.json配置方式
--config
参数。pip install xiaomusic
xiaomusic --config ./config.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
-}
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
参数。评论
评论 1 - alitime
评论 2 - hanxi
评论 3 - hanxi
`,26)]))}const g=i(h,[["render",p]]);export{d as __pageData,g as default};
diff --git a/docs/.vitepress/dist/assets/issues_94.md.GErTTh9P.lean.js b/docs/.vitepress/dist/assets/issues_94.md.GErTTh9P.lean.js
deleted file mode 100644
index 2f10e82..0000000
--- a/docs/.vitepress/dist/assets/issues_94.md.GErTTh9P.lean.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import{_ as i,c as a,a0 as n,o as t}from"./chunks/framework.p2VkXzrt.js";const d=JSON.parse('{"title":"采用config.json配置方式","description":"","frontmatter":{"title":"采用config.json配置方式"},"headers":[],"relativePath":"issues/94.md","filePath":"issues/94.md","lastUpdated":null}'),h={name:"issues/94.md"};function p(l,s,k,e,E,o){return t(),a("div",null,s[0]||(s[0]=[n(`采用config.json配置方式
--config
参数。pip install xiaomusic
xiaomusic --config ./config.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
-}
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
参数。评论
评论 1 - alitime
评论 2 - hanxi
评论 3 - hanxi
`,26)]))}const g=i(h,[["render",p]]);export{d as __pageData,g as default};
diff --git a/docs/.vitepress/dist/assets/issues_96.md.D6uW10Mi.js b/docs/.vitepress/dist/assets/issues_96.md.D6uW10Mi.js
deleted file mode 100644
index e163012..0000000
--- a/docs/.vitepress/dist/assets/issues_96.md.D6uW10Mi.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as a,c as e,a0 as s,o as i}from"./chunks/framework.p2VkXzrt.js";const m=JSON.parse('{"title":"ios系统上的捷径配置","description":"","frontmatter":{"title":"ios系统上的捷径配置"},"headers":[],"relativePath":"issues/96.md","filePath":"issues/96.md","lastUpdated":null}'),o={name:"issues/96.md"};function r(c,t,d,l,n,p){return i(),e("div",null,t[0]||(t[0]=[s('ios系统上的捷径配置
评论
ios系统上的捷径配置
评论
💬 FAQ问题集合
❓ XIAOMUSIC_HOSTNAME 怎么填
❓ Login Failed 登陆失败
❓ 网页后台可以播放,语音控制无效
M01/XMYX01JY 小米小爱音箱HD
获取对话记录的接口比较特殊,需要开启【特殊型号获取对话记录:】开关才能正常语音控制。❓ 日志显示正在播放,却没有声音
https://
前缀。❓ 无法播放 flac 格式歌曲
❓ docker 镜像拉取失败
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
❓ DNS 解析错误
aiohttp.client_ _exceptions. ClientConnectorError: Cannot connect to host account.xiaomi.com:443 ssl:False [Temporary failure in name resolution]
❓ 点击播放后需要很久才开始播放的问题
❓ 如何配置多个歌曲目录
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
,盘符号开头,用 /
分割。❓ 能不能中文名
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
❓ 报错 601
Exception: Error https://api2.mina.mi.com/remote/ubus: {"code":601,"message":"illegal argument exception","data":"IllegalArgumentException: ubus call format illegal!"}
❓ 新功能没有生效
❓ 为什么会先说小爱音箱自带的回答,再说下载中或者过一会儿才播放本地歌曲
评论
评论 1 - shissx
评论 2 - hanxi
评论 3 - Dx0123
评论 4 - hanxi
RUN pip install -U xiaomusic
评论 5 - Dx0123
RUN pip install -U xiaomusic
评论 6 - hanxi
评论 7 - hanxi
评论 8 - hanxi
评论 9 - sqmcool
评论 10 - hanxi
评论 11 - schppd
评论 12 - hanxi
评论 13 - schppd
评论 14 - hanxi
评论 15 - guoxiangke
评论 16 - agigogo
在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
评论 17 - hanxi
在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
评论 18 - agigogo
在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
设置页面没有可勾选项?
评论 19 - agigogo
在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
设置页面没有可勾选项?
评论 20 - hanxi
评论 21 - agigogo
评论 22 - agigogo
评论 23 - Tueafternoon
评论 24 - hanxi
评论 25 - hanxi
评论 26 - Tueafternoon
评论 27 - zealler9560
评论 28 - adidas004
评论 29 - hanxi
评论 30 - adidas004
评论 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
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
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
评论 35 - wusemao
评论 36 - hanxi
评论 37 - quanmao
评论 38 - hanxi
@eaDir,tmp
即可。评论 39 - quanmao
@eaDir,tmp
即可。评论 40 - hanxi
@eaDir,tmp
即可。评论 41 - CallEdison
问题一:能进控制面板,进不了设置页面,容器没有log生成,我昨天已经设置好了,现在功能能正常使用,但是进不了设置页面了问题二:昨天能进的时候发现本地下载目录有歌曲,但是设置里面的全部歌曲里面没有,搜索框搜索又能搜的到。
评论 42 - hanxi
问题一:能进控制面板,进不了设置页面,容器没有log生成,我昨天已经设置好了,现在功能能正常使用,但是进不了设置页面了问题二:昨天能进的时候发现本地下载目录有歌曲,但是设置里面的全部歌曲里面没有,搜索框搜索又能搜的到。
评论 43 - huahua-er
评论 44 - CallEdison
评论 45 - hanxi
评论 46 - hanxi
评论 47 - like1020
请教一下,本地列表歌单里的歌曲即便设置为全部循环或随机播放,依然是不断地单曲循环,只能自己手动点下一首,请问是什么情况?
评论 48 - tchgtr
评论 49 - hanxi
评论 50 - tchgtr
评论 51 - hanxi
评论 52 - tchgtr
评论 53 - hanxi
评论 54 - tchgtr
评论 55 - tchgtr
评论 56 - tchgtr
评论 57 - tianting123
评论 58 - oklrc
评论 59 - hanxi
docker compose pull
-docker compose up -d
评论 60 - zhiquanchi
`,292)]))}const m=t(o,[["render",n]]);export{d as __pageData,m as default};
diff --git a/docs/.vitepress/dist/assets/issues_99.md.amwtZpFn.lean.js b/docs/.vitepress/dist/assets/issues_99.md.amwtZpFn.lean.js
deleted file mode 100644
index 4304df4..0000000
--- a/docs/.vitepress/dist/assets/issues_99.md.amwtZpFn.lean.js
+++ /dev/null
@@ -1,73 +0,0 @@
-import{_ as t,c as e,a0 as s,o as i}from"./chunks/framework.p2VkXzrt.js";const d=JSON.parse('{"title":"💬 FAQ问题集合","description":"","frontmatter":{"title":"💬 FAQ问题集合"},"headers":[],"relativePath":"issues/99.md","filePath":"issues/99.md","lastUpdated":null}'),o={name:"issues/99.md"};function n(l,a,p,c,r,u){return i(),e("div",null,a[0]||(a[0]=[s(`💬 FAQ问题集合
❓ XIAOMUSIC_HOSTNAME 怎么填
❓ Login Failed 登陆失败
❓ 网页后台可以播放,语音控制无效
M01/XMYX01JY 小米小爱音箱HD
获取对话记录的接口比较特殊,需要开启【特殊型号获取对话记录:】开关才能正常语音控制。❓ 日志显示正在播放,却没有声音
https://
前缀。❓ 无法播放 flac 格式歌曲
❓ docker 镜像拉取失败
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
❓ DNS 解析错误
aiohttp.client_ _exceptions. ClientConnectorError: Cannot connect to host account.xiaomi.com:443 ssl:False [Temporary failure in name resolution]
❓ 点击播放后需要很久才开始播放的问题
❓ 如何配置多个歌曲目录
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
,盘符号开头,用 /
分割。❓ 能不能中文名
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
❓ 报错 601
Exception: Error https://api2.mina.mi.com/remote/ubus: {"code":601,"message":"illegal argument exception","data":"IllegalArgumentException: ubus call format illegal!"}
❓ 新功能没有生效
❓ 为什么会先说小爱音箱自带的回答,再说下载中或者过一会儿才播放本地歌曲
评论
评论 1 - shissx
评论 2 - hanxi
评论 3 - Dx0123
评论 4 - hanxi
RUN pip install -U xiaomusic
评论 5 - Dx0123
RUN pip install -U xiaomusic
评论 6 - hanxi
评论 7 - hanxi
评论 8 - hanxi
评论 9 - sqmcool
评论 10 - hanxi
评论 11 - schppd
评论 12 - hanxi
评论 13 - schppd
评论 14 - hanxi
评论 15 - guoxiangke
评论 16 - agigogo
在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
评论 17 - hanxi
在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
评论 18 - agigogo
在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
设置页面没有可勾选项?
评论 19 - agigogo
在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
在docker里可以运行,但是没法播放设置页面中的播放链接,选中设备那里是空的,是不是没成功?怎么调整?
设置页面没有可勾选项?
评论 20 - hanxi
评论 21 - agigogo
评论 22 - agigogo
评论 23 - Tueafternoon
评论 24 - hanxi
评论 25 - hanxi
评论 26 - Tueafternoon
评论 27 - zealler9560
评论 28 - adidas004
评论 29 - hanxi
评论 30 - adidas004
评论 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
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
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
评论 35 - wusemao
评论 36 - hanxi
评论 37 - quanmao
评论 38 - hanxi
@eaDir,tmp
即可。评论 39 - quanmao
@eaDir,tmp
即可。评论 40 - hanxi
@eaDir,tmp
即可。评论 41 - CallEdison
问题一:能进控制面板,进不了设置页面,容器没有log生成,我昨天已经设置好了,现在功能能正常使用,但是进不了设置页面了问题二:昨天能进的时候发现本地下载目录有歌曲,但是设置里面的全部歌曲里面没有,搜索框搜索又能搜的到。
评论 42 - hanxi
问题一:能进控制面板,进不了设置页面,容器没有log生成,我昨天已经设置好了,现在功能能正常使用,但是进不了设置页面了问题二:昨天能进的时候发现本地下载目录有歌曲,但是设置里面的全部歌曲里面没有,搜索框搜索又能搜的到。
评论 43 - huahua-er
评论 44 - CallEdison
评论 45 - hanxi
评论 46 - hanxi
评论 47 - like1020
请教一下,本地列表歌单里的歌曲即便设置为全部循环或随机播放,依然是不断地单曲循环,只能自己手动点下一首,请问是什么情况?
评论 48 - tchgtr
评论 49 - hanxi
评论 50 - tchgtr
评论 51 - hanxi
评论 52 - tchgtr
评论 53 - hanxi
评论 54 - tchgtr
评论 55 - tchgtr
评论 56 - tchgtr
评论 57 - tianting123
评论 58 - oklrc
评论 59 - hanxi
docker compose pull
-docker compose up -d
评论 60 - zhiquanchi
`,292)]))}const m=t(o,[["render",n]]);export{d as __pageData,m as default};
diff --git a/docs/.vitepress/dist/assets/issues_index.md.Do1eTGGf.js b/docs/.vitepress/dist/assets/issues_index.md.Do1eTGGf.js
deleted file mode 100644
index b3cc937..0000000
--- a/docs/.vitepress/dist/assets/issues_index.md.Do1eTGGf.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import{_ as s,c as a,a0 as t,o as l}from"./chunks/framework.p2VkXzrt.js";const c=JSON.parse('{"title":"XiaoMusic: 无限听歌,解放小爱音箱","description":"","frontmatter":{},"headers":[],"relativePath":"issues/index.md","filePath":"issues/index.md","lastUpdated":null}'),h={name:"issues/index.md"};function e(n,i,p,k,r,o){return l(),a("div",null,i[0]||(i[0]=[t(`XiaoMusic: 无限听歌,解放小爱音箱
👋 最简配置运行
docker run -p 8090:8090 -v /xiaomusic/music:/app/music -v /xiaomusic/conf:/app/conf hanxi/xiaomusic
docker run -p 8090:8090 -v /xiaomusic/music:/app/music -v /xiaomusic/conf:/app/conf m.daocloud.io/docker.io/hanxi/xiaomusic
services:
- xiaomusic:
- image: hanxi/xiaomusic
- container_name: xiaomusic
- restart: unless-stopped
- ports:
- - 8090:8090
- volumes:
- - /xiaomusic/music:/app/music
- - /xiaomusic/conf:/app/conf
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
mkdir -p /xiaomusic/{music,conf}
命令新建目录。*
号的配置是必须要配置的,其他的用不上时不用修改。初次配置时需要在页面上输入小米账号和密码保存后才能获取到设备列表。🔥 修改默认8090端口映射
方法1: 不修改监听端口 8090
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
方法2: 修改监听端口 8090 为 5678
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
🤐 支持语音口令
🛠️ pip 方式安装运行
> 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/94xiaomusic
即可启动。🔩 开发环境运行
pdm run xiaomusic.py
🚦 代码提交规范
pdm lintfmt
本地编译 Docker Image
docker build -t xiaomusic .
技术栈
早期版本使用的是 Flask。已测试支持的设备
型号 名称 L06A 小爱音箱 L07A Redmi小爱音箱 Play S12/S12A/MDZ-25-DA 小米AI音箱 LX5A 小爱音箱 万能遥控版 LX05 小爱音箱Play(2019款) L15A 小米AI音箱(第二代) L16A Xiaomi Sound L17A Xiaomi Sound Pro LX06 小爱音箱Pro LX01 小爱音箱mini L05B 小爱音箱Play L05C 小米小爱音箱Play 增强版 L09A 小米音箱Art LX04 X10A X08A 已经支持的触屏版 X08C X08E X8F 需要设置【型号兼容模式】选项为 true M01/XMYX01JY 小米小爱音箱HD 需要设置【特殊型号获取对话记录】选项为 true 才能语音播放 🎵 支持音乐格式
💡 简易的控制面板
🌏 网络歌单功能
🍺 更多其他可选配置
/app/config
,具体见 https://github.com/hanxi/xiaomusic/issues/74/app/cache
,对应后台的 【缓存文件目录】。L05C
)使用 MiIO 支持 tts 能力,默认为空,命令选择见 MiService-fork 文档⚠️ 安全提醒
🤔 高级篇
📢 讨论区
❤️ 感谢
👉 其他教程
🚨 免责声明
Star History
赞赏
License
XiaoMusic: 无限听歌,解放小爱音箱
👋 最简配置运行
docker run -p 8090:8090 -v /xiaomusic/music:/app/music -v /xiaomusic/conf:/app/conf hanxi/xiaomusic
docker run -p 8090:8090 -v /xiaomusic/music:/app/music -v /xiaomusic/conf:/app/conf m.daocloud.io/docker.io/hanxi/xiaomusic
services:
- xiaomusic:
- image: hanxi/xiaomusic
- container_name: xiaomusic
- restart: unless-stopped
- ports:
- - 8090:8090
- volumes:
- - /xiaomusic/music:/app/music
- - /xiaomusic/conf:/app/conf
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
mkdir -p /xiaomusic/{music,conf}
命令新建目录。*
号的配置是必须要配置的,其他的用不上时不用修改。初次配置时需要在页面上输入小米账号和密码保存后才能获取到设备列表。🔥 修改默认8090端口映射
方法1: 不修改监听端口 8090
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
方法2: 修改监听端口 8090 为 5678
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
🤐 支持语音口令
🛠️ pip 方式安装运行
> 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/94xiaomusic
即可启动。🔩 开发环境运行
pdm run xiaomusic.py
🚦 代码提交规范
pdm lintfmt
本地编译 Docker Image
docker build -t xiaomusic .
技术栈
早期版本使用的是 Flask。已测试支持的设备
型号 名称 L06A 小爱音箱 L07A Redmi小爱音箱 Play S12/S12A/MDZ-25-DA 小米AI音箱 LX5A 小爱音箱 万能遥控版 LX05 小爱音箱Play(2019款) L15A 小米AI音箱(第二代) L16A Xiaomi Sound L17A Xiaomi Sound Pro LX06 小爱音箱Pro LX01 小爱音箱mini L05B 小爱音箱Play L05C 小米小爱音箱Play 增强版 L09A 小米音箱Art LX04 X10A X08A 已经支持的触屏版 X08C X08E X8F 需要设置【型号兼容模式】选项为 true M01/XMYX01JY 小米小爱音箱HD 需要设置【特殊型号获取对话记录】选项为 true 才能语音播放 🎵 支持音乐格式
💡 简易的控制面板
🌏 网络歌单功能
🍺 更多其他可选配置
/app/config
,具体见 https://github.com/hanxi/xiaomusic/issues/74/app/cache
,对应后台的 【缓存文件目录】。L05C
)使用 MiIO 支持 tts 能力,默认为空,命令选择见 MiService-fork 文档⚠️ 安全提醒
🤔 高级篇
📢 讨论区
❤️ 感谢
👉 其他教程
🚨 免责声明
Star History
赞赏
License
Runtime API Examples
useData()
API can be used to access site, theme, and page data for the current page. It works in both .md
and .vue
files:<script setup>
-import { useData } from 'vitepress'
-
-const { theme, page, frontmatter } = useData()
-</script>
-
-## Results
-
-### Theme Data
-<pre>{{ theme }}</pre>
-
-### Page Data
-<pre>{{ page }}</pre>
-
-### Page Frontmatter
-<pre>{{ frontmatter }}</pre>
Results
Theme Data
`,6)),a("pre",null,t(i(n)),1),e[1]||(e[1]=a("h3",{id:"page-data",tabindex:"-1"},[s("Page Data "),a("a",{class:"header-anchor",href:"#page-data","aria-label":'Permalink to "Page Data"',target:"_self"},"")],-1)),a("pre",null,t(i(l)),1),e[2]||(e[2]=a("h3",{id:"page-frontmatter",tabindex:"-1"},[s("Page Frontmatter "),a("a",{class:"header-anchor",href:"#page-frontmatter","aria-label":'Permalink to "Page Frontmatter"',target:"_self"},"")],-1)),a("pre",null,t(i(r)),1),e[3]||(e[3]=a("h2",{id:"more",tabindex:"-1"},[s("More "),a("a",{class:"header-anchor",href:"#more","aria-label":'Permalink to "More"',target:"_self"},"")],-1)),e[4]||(e[4]=a("p",null,[s("Check out the documentation for the "),a("a",{href:"https://vitepress.dev/reference/runtime-api#usedata",target:"_self"},"full list of runtime APIs"),s(".")],-1))]))}});export{f as __pageData,E as default};
diff --git a/docs/.vitepress/dist/assets/test1_api-examples.md.LfndiNnB.lean.js b/docs/.vitepress/dist/assets/test1_api-examples.md.LfndiNnB.lean.js
deleted file mode 100644
index 061774a..0000000
--- a/docs/.vitepress/dist/assets/test1_api-examples.md.LfndiNnB.lean.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import{u as p,c as h,a0 as o,j as a,t,k as i,a as s,o as d}from"./chunks/framework.p2VkXzrt.js";const f=JSON.parse('{"title":"Runtime API Examples","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"test1/api-examples.md","filePath":"test1/api-examples.md","lastUpdated":null}'),g={name:"test1/api-examples.md"},E=Object.assign(g,{setup(m){const{site:k,theme:n,page:l,frontmatter:r}=p();return(u,e)=>(d(),h("div",null,[e[0]||(e[0]=o(`Runtime API Examples
useData()
API can be used to access site, theme, and page data for the current page. It works in both .md
and .vue
files:<script setup>
-import { useData } from 'vitepress'
-
-const { theme, page, frontmatter } = useData()
-</script>
-
-## Results
-
-### Theme Data
-<pre>{{ theme }}</pre>
-
-### Page Data
-<pre>{{ page }}</pre>
-
-### Page Frontmatter
-<pre>{{ frontmatter }}</pre>
Results
Theme Data
`,6)),a("pre",null,t(i(n)),1),e[1]||(e[1]=a("h3",{id:"page-data",tabindex:"-1"},[s("Page Data "),a("a",{class:"header-anchor",href:"#page-data","aria-label":'Permalink to "Page Data"',target:"_self"},"")],-1)),a("pre",null,t(i(l)),1),e[2]||(e[2]=a("h3",{id:"page-frontmatter",tabindex:"-1"},[s("Page Frontmatter "),a("a",{class:"header-anchor",href:"#page-frontmatter","aria-label":'Permalink to "Page Frontmatter"',target:"_self"},"")],-1)),a("pre",null,t(i(r)),1),e[3]||(e[3]=a("h2",{id:"more",tabindex:"-1"},[s("More "),a("a",{class:"header-anchor",href:"#more","aria-label":'Permalink to "More"',target:"_self"},"")],-1)),e[4]||(e[4]=a("p",null,[s("Check out the documentation for the "),a("a",{href:"https://vitepress.dev/reference/runtime-api#usedata",target:"_self"},"full list of runtime APIs"),s(".")],-1))]))}});export{f as __pageData,E as default};
diff --git a/docs/.vitepress/dist/assets/test1_index.md.Bma_WtEx.js b/docs/.vitepress/dist/assets/test1_index.md.Bma_WtEx.js
deleted file mode 100644
index 0dd3f3f..0000000
--- a/docs/.vitepress/dist/assets/test1_index.md.Bma_WtEx.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as t,c as a,a0 as o,o as d}from"./chunks/framework.p2VkXzrt.js";const f=JSON.parse('{"title":"note","description":"","frontmatter":{},"headers":[],"relativePath":"test1/index.md","filePath":"test1/index.md","lastUpdated":null}'),n={name:"test1/index.md"};function r(s,e,c,i,l,p){return d(),a("div",null,e[0]||(e[0]=[o('note
note
文件夹中创建/删除md
文件,侧边栏数据会被自动更新。md
file in the note
folder, and the sidebar data will be updated automatically.note
note
文件夹中创建/删除md
文件,侧边栏数据会被自动更新。md
file in the note
folder, and the sidebar data will be updated automatically.Markdown Extension Examples
Syntax Highlighting
\`\`\`js{4}
-export default {
- data () {
- return {
- msg: 'Highlighted!'
- }
- }
-}
-\`\`\`
export default {
- data () {
- return {
- msg: 'Highlighted!'
- }
- }
-}
Custom Containers
::: info
-This is an info box.
-:::
-
-::: tip
-This is a tip.
-:::
-
-::: warning
-This is a warning.
-:::
-
-::: danger
-This is a dangerous warning.
-:::
-
-::: details
-This is a details block.
-:::
Details
More
Markdown Extension Examples
Syntax Highlighting
\`\`\`js{4}
-export default {
- data () {
- return {
- msg: 'Highlighted!'
- }
- }
-}
-\`\`\`
export default {
- data () {
- return {
- msg: 'Highlighted!'
- }
- }
-}
Custom Containers
::: info
-This is an info box.
-:::
-
-::: tip
-This is a tip.
-:::
-
-::: warning
-This is a warning.
-:::
-
-::: danger
-This is a dangerous warning.
-:::
-
-::: details
-This is a details block.
-:::
Details
More
解放小爱音箱"
tagline: 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载
actions:
- theme: brand
@@ -13,6 +13,9 @@ hero:
- theme: alt
text: 文档汇总
link: /issues/211
+ - theme: alt
+ text: GitHub
+ link: https://github.com/hanxi/xiaomusic
features:
- title: MIT 开源
diff --git a/docs/issues/99.md b/docs/issues/99.md
index 9b98b41..cf715bc 100644
--- a/docs/issues/99.md
+++ b/docs/issues/99.md
@@ -959,11 +959,5 @@ docker compose pull
docker compose up -d
```
----
-
-### 评论 60 - zhiquanchi
-
-我在阿里云的服务器上运行的docker,我登录了小米账号,但是 操控面板 里面 不显示我的设备。音箱是pro LX06
-
---
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/99)