Archlinux下有关无损音乐的折腾

最近发现一些旧番的音乐只有无损的了...MP3 的已经无法满足大众的需求了么....
但是在 Linux 下直接用 MPD 播放无损音乐不能分轨播放实在是不能接受. 于是就开始找寻切割的方法...Archwiki 有相关的条目APE+CUE Splitting (opens new window) 但是,有个明显的缺陷是分轨之后的文件居然不是用歌曲名字命名的! 而且还是我不怎么喜欢的 wav 格式... 不过我还是在菊苣的帮助下找到了完美的解决方案~

# 无损音乐的分轨

Linux 下有个 shntool 的工具非常实用,可以完美解决无损音乐分轨的问题. 根本不需要 wiki 里面说的 cuebreakpoints

shntool split -f example.cue -t %n_%p_%t -o 'cust ext=mp3 lame --quiet - %f' example.ape
1

-t 指的是文件的标题,%n 代表编号,%p 表示 Performer,%t 表示 Title.都是从 cue 里面读取的信息,shntool 默认不支持 mp3 格式的,所以需要指定用 lame 编码器进行编码.当然很多人只是想分轨,并不想转换成压缩的 mp3 格式.

shntool split -f example.cue -t %n_%p_%t -o flac example.ape
1

直接转换成 flac 格式就好了,因为 flac 格式是开源的无损音乐格式,播放器对它支持的肯定比较好. 如果出现 warning: failed to read data from input file using format: [ape] 这样的错误可能需要安装mac (opens new window)

# 给每个音乐文件打 TAG

转换之后的文件只是单纯的音乐文件,每个音乐并没有包含想关的 TAG 信息,这时候需要用 cuetag.sh 给每个音乐文件打 TAG
cuetag.sh 脚本 (opens new window) 最新版貌似有问题不能使用.
cuetag.sh file.cue *.mp3
命令很简单,在转换好的音乐文件夹下指定 cue 文件和 mp3 文件即可自动打 TAG,但是需要注意的一点是,这个脚本打的是 ID3v1 的标签,如果是非英语语言的话, 会出现乱码问题.详情请戳Mp3 标签乱码问题分析与解决方案 (opens new window) 所以,之后我们还是要使用mp3tagiconv (opens new window) 这个工具来进行标签的转换使得所有的播放器都能够正确识别 mp3 音乐的标签.
for i in *.mp3; do echo "y"| mp3tagiconv "${i}" ;done
因为 mp3tagiconv 这个工具每次更新标签都会提示 yes or no ,所以我就修改了下执行方式,使得批量自动化修改.flac 格式的音乐不存在 TAG 编码问题.

# flac 转换为 mp3

虽然在 PC 上听无损比较爽,但是放在手机上受制于存储空间和 CPU 性能,还是转换成 Mp3 比较好.

flac -d -c example.flac | lame -q 0 -b 320 - example.mp3
1

如果想保留 flac 的回放增益特性的话可以在转换的时候加上--apply-replaygain-which-is-not-lossless 参数.

到此,折腾完毕...

Archlinux下使用airbase和dhcpd建立虚拟AP

Linux 下的 wicd 本身自带一个创建 Ad-Hoc network 功能的,但是这个功能太不实用了, 首先,Ad-Hoc 只能把笔记本的无线通过有线进行共享,而且 Ad-Hoc 网络无法被安卓原生系统识别,CM 倒是可以用.hostapd 也是一样.只能把有线网络通过无线进行共享. 但是我经常是电脑连接 WIFI,并且想把 WIFI 共享给手机进行使用,于是我又开始折腾了 >_>

# 首先安装所需要的软件

net-tools
iptables
aircrack-ng
dhcpd
1
2
3
4

# 然后启动虚拟 AP

airmon-ng start wlp5s0 # 启动无线网卡的monitor模式 wlp5s0是我网卡的设备名 这时候会看到输出 monitor mode enabled on mon0 mon0便是虚拟出来的一个网卡设备
airbase-ng -e FreeWifi  -v mon0 & # 在mon0设备上创建Fake AP -e选项是设置SSID名字 -v是启动DEBUG模式 最后是设备名字,想进行后台运行请按Ctrl+D
1
2

# 激活 tap insterface 并添加路由表

执行上面的名字之后会输出 Created tap interface at0 然后执行下面的命令

ifconfig at0 up
ifconfig at0 10.0.0.254 netmask 255.255.255.0
route add -net 10.0.0.0 netmask 255.255.255.0 gw 10.0.0.254
1
2
3

# 设置 iptables

iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o wlp5s0 -j MASQUERADE
//这里wlp5s0是我额外要连接到互联网的网卡设备名
1
2
3
4
5
6
7

# 配置 DNS 服务器

没有 DNS 服务器即使能搜到 AP 也无法连接,因为获取不到 IP 地址. 首先列出 dhcpd.conf 的内容

ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
authoritative;
subnet 10.0.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.0.255;
option routers 10.0.0.254;
option domain-name-servers 114.114.114.114;
range 10.0.0.1 10.0.0.140;
}
1
2
3
4
5
6
7
8
9
10
11

然后执行下面的命令

echo > '/var/lib/dhcp/dhcpd.leases'
dhcpd -d -f -cf dhcpd.conf at0 &
1
2

# 最后启用 IP forwarding

echo "1" > /proc/sys/net/ipv4/ip_forward
1

# 写在最后

虽然能创建虚拟 AP,但是安卓原生系统连接获取到 IP 一段时间后又会自动掉线,原因不明,希望知道的菊苣能告诉咱一声~

Archlinux下Galaxy Nexus刷机并root

安卓本来就是 Linux 衍生的,所以必然可以用 Linux 系统进行刷机,而且效果比 Win 还要好.不需要安装驱动,只需要安装 adb 和 fastboot 即可.

# 安装相关依赖

首先通过 AUR 源安装[android-sdk](https://aur.archlinux.org/packages/android-sdk/和android-sdk-platform-tools (opens new window)相关的wiki在 这里 (opens new window)

通过 yaourt -Ql android-sdk-platform-tools 可以发现 adb 和 fastboot 都安装在/opt/android-sdk/platform-tools 目录下,但是 PATH 环境变量没有这个值,所以无法在终端里直接调用必须先设置 PATH 变量 export PATH="${PATH}:/opt/android-sdk/platform-tools"在 .xinitrc 里面添加这句就可以使 X 下的终端 PATH 环境变量被添加.也可以直接执行,当终端关闭时 PATH 变量的设置也失效.

# 配置 ADB

前面提供的 wiki 已经很详细的讲述如何进行ADB 的配置了 (opens new window)

# 测试 FASTBOOT

fastboot 模式(上下音量键和开机键一起按),可以看到一个大大的 Start 画面,这就是进入了 fastboot.或者使用命令adb reboot bootloader。此时把手机用 USB 连入电脑. 在终端里面输入 fastboot devices 如果提示 no permission 即是普通用户没有权限。这时候就需要切换到 root 用户进行执行.如果输入一串数字.则说明系统识别到了你的手机.

# 刷机开始

首先要下载固件 (opens new window)下载下来的 tgz 文件解压即可看到有个 flash-all.sh 的脚本。首先 chmod +x flash-all.sh 赋予脚本执行权限,然后执行这个脚本即可,如果有大量输出则说明刷机正常进行中.

# 后续 ROOT

ROOT 的话首先需要刷 recovery,我们先下载recovery (opens new window)找到自己型号的 recovery 进行下载,我的是 recovery-clockwork-touch-6.0.3.3-maguro.img,touch 代表的是是否支持触摸.否则只能用音量键和开机键进行选择和确定.然后下载 superSU 的 ZIP 压缩包,目前版本是1.41 (opens new window) ,ZIP 格式不要解压.放入 SD 卡中.adb push UPDATE-SuperSU-v1.41.zip /sdcard/将手机关机进入 fastboot 模式,应该先解锁, fastboot oem unlock然后刷入 recovery fastboot flash recovery recovery-clockwork-touch-6.0.3.3-maguro.img按下音量键调至 recovery,按开机键进入,手机会自动重启进入 recovery。choose zip from SDcard,然后依次进入,最终选择 UPDATE-SuperSU-v1.41.zip,确认安装.

注:如果提示是否清除 recovery flash,请选 No,否则下次推送时无法进行 OTA 更新.安装完成后依次返回.这个步骤不会影响 OTA 更新,并且 OTA 更新之后会自动解决 ROOT 的问题,无需再次 ROOT.

# ADB 小技巧

刷机之后需要一大堆 APK 软件安装怎么办 adb 本身只有单个 APK 安装的功能,通过 ls -1 *.apk | xargs -l adb install 这个命令可以批量的把一个文件夹下的所以 APK 安装上去,而且还是静默安装. 不过首先要打开 ADB 调试才行.

# 手机 MTP 连接 Linux 电脑

MTP 是微软发明的东西....当然不好用 目前有两种解决方案一种是 GMTP,速度较慢,因为第一次和之后所有操作之后都会全部索引一遍文件列表.第二种是 gvfs-mtp 结合 thunar 使用,可以自动挂载,如果无法挂载可以使用 lsusb 命令.

Bus 001 Device 117: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone [Galaxy S II], GT-I9300 Phone [Galaxy S III], GT-P7500 [Galaxy Tab 10.1]
1

可以看到我的设备号,然后在地址栏里面输入 mtp://[usb:001,117]/。第一个数字是 Bus 号,第二个数字是设备号.