Odtwórz dźwięk przed lub po załadowaniu GRUB-a

14

Dostałem fajny dźwięk z Linuksa Defendera lub knoppiksa (lub czegoś innego, nie pamiętam który), który mówi „inicjowanie sekwencji startowej” I chcę go użyć tak wcześnie, jak to możliwe w procesie rozruchu. Powiedzenie, że kiedy się zaloguję, nie miałoby większego sensu, więc najlepiej byłoby grać w momencie, gdy zaczyna się GRUB. Czy da się to zrobić?

Ruben
źródło
2
To był knoppix. :) Pamiętam tylko dlatego, że była to moja pierwsza dystrybucja Linuksa.
Azendale,
Uczciwe ostrzeżenie: prawdopodobnie będzie to naprawdę głośno.
Nonny Moose

Odpowiedzi:

9

Zgodnie z instrukcją GRUB, pierwsza nuta to „tempo”, a każda następna para liczb to czas trwania i wysokość.

Wysokość jest wyrażona w Hz, więc aby grać ładnie brzmiące nuty (które są dostrojone), będziesz potrzebować częstotliwości nut w zachodniej skali równego temperamentu:

http://pastebin.com/rJY30FmM

Nawiasem mówiąc, oto co wymyśliłem po napisaniu i użyciu wklejonego kodu 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"

Odtwarza 4-nutowe arpeggio A, F # m, D, E.

Adam
źródło
Działa świetnie! +1
Wilf
Tempo jest liczba uderzeń na minutę, tak 60 oznacza 1 bit co sekundę, 120 oznacza 2 uderzenia co drugi, itd., A czas mierzy się uderzeń, więc w tempie 60 i okres 2 dźwięk powinno trwać 2 sekundy.
jpaugh
To dokładnie odpowiada oczekiwaniom, a ja zweryfikowałem to eksperymentalnie, a także z instrukcji .
jpaugh
7

W jaki sposób

W pliku /etc/default/grubustaw zmienną GRUB_INIT_TUNEna żądaną melodię.

Na przykład: GRUB_INIT_TUNE="2000 400 4 0 1 500 4 0 1 600 4 0 1 800 6"

Po zakończeniu zastosuj zmiany za pomocą sudo update-grub2.


Istniejące melodie

(Te, które mogłem znaleźć)

  • Mario Bros. Mushroom Powerup :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
  • Imperial Death March Star Wars :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
  • melodia Xiè-Jìléi (rosnąco):2000 400 4 0 1 500 4 0 1 600 4 0 1 800 6
  • Melodia Adamsa (jak dla mnie Rington):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

Więcej ich tutaj .


Zrozum melodię

Składnia jest następująca: GRUB_INIT_TUNE="tempo [pitch1 duration1] [pitch2 duration2] ..."

Tempo jest podstawą wszystkich czasów trwania nut. 60 daje podstawę 1-sekundową, 120 daje podstawę pół-sekundową itp. Skoki są Hz. Ustaw pitch na 0, aby uzyskać odpoczynek.

Źródło: dokumentacja grub, dokumentacja polecenia grub play (ta sama strona).


Wyświetl podgląd / przetestuj melodię

Jeśli chcesz przetestować melodię: zainstaluj soxi użyj skryptu z tego wątku ubuntuforum.org (nieco zmodyfikowanego przeze mnie, aby usunąć ostrzeżenia):

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

Aby był wykonywalny chmod +x grub-playtune

Użyj przykładu:

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

Częstotliwość notatki

Skrypt oparty na python3 do obliczania częstotliwości notatki:

smoła

#!/bin/bash

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

Użyj przykładów:

$ 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

Tabela częstotliwości

Jeden jest dostępny tutaj . Można go również wygenerować za pomocą powyższego skryptu:

$ 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
loxaxs
źródło
3

Pytasz, czy da się to zrobić? Prosta odpowiedź? Tak, najwyraźniej. Jak można to zrobić? Na tę odpowiedź musisz włożyć więcej pieniędzy. Tylko mój mały żart. Najlepsze, co mogę zrobić, to:

Podręcznik GRUB

Przejdź do sekcji 5.1 Prosta obsługa konfiguracji i poszukaj linii GRUB_INIT_TUNE. Będziesz musiał postępować zgodnie z linkami do Play i składni nazw plików. Będziesz musiał ręcznie edytować plik Grub.

grahammechanical
źródło
Dzięki za link! (Ale dlaczego nie link bezpośrednio do rozdziału 5? Gnu.org/software/grub/manual/grub.html#Configuration )
jpaugh
3
  1. Edytuj plik, /etc/default/grubaby zawierał następujący wiersz (oto moja melodia inicjująca):

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

  2. Uruchom, sudo update-grub2aby zastosować zmianę.

Xiè Jìléi
źródło
0

Stworzyłem skrypt Pythona, który konwertuje pliki midi na te melodie inicjujące:

https://gitlab.com/lukasfink1/midi2grub

Do uruchomienia potrzebna jest biblioteka mido. Zauważ też, że polecenie grub grub może odtwarzać tylko melodie monofoniczne, więc twoje midi mogą brzmieć dziwnie, jeśli nie są.

Lukas Fink
źródło
Przypadkowo miałem to na osobności. Teraz powinno działać.
Lukas Fink