Aller au contenu
Phosphoricwiki
Sommaire

Le son

Le PSG de Phosphoric tourne au rythme de la puce, pas à celui de la carte son. Il a fallu mesurer le signal, et non plus comparer des octets, pour découvrir une enveloppe deux fois trop lente.

Dans cette page

La puce

L’Oric fait son son avec un AY-3-8912, un PSG (programmable sound generator) :

  • trois voix de signal carré, chacune avec sa fréquence et son volume ;
  • un générateur de bruit, mélangeable à n’importe quelle voix ;
  • seize formes d’enveloppe, pour faire monter, descendre ou répéter le volume ;
  • un port d’entrée-sortie (le port A), que l’Oric utilise pour le clavier et la manette.

Le processeur ne parle pas au PSG directement : il passe par le port A du VIA et ses lignes de contrôle CA2 et CB2.

Cadencé au matériel

Depuis la version 2.0, le PSG de Phosphoric avance à horloge/8 = 125 kHz, le vrai pas interne de la puce, et non plus au rythme de sortie audio. Les formules sont celles de la fiche technique :

GénérateurFréquence
voix (période TP)horloge / (16 · TP)
bruit (période NP)horloge / (16 · NP)
enveloppe (période EP)horloge / (8 · EP)

Une sortie intégrée

Chaque échantillon audio fait la moyenne des pas du PSG qu’il couvre. Au-dessus de la fréquence de Nyquist, un signal s’atténue au lieu de se replier. Avant, un son programmé à 62,5 kHz ressortait à 18,4 kHz, à pleine amplitude : un sifflement fantôme.

make test-audio vérifie, en mesurant le signal produit :

  • la fréquence d’une voix à 0,1 % de la formule de la fiche technique ;
  • la durée de l’enveloppe à 2 % ;
  • un bruit équilibré, dont le registre à décalage ne reste jamais bloqué à zéro.

Les écritures dans les registres du PSG sont horodatées en cycles du processeur. Les « digidrums », ces sons échantillonnés joués en changeant le volume à toute vitesse, sortent donc au bon moment.

Du PSG au haut-parleur

Du PSG au haut-parleur : ce que dit le schémaLes trois sorties du AY-3-8912 sont reliées ensemble sur une résistance de 1 kΩ : le mixage fait la moyenne des voies. Un diviseur 4,7 kΩ / 470 Ω avec un condensateur de 10 nF forme un passe-bas à 37 kHz, au-dessus de ce qu'on entend. Un condensateur de couplage bloque le continu, puis un LM386 attaque le haut-parleur. Phosphoric modélise la moyenne et le blocage du continu ; la valeur exacte du condensateur de couplage est illisible sur le schéma.L'étage de sortie audio de l'OricAY-3-8912voie Avoie Bvoie CmixageR4 = 1 kΩpasse-basR2, R3, C5couplageC4LM386vers le haut-parleurles voies reliéesfont une moyennecoupe à 37 kHz :hors de la bandebloque le continu,valeur illisiblenon modélisés :LM386, haut-parleurModélisé : la moyenne des trois voies (somme / 3) et le blocage du continu (coupure vers 1,7 Hz).Mesuré après correction : continu de +15 au lieu de +8188, signal symétrique.
L’étage de sortie de l’Oric, d’après son schéma : un mixage, un passe-bas, un couplage, un amplificateur.

L’étage de sortie a été relevé sur un schéma de l’Oric-1 et de l’Atmos reconstitué sous KiCad (révision « Issue 6.1 »). Il a levé deux incertitudes et en a laissé une :

  1. Le mixage fait la moyenne des voies. Les trois sorties sont reliées ensemble sur une même résistance de 1 kΩ : deux voies au repos « tirent » sur celle qui joue. Une mesure publiée sur un forum de l’Oric le confirme : une voie seule à 1 V donne environ 0,33 V au point de mixage. Le modèle, qui fait la somme divisée par 3, était donc juste ; la « déviation » qu’on lui prêtait était fausse.
  2. Le passe-bas coupe à 37 kHz. C5 (10 nF) voit R2 et R3 en parallèle (427 Ω) : la coupure est au-dessus de ce que l’on peut restituer à 44,1 kHz. Rien à modéliser.
  3. Le couplage bloque le continu. Le signal du PSG ne descend jamais sous zéro. Trois voies à plein volume donnaient un continu de +8188, la moitié de l’amplitude. Phosphoric bloque désormais le continu, avec une coupure vers 1,7 Hz, inaudible. Mesuré ensuite : continu de +15, signal symétrique (−8232 à +8252 au lieu de 0 à +16383).

Enregistrer le son

BesoinOption
Capturer le son dans un WAV 16 bits stéréo à 44,1 kHz, même sans affichage--audio-wav FICHIER
Journaliser chaque écriture dans un registre du PSG, avec son cycle--psg-trace FICHIER
Diffuser le son en direct (flux WAV)--cast-server, adresse /audio

Comme --audio-wav marche sans affichage, le son se teste dans la CI comme l’image.

Les autres sources de son

Des cartes d’extension ajoutent leur propre son, mixé à celui du PSG par le même chemin (fenêtre, capture WAV, vidéo AVI, diffusion) :

  • SP0256-AL2 (General Instrument), la synthèse vocale par allophones de la carte de Mageco, en $03F1, avec sa ROM de 2 Ko ;
  • MEA 8000 (Philips), la synthèse par formants de la carte TMPI, en $03FE-$03FF ;
  • le MIDI : la carte Mageco d’origine ou sa réédition ORICON pilotent un synthétiseur de l’hôte (FluidSynth, un logiciel de musique) par un vrai port MIDI, et un clavier MIDI peut jouer dans l’Oric. Voir La page 3 et les cartes.

Sources dans le dépôt : docs/ACCURACY.md, docs/architecture/oric-audio-output.md, docs/articles/v2-cycle-stepped.md, README.md.