在 GRUB 加载之前或之后播放声音

在 GRUB 加载之前或之后播放声音

我从 linux defender 或 knoppix(或其他程序,我不记得是哪个了)听到了一个很酷的声音,上面写着“正在启动启动顺序”,我想在启动过程中尽早使用它。当我登录时让它说这个没有多大意义,所以最好让它在 GRUB 启动时播放。可以做到吗?

答案1

如何

在文件中/etc/default/grub,将变量设置GRUB_INIT_TUNE为您想要的曲调。

例如:GRUB_INIT_TUNE="2000 400 4 0 1 500 4 0 1 600 4 0 1 800 6"

完成后,使用 应用您的更改sudo update-grub2


现有曲调

(我能找到的)

  • 马里奥兄弟蘑菇强化道具1750 523 1 392 1 523 1 659 1 784 1 1047 1 784 1 415 1 523 1 622 1 831 1 622 1 831 1 1046 1 1244 1 1661 1 1244 1 466 1 587 1 698 1 932 1 1195 1 1397 1 1865 1 1397 1
  • 星球大战中的帝国死亡行军480 440 4 440 4 440 4 349 3 523 1 440 4 349 3 523 1 440 8 659 4 659 4 659 4 698 3 523 1 415 4 349 3 523 1 440 8
  • 谢季垒的曲调(上升):2000 400 4 0 1 500 4 0 1 600 4 0 1 800 6
  • 亚当斯的曲调(对我来说很像铃声):480 220 1 277 1 330 1 440 1 185 1 220 1 277 1 370 1 294 1 370 1 440 1 587 1 330 1 415 1 494 1 659 1

还有更多这里


听懂曲调

语法是:GRUB_INIT_TUNE="tempo [pitch1 duration1] [pitch2 duration2] ..."

节奏是所有音符时长的基础。60 表示 1 秒时长,120 表示 0.5 秒时长,等等。音高以 Hz 为单位。将音高设置为 0 可产生休止符。

资料来源:grub 文档,grub命令文档(同一页面)。


预览/测试曲调

如果你想测试一下:安装sox并使用来自ubuntuforum.org 主题(我稍加修改以删除警告):

grub-playtune

#!/bin/dash

if [ $# -lt 3 ]; then
    echo "Usage: $0 tempo freq dur [freq dur freq dur...]" >&2
    exit 1
fi

tempo=$1; shift

tmpdir=$(mktemp -d)

while [ -n "$*" ]; do
    freq=$1; shift
    dur=$1;  shift
    dur=$(echo "$dur*(60/$tempo)"|bc -l)
    sox -e mu-law -r 8000 -n -t raw - synth $dur sine $freq >>$tmpdir/grubtune.ul 2> /dev/null
done

play -q -c1 -r 8000 $tmpdir/grubtune.ul

rm -r $tmpdir

使其可执行chmod +x grub-playtune

使用示例:

grub-playtune 2000 400 4 0 1 500 4 0 1 600 4 0 1 800 6

音符频率

基于python3的脚本,用于计算音符的频率:

沥青

#!/bin/bash

python3 -c "print(*(int(0.5 + 440 * 2 ** (note/12)) for note in (${*/%/,})))"

使用示例:

$ pitch 0        # gives you A_4
440
$ pitch 2        # gives you B_4
494
$ pitch -2       # gives you G_3
392
$ pitch -12 0 12 # gives you A_3, A_4 and A_5
220 440 880

频率表

有一个可用这里。也可以使用上面的脚本生成,如下所示:

$ pitch {-12..0} # A_3 to A_4
220 233 247 262 277 294 311 330 349 370 392 415 440
$ pitch {0..12} # A_4 to A_5
440 466 494 523 554 587 622 659 698 740 784 831 880
$ pitch {12..24} # A_5 to A_6
880 932 988 1047 1109 1175 1245 1319 1397 1480 1568 1661 1760

答案2

根据 GRUB 手册,第一个音符是“节奏”,后面的每一对数字是持续时间和音高。

音高以赫兹为单位,因此为了演奏出好听的音符(调准的音符),您需要了解西方平均律音阶中音符的频率:

http://pastebin.com/rJY30FmM

顺便说一句,这是我编写并使用粘贴的 Java 代码后得出的结论:

GRUB_INIT_TUNE="480 220 1 277 1 330 1 440 1 185 1 220 1 277 1 370 1 294 1 370 1 440 1 587 1 330 1 415 1 494 1 659 1"

这将演奏出 A、F#m、D、E 的 4 音符琶音。

答案3

  1. 编辑文件/etc/default/grub以包含以下行(这是我的初始曲调):

    GRUB_INIT_TUNE="2000 400 4 0 1 500 4 0 1 600 4 0 1 800 6"

  2. 运行sudo update-grub2以应用更改。

答案4

我创建了一个 Python 脚本,将 Midi 文件转换为以下初始曲调:

https://gitlab.com/lukasfink1/midi2grub

它需要 mido 库才能运行。另请注意,grub play 命令只能播放单声道旋律,因此,如果不能播放单声道旋律,您的 midi 可能会听起来很奇怪。

相关内容