【智能家居】旧手机+Linux deploy+Squeezelite+LMS打造廉价DSD播放系统

前置条件:

1、已root安卓手机

2、安装 Linux deploy + ubuntu

参考:

[进阶教程] 闲置安卓手机安装HA变身智能家居中枢,及网关接入教程

[进阶教程] 用树莓派打通任督二脉控制你家里所有能发声音有wifi的设备

https://github.com/meefik/linuxdeploy/issues/223

目标:

使用罗技的Logitech Media Server系统集中控制各种能发声的设备并接入HA成为智能家居音乐子系统!虽然已经有不少现成的产品,目前知名度较高的就是sonos音箱,价格还算ok,但我们这次的目标是要利用闲置手机实现同样高大上的效果!!土豪可以绕路了…

我的另一篇文章:【docker】【Node-Red】【智能家居音乐系统】HA接入网易云音乐

正文:

1、root手机、安装Linux deploy和ubuntu的过程就跳过了,详细看上面给出的帖子链接就可以了。

2、安装 Squeezelite  ,sudo apt-get install squeezelite -y

3、参考上面链接三,执行下面脚本,外文好的可以看原贴,不想看的直接看我的使用步骤就好啦

《【智能家居】旧手机+Linux deploy+Squeezelite+LMS打造廉价DSD播放系统》

最后出来这些信息:

《【智能家居】旧手机+Linux deploy+Squeezelite+LMS打造廉价DSD播放系统》

然后我们组合一下脚本,复制 To Start:部分,每一行后面加 |,然后丢到SSH里运行命令(不再使用后请使用To Stop部分还原设置或重启手机)

amixer cset numid=407,iface=MIXER,name=’RX1 MIX1 INP1′ 5 |
amixer cset numid=406,iface=MIXER,name=’RX1 MIX1 INP2′ 10 |
amixer cset numid=404,iface=MIXER,name=’RX2 MIX1 INP1′ 6 |
amixer cset numid=403,iface=MIXER,name=’RX2 MIX1 INP2′ 11 |
amixer cset numid=26,iface=MIXER,name=’HPHL Volume’ 10 |
amixer cset numid=27,iface=MIXER,name=’HPHR Volume’ 10 |
amixer cset numid=371,iface=MIXER,name=’SLIM TX3 MUX’ 1 |
amixer cset numid=369,iface=MIXER,name=’SLIM TX5 MUX’ 2 |
amixer cset numid=28,iface=MIXER,name=’RX1 Digital Volume’ 84 |
amixer cset numid=29,iface=MIXER,name=’RX2 Digital Volume’ 84 |
amixer cset numid=304,iface=MIXER,name=’SLIMBUS_0_RX Audio Mixer MultiMedia1′ on

最后一步启动 : squeezelite -n  hello

一般来说就可以在LMS里看到并播放音乐啦!

如果还是不行的话,就要再指定一下输出设备,从上面执行的脚本开始处可以看到我手机的声卡信息如下:hw:0,0

《【智能家居】旧手机+Linux deploy+Squeezelite+LMS打造廉价DSD播放系统》

接着 squeezelite -l  列出输出设备,有很多,但根据我直觉肯定是红色框框那个(不要问我为什么哈),再次启动 squeezelite -o hw:CARD=apq8064tablasnd,DEV=0  -n hello   试试!

《【智能家居】旧手机+Linux deploy+Squeezelite+LMS打造廉价DSD播放系统》

后话:

1、squeezelite 能在很多设备上安装,比如树莓派,或者便宜点的香橙派,网上还有安装到openWRT 的文章,外接一个淘宝十多块的USB声卡就可以。

2、Logitech Media Server 支持安装的平台也很多,树莓派、Linux、window、Mac OS、群晖套件中心也有。

3、上面的方法针对使用环境不同,设置也不同,比如说用手机本身的扬声器发声和通过音频线连接音箱发声,运行脚本生成的设置信息是不同的。蓝牙连接还没测试,留待大家去尝试了。

4、Linux deploy下加入到rc.local做一个开机启动非常方便,稳定性正在测试….

脚本:

#!/bin/bash

sudo apt install alsa-utils

echo Play music or start recording and press enter.
read key

c=$(grep RUNNING /proc/asound/card*/pcm*/sub*/status | grep -o 'card[0-9]*' | grep -o [0-9]*) && echo "Card: $c"
p=$(grep RUNNING /proc/asound/card*/pcm*/sub*/status | grep -o 'pcm[0-9]*p' | grep -o [0-9]*) && { echo "Playback device: $p"; echo "i.e. alsa device is hw:$c,$p"; }
r=$(grep RUNNING /proc/asound/card*/pcm*/sub*/status | grep -o 'pcm[0-9]*c' | grep -o [0-9]*) && { echo "Recording device: $r"; echo "i.e. alsa device is hw:$c,$r"; }

echo
printf 'Stop playback / recording and press enter.'
read key

# alsactl doesn't seem to work when piped to grep
echo 'Start and stop playback / recording and observe values changes.'
sleep 3
echo 'Terminate when done.'
echo
trap 'pkill -1 alsactl' SIGINT
alsactl monitor

trap "kill $$" SIGINT
echo
printf 'Write Control Identifier (nmuid) of changed values with space: '
read -a val

for v in ${val[@]}
do
	printf 'Play music / start recording and press enter.'
	read key
	v1="$(amixer cget "$(amixer controls | grep "numid=${v},")" | grep ': values=' | cut -d= -f2)"
	printf 'Stop playback / recording and press enter.'
	read key
	sleep 3
	v2="$(amixer cget "$(amixer controls | grep "numid=${v},")" | grep ': values=' | cut -d= -f2)"

	if [ "$v1" = "$v2" ]; then
		echo "ERROR: No change in values detected for Control Identifier $v."
		continue
	fi

	V1="$(printf '%s\n%s' "$V1" "amixer cset $(amixer controls | grep "numid=${v},") $v1")"
	V2="$(printf '%s\n%s' "$V2" "amixer cset $(amixer controls | grep "numid=${v},") $v2")"
done

[ -z "$V1" ] || { printf '\n To start:'; echo "$V1"; }
[ -z "$V2" ] || { printf '\n To stop:'; echo "$V2"; }
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注