0基础纯小白 配置软路由Openwrt中玩转Airplay2 / Shairplay音频投放成功

背景

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

  1. 确保采样率匹配: 如果设备支持的采样率范围是 [44100 192000],那么在 shairport-sync.conf 文件中,确保你设置的 output_backend 支持这些采样率。例如,如果设备支持 44100Hz,那么 output_rate 应该设置为 44100Hz。

    1. ⚠️这里需要注意一点shairport-sync.conf 对于output_rate 是有设定的 // output_rate = 44100; // can be "auto", 44100, 88200, 176400 or 352800, but the device must have the capability.

    2. 因为我的音响测出来sample rate 是48000 Hz,我询问了GPT,它是告诉我写44100还是比较合适的

  2. 调整 buffer_sizeperiod_size

    1. buffer_size: 可以根据设备的支持范围,设置为适当的值。例如,如果设备支持的 buffer_size[160 1048576] 之间,通常推荐设置为 4 倍的采样率。

      • 对于 44100Hz 采样率,buffer_size 可以设置为 176400 或更高。

    2. period_size: 可以设置为 buffer_size 的 1/8 或 1/16。

      • 如果 buffer_size 设置为 176400,period_size 可以设置为 22050 或 11025。

  3. 检查音频格式:

    1. 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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值