背景
Openwrt 刷入到了2010年的sony电脑,发现其中有AirPlay播放的功能,顺带发现自己有两个不用的音响
技术水平:
纯0基础的小白,纯粹是自己爱折腾,我是个文科生毕业,你就知道我有多小白了吧,感谢GPT和各路大佬让我摸索成功,参考教程见文末
如果是大佬可能不需要看这篇文章
阶段1:胡乱尝试
我先是在esir编译的软件上进行安装和调试,但是输入aplay -l的结果显示 No soundcard
输入uname -a
得到大概是5.10 的内核版本
我原本以为插入usb转声卡之后会有希望,奈何我发现系统中并没有Kmod-usb-audio的软件包……
误以为自己借助GPT有能力可以配置上这个软件包,最后还是失败告终
阶段2: 重装5.4内核的openwrt
不认输的我接着重新找了一圈发现有大佬的博客文章中写说,需要5.4内核的oepnwrt才有可能检测到声卡
https://www.cnblogs.com/nanke-dream/p/17087049.html
痛定思痛,我重装了openwrt 5.4内核版本。
这里也出现了一个问题就是我在这个网址上下载的 gz格式的固件解压一直显示失败……,mac电脑上直接无法解压,换到windows电脑上显示解压错误
重装的5.4内核openwrt,选的是高大全版本,感恩~
【2022-3-4】更新 高大全Openwrt x86更新最新5.4内核5.4.234 高大全+应用商店-OPENWRT专版-恩山无线论坛 (right.com.cn)
但是我真的通过导入镜像的软件包,导入到自己笔记本电脑的硬盘中后发现竟然能够成功输入的……
这里给我的收获就是解压有错误提示的gz文件未必不能使用
很快我就重刷完了5.4内核的系统。
阶段3: 终于出声音
配置完5.4内核的openwrt之后,我原本设想会很顺利的,再加上我之前用windows电脑试过usb转3.5mm音频线的设备,可以使得我的音响发出声音。
我就想沿用这一套配置方法,当时的思路是电脑-usb转3.5mm音频线- 音响,这样的一个连线方式。然后按照韩风大佬的方式进行了配置。
参考:
【韩风Talk】Openwrt的Airplay音频插件的玩法。小坑解决了,才能玩的更爽嘛!_哔哩哔哩_bilibili
1 声音输出口的配置
输入 aplay-l 得到如下信息
card 0: MID [HDA Intel MID], device 0: ALC269 Analog [ALC269 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: Audio [AB13X USB Audio], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
因为我想要声音从USB声卡端口发出,所以 x=2, y=0。
更改/etc/asound.conf ,添加如下信息
defaults.ctl.card x
defaults.pcm.card x
defaults.timer.card x
defaults.pcm.device y
2 shairport-sync_file 更改
Finalshell 输入:
alsamixer
这里调节的是默认音频输出的音量
(这里没有截图对,这是笔记本自带声卡的音量图)但意思差不多,左右调节了位置,上下调节音量
3 设置音量
设备重启后会恢复成默认音量
alsactl --file /etc/asound.state store
找到 /etc/rc.local 的文件,复制黏贴:
alsactl --file /etc/asound.state restore
在Finalshell中经常修改的文件和其位置
/etc/shairport-sync.conf
/etc/rc.local
/etc/asound.conf
但是按照这一系列步骤走下来之后,我的音响有两个问题:
1)音响声音太小
2)存在爆音
存在爆音的问题真的让人无法忍受,虽说也不是一个音乐发烧友,但是谁没事听存在爆音的音乐啊
这一阶段我基本上有一点绝望了,实在是不想弄了,我想说大不了买个airplay接收器吧。过了一天多,还是不甘心,我想着都已经有声音发出来了,总比没有声音好吧
我就进行了下一步尝试
阶段4: 解决爆音问题
这里我其实尝试了很多不同的方法,由于不确定是哪个大佬的方法起作用,直接整理分享出来。
先说我最后怎么解决的:
我在尝试了一系列方法之后,音响插在usb转接口上还是有很多爆音,我就想着要不最后把音响直接插入到电脑上带有“耳机”🎧标识的孔里
然后将Headphones声音调到最大,这样可以让音响声音大一些。
最后音响声音还是比较轻,但是没有爆音了,歌曲也不会断断续续了,不打算折腾了满足我的基本使用需求了
我怎么解决的?
将speaker 一栏的声音调到0,因为这个是电脑上自带扬声器的音量控制。
将Headphones声音调到最大,这样可以让音响声音大一些。
通过输入aplay -D hw:Audio --dump-hw-params /dev/zero
(hw:Audio 是需要更改的,可以通过 shairport -sync -h 来查询更改。比如你连接在笔记本的音频接口应该输入的是 hw:MID)
假设你看到的输出类似于下面的内容:
ACCESS: MMAP_INTERLEAVED RW_INTERLEAVED
FORMAT: S16_LE S24_LE S32_LE
SUBFORMAT: STD
SAMPLE_BITS: [16 24 32]
CHANNELS: [2 8]
RATE: [44100 192000]
PERIOD_TIME: [1000 2000000]
PERIOD_SIZE: [80 524288]
BUFFER_SIZE: [160 1048576]
如下的修改是GPT给我提出的方法,我自己是这样配置的,但是未必正确
调整 /etc/shairport-sync.conf
-
确保采样率匹配: 如果设备支持的采样率范围是
[44100 192000]
,那么在shairport-sync.conf
文件中,确保你设置的output_backend
支持这些采样率。例如,如果设备支持 44100Hz,那么output_rate
应该设置为 44100Hz。-
⚠️这里需要注意一点
shairport-sync.conf
对于output_rate 是有设定的 // output_rate = 44100; // can be "auto", 44100, 88200, 176400 or 352800, but the device must have the capability. -
因为我的音响测出来sample rate 是48000 Hz,我询问了GPT,它是告诉我写44100还是比较合适的
-
-
调整
buffer_size
和period_size
:-
buffer_size
: 可以根据设备的支持范围,设置为适当的值。例如,如果设备支持的buffer_size
在[160 1048576]
之间,通常推荐设置为 4 倍的采样率。-
对于 44100Hz 采样率,
buffer_size
可以设置为 176400 或更高。
-
-
period_size
: 可以设置为buffer_size
的 1/8 或 1/16。-
如果
buffer_size
设置为 176400,period_size
可以设置为 22050 或 11025。
-
-
-
检查音频格式:
-
FORMAT
一般为S16_LE
(16位小端格式),在shairport-sync.conf
中,如果使用其他格式如 24 位或 32 位深度,确保设备支持。
-
GPT建议shairport-sync.cnf 的文件配置
alsa = {
output_device = "hw:Audio"; // Your USB sound card
mixer_control_name = "PCM"; // Assuming you are using PCM for mixing
output_rate = 44100; // Use 44100 as it is within the allowed values
output_format = "S16_LE"; // 16-bit little-endian format
period_size = 131072; // Period size you can adjust if needed
buffer_size = 262144; // Buffer size you can adjust if needed
};
shairport-sync.cnf中有很多的参数,你可以按照自己的需要去问GPT进行调整,或者参考官方的sample file看看其中的配置参数https://github.com/mikebrady/shairport-sync/blob/master/scripts/shairport-sync.conf
总之:具体更改方式最好是得到你自己的音响数据之后去问问GPT应该怎么改
/etc/rc.local更改
最后我还设置一下rc.local 的文件,再加入如下的代码
amixer -c 0 sset Master unmute
amixer -c 0 sset Master 120%
amixer -c 0 sset PCM 50%
amixer -c 0 sset Headphone unmute
amixer -c 0 sset Speaker mute # Optional, if you don't want sound from the built-in speakers
阶段5: 躺着享受吧
配置成功之后最快乐的事情,就是沙发一躺,手机直接Airplay的快乐,甚至早上一早就可以用你爱的声音把你唤醒
其他尝试过的配置
出现爆音-恩山论坛解决方法
在HG255D上播放正常,在WR703N却出现爆音,在恩山找到解决方案:
#创建一个ALSA配置文件,将采样率从48KHz降低到44.1KHz vi /etc/asound.conf
#写入以下内容:
defaults.pcm.dmix.rate 44100 # Force 44.1 KHz defaults.pcm.dmix.format S16_LE # Force 16 bits
最后重启一下。
正常使用 AirPlay 服务,但是音量偏小
通过查找 shairport 的文档,最后通过修改配置文件 /etc/shairport-sync.conf中的 volume_range_db参数,把问题解决了,将其从默认的60改成40即可。数字越小,声音越大,你可以按照你的情况自行测试其他数字。
参考:https://www.right.com.cn/forum/thread-8373667-1-1.html
其余参考教程
https://github.com/mikebrady/shairport-sync/tree/master (官方文档)
【韩风Talk】Openwrt的Airplay音频插件的玩法。小坑解决了,才能玩的更爽嘛!_哔哩哔哩_bilibili
https://bbs.hassbian.com/thread-23566-1-1.html
https://www.cnblogs.com/nanke-dream/p/17087049.html
https://xtremedev.top/Openwrt/156.html#toc-airplay%E8%AE%BE%E7%BD%AE
https://www.cnblogs.com/nanke-dream/p/17087049.html
https://medium.com/openwrt-iot/openwrt-setting-up-a-usb-audio-device-907486e5eb56
https://ferrets.space/2020/12/27/%E5%9C%A8openwrt%E8%B7%AF%E7%94%B1%E4%B8%8A%E8%BF%90%E8%A1%8Cshairplay%E4%BD%9C%E4%B8%BA%E8%BF%9C%E7%A8%8B%E9%9F%B3%E7%AE%B1/