Extraire le son de démarrage des Macs

Date de publication : — dernière modification :

Si vous avez déjà vu un Mac s'allumer, vous avez alors entendu un certain son. Ce son a été crée par Jim Reekes, qui l'a réalisé à l'aide d'un synthétiseur Korg Wavestation (regarder cette vidéo pour plus d'informations sur la création du startup chime). Il a même été utilisé dans une chanson de Transformer Di Roboter, nommée Stranger in moscow (vous pouvez l'écouter ici).

Récupérer ce son est une tâche difficile, étant donné que le son n'est pas stocké dans le système d'exploitation mais dans le firmware de la machine. Il va donc falloir être très rusé !

Obtenir un firmware ?

Le firmware est stocké sur une mémoire de la carte mère. Plusieurs personnes ont déjà réussi à lire et écrire cette mémoire (cf. cet article). Cela nécessite néanmoins de s'équiper en matériel, de disséquer une machine, et éventuellement de la sacrifier pour la science.

On peut aussi lire ce firmware de manière logicielle. Il est possible de faire cette manipulation depuis le firmware, ou sinon via certains logiciels.

La dernière solution est d'utiliser un fichier de mise à jour du firmware. C'est la moins risquée.

Première tentative : mises à jour de Mac dotés de processeurs Intel

Il existe une page sur le site d'Apple listant toutes les mises à jour de firmware disponibles pour les Macs Intel. J'ai testé au hasard le firmware d'un Mac Pro 6,1.

La page de téléchargement du firmware

J'ai téléchargé le firmware, et je suis tombé sur une image disque contenant l'installateur au format .pkg :

Le contenu de l'image disque que j'ai téléchargé

A l'aide du terminal, j'ouvre le paquet contenant la mise à jour :

Les commandes dans le terminal pour extraire le paquet

Je vais ici m'intéresser au fichier Payload, qui est le contenu du paquet (ce qui va être installé).

Du payload au firmware

On obtient à la fin un fichier .scap. Ce fichier contient le firmware. Il est placé par l'installateur à un certain endroit du disque dur qui va être accéder par l'EFI, qui va effectuer la mise à jour. Petite anecdote : sur des Macs Intel plus vieux, le logiciel pour mettre à jour le firmware est séparé du firmware.

Je ne sais malheureusement pas exploiter ce fichier scap, il va falloir regarder d'autres possibilités pour obtenir le firmware brut.

Deuxième tentative : extraire un firmware déjà installé sur un Mac doté d'un processeur Intel

On va l'extraire de manière logicielle, sans avoir à recourir à un quelconque programmateur matériel. J'utiliserai alors flashrom, qui est un logiciel conçu pour programmer le firmware de divers ordinateurs. J'utiliserai ici une version de flashrom compilée à la main, étant donné que celle proposée par Homebrew ne prend que en charge les programmateurs série/usb.

J'ai lancé flashrom sur un MacBook :

tibounise@nova:~$ sudo flashrom -p internal -r dump.rom
flashrom v0.9.7-r1711 on Darwin
flashrom is free software, get the source code at http://www.flashrom.org

Calibrating delay loop... OK.
Mapping low megabyte at 0x0000000000000400, unaligned size 0xffc00.
Mapping low megabyte, 0xffc00 bytes at unaligned 0x0000000000000400.
sh: dmidecode: command not found
dmidecode execution unsuccessful - continuing without DMI info
Found chipset "Intel ICH7M". Enabling flash write... OK.
Found SST flash chip "SST25VF016B" (2048 kB, SPI) at physical address 0xffe00000.
Reading flash... done.
tibounise@nova:~$ file dump.rom
dump.rom: data

On obtient en sortie un dump de la ROM du MacBook. Ce dump est compliqué à exploiter, je n'ai pas réussi à trouver une quelconque portion d'audio dedans ...

Troisième tentative : mises à jour de Macs dotés de processeurs PowerPC

Sur les Mac dotés de processeurs PowerPC, l'architecture de la machine est totalement différente. Le firmware n'est pas un EFI, mais OpenFirmware.

Je vais utiliser une mise à jour de firmware pour XServe G5 (disponible ici).

La page Apple proposant la mise à jour

Comme dans le cas des Mac Intels, on a un installateur. Cette fois-ci, au lieu de copier le fichier de mise à jour de l'EFI pour qu'il soit directement mis à jour au redémarrage, Apple a décidé de faire installer une application pour installer la mise à jour.

La page Apple proposant la mise à jour

Si on regarde cette application en détail, on peut remarquer qu'elle intègre trois petits exécutables au nom très explicite, et un fichier nommé BootROMFirmware :

Le contenu de l'application faisant la mise à jour

Je vais ouvrir ce dernier dans Ocenaudio :

Le firmware dans ocenaudio

La portion d'audio sélectionnée ressemble beaucoup au son de démarrage des Mac quand on l'écoute. J'utilise alors un éditeur hexadécimal pour connaître la position et la durée exacte du sample :

Le firmware dans hexfiend

D'après mes observations, le sample se situe après un bloc de 0xFF, et juste avant un bloc de 0x00. Il dure 0xE4B4 octets, et commence à 0xC881C. L'article de dougg3 indique les mêmes valeurs, confirmant ainsi mes observations.

Afin d'extraire le sample, j'ai codé un petit script en Ruby :

sample = IO.binread("BootROMFirmware",0xE4B4,0xC881C)
IO.binwrite("ExtractedSample",sample)

Il sera enregistré sous le nom de ExtractedSample.

Exploiter le son

Le son, tel qu'il est stocké dans le firmware, est encodé en IMA 4:1. Pour l'ouvrir, j'utiliserai SndSampler, que je vais faire tourner dans Mac OS 9 (vous pouvez aussi utiliser Mac OS X 10.6 ou inférieur).

SndSampler dans Mac OS 9

Il faut ouvrir le sample en tant que "RAW audio", avec comme paramètres :

  • Fréquence d'échantillonage à 44,1 Khz (faire attention aux eventuels points ou virgules que SndSample ajouterait)
  • Compression IMA 4:1
  • Offset réglé sur 16 (en toute honnêteté, j'ai aucune idée de ce que c'est)
  • 1 seul canal / mono

Les paramètres d'ouverture dans SndSampler

Une fois le sample chargé vous devriez obtenir ceci :

Le sample chargé

A présent, vous avez entre vos main le fameux son qui se déclenche à chaque allumage de Mac, et ce, sans perte de qualité !