{"id":3475,"date":"2020-05-27T17:34:59","date_gmt":"2020-05-27T15:34:59","guid":{"rendered":"https:\/\/ceo.oric.org\/?p=3475"},"modified":"2020-05-27T17:34:59","modified_gmt":"2020-05-27T15:34:59","slug":"musique-note-octave-frequence-et-periode","status":"publish","type":"post","link":"https:\/\/oric.bqtt.net\/index.php\/2020\/05\/27\/musique-note-octave-frequence-et-periode\/","title":{"rendered":"Musique, Note, Octave, Fr\u00e9quence et P\u00e9riode"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Rappels et pr\u00e9cisions<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">par Andr\u00e9 C.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">CE QU&#8217;IL Y A DERRI\u00c8RE LE HAUT-PARLEUR<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le PSG 8912, circuit int\u00e9gr\u00e9 complexe, g\u00e9n\u00e8re des sons sur la base de 14 param\u00e8tres qu&#8217;il faut lui fournir. Ce sont surtout les 6 premiers param\u00e8tres (en fait 3 param\u00e8tres sur 2 octets chacun) qui nous int\u00e9ressent aujourd&#8217;hui. Ils d\u00e9finissent la p\u00e9riode des sons qui seront respectivement g\u00e9n\u00e9r\u00e9s par les canaux 1, 2 et 3.<br>Lorsqu&#8217;on veut programmer des sons en langage machine, il faut envoyer ces 14 param\u00e8tres aux 14 registres du PSG 8912 <em>\u00e0 l&#8217;aide de la routine #FA86 (Atmos), apr\u00e8s avoir renseign\u00e9 X et Y pour qu&#8217;ils pointent sur l&#8217;adresse o\u00f9 se trouve le bloc des 14 param\u00e8tres<\/em>. Heureusement ces 14 registres sont latch\u00e9s (verrouill\u00e9s) et gardent leur valeur tant qu&#8217;on ne la remplace pas par une autre. La plupart du temps il y a donc peu de changements et il est possible de modifier un seul registre <em>\u00e0 l&#8217;aide de la routine #F590 (Atmos), apr\u00e8s avoir renseign\u00e9 A avec le n\u00b0 de registre (de 0 \u00e0 13) et X avec la valeur \u00e0 y placer<\/em> (A, X et Y sont les registres du microprocesseur 6502).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">VOUS PR\u00c9F\u00c9REZ LE BASIC ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Il n&#8217;emp\u00eache que le PSG 8912, ce n&#8217;est pas de la tarte, avec ses 14 param\u00e8tres dont certains sont complexes ! Mais les commandes PLAY, MUSIC et SOUND simplifient la vie de ceux qui sont effray\u00e9s par le langage machine. <em>Le bel effort, qui a \u00e9t\u00e9 fait pour programmer les commandes PLAY, MUSIC et SOUND, est handicap\u00e9 par la pauvret\u00e9 des manuels.<\/em> A ce propos, je vous renvoie \u00e0 l&#8217;excellent article &#8220;PLAY, MUSIC, SOUND&#8221;, paru dans le CEO-mag d&#8217;avril 2000, n\u00b0119-120, pages 35 \u00e0 39.<br>Toujours est-il que ces 3 commandes Basic permettent de mettre en \u0153uvre assez facilement les param\u00e8tres du PSG 8912.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">MUSIC<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dans le cas de MUSIC, par exemple, il suffit d&#8217;indiquer le canal \u00e0 activer (1 \u00e0 3), l&#8217;octave (0 \u00e0 7), la note (1 \u00e0 12) et le volume (1 \u00e0 15 pour le volume sonore ou 0 pour passer la main au contr\u00f4le par une enveloppe). Quoi de plus simple ? Soit dit en passant, la syntaxe de ce dernier param\u00e8tre est regrettable. Pourquoi ne pas avoir repris les valeurs qu&#8217;accepte directement le PSG 8912, \u00e0 savoir 0 \u00e0 15 pour le volume et 16 (#10) pour le passage de contr\u00f4le \u00e0 une enveloppe ?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">SOUND<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mais MUSIC a les inconv\u00e9nients (les limites) de son avantage (la simplicit\u00e9) : Cette commande ne sait produire aucun son en dehors des notes standards. Pour ce genre de sons, il existe la commande SOUND, pour laquelle il faut indiquer le canal (1 \u00e0 6 avec 1 \u00e0 3 pour le canal et 4 \u00e0 6 pour ajouter du bruit blanc aux canaux 1 \u00e0 3), la p\u00e9riode (de 0 \u00e0 65535) et le volume (idem MUSIC).<br>Pas top la syntaxe du 3e param\u00e8tre (p\u00e9riode). En fran\u00e7ais la hauteur d&#8217;une note est d\u00e9finie par sa fr\u00e9quence. On ne parle jamais de la p\u00e9riode d&#8217;une note. L&#8217;utilisation de la p\u00e9riode \u00e9tait probablement plus simple d&#8217;un point de vue programmation, mais elle est contre culturelle et pas du tout intuitive (plus une note est haute plus sa p\u00e9riode diminue).<br>Toute valeur entre #0000 et #FFFF (0 et 65535) est accept\u00e9e et la valeur que l&#8217;on indique est directement envoy\u00e9e au PSG 8912. <em>Mais celui-ci ne prend pas en compte les 4 bits sup\u00e9rieurs de l&#8217;octet de poids fort.<\/em> Les valeurs r\u00e9ellement inject\u00e9es dans le PSG sont ra men\u00e9es \u00e0 l&#8217;espace #0000 \u00e0 #0FFF (0 \u00e0 4095 en d\u00e9cimal). L&#8217;intervalle de 0 \u00e0 65535 est donc illusoire (mais les capacit\u00e9s du PSG 8912 et celles de l&#8217;oreille humaine sont quand m\u00eame largement couvertes).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">PERIODE<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La p\u00e9riode (en secondes) est l&#8217;inverse de la fr\u00e9quence (en Hertz). En pratique, pour avoir des valeurs manipulables, on exprime la p\u00e9riode en \u00b5s. Pour ce faire, il faut diviser 1&nbsp;000&nbsp;000 par la fr\u00e9quence (il y a un million de \u00b5s dans une seconde). Par exemple pour le LA de l&#8217;octave 3 (le diapason qui sert de r\u00e9f\u00e9rence en musique), la fr\u00e9quence officielle est 440 Hz. La p\u00e9riode correspondante est de 1 000 000 \/ 440 = 2 272,73 \u00b5s, une valeur qui n&#8217;est jamais mentionn\u00e9e, ni utilis\u00e9e.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">LE TRUC INVISIBLE<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le truc qui n\u2019est pas explicit\u00e9 dans les divers documents disponibles (et il y en a un paquet !) est que <strong>dans le cas du PSG 8912, la p\u00e9riode n&#8217;est pas exprim\u00e9e en \u00b5s, mais en unit\u00e9s de 16 \u00b5s<\/strong> (\u00e7a sent le syst\u00e8me binaire l\u00e0-dessous). Il faut donc appliquer un facteur de conversion de 62 480 (car 1 000 000 \/ 62 480 = 16,00512164). Dans le cas du LA de l&#8217;octave 3 (440 Hz) la p\u00e9riode exprim\u00e9e en unit\u00e9 de 16&nbsp;\u00b5s est de 62480 \/ 440 = 142 (soit #008E en hexad\u00e9cimal). Les amateurs de langage machine pourront v\u00e9rifier que #008E est bien la valeur indiqu\u00e9e dans la Rom par les tables de conversion en #FC5E (octet de poids fort) et #FC6B (octet de poids faible). Et c\u2019est bien la valeur 142 qu&#8217;il faut indiquer \u00e0 la commande SOUND pour obtenir un LA de l&#8217;octave 3.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">POUR EN REVENIR AU PSG 8912<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">C&#8217;est bien s\u00fbr #008E qu&#8217;il faut aussi indiquer au PSG pour obtenir ce m\u00eame LA de l&#8217;octave 3. Par exemple, pour obtenir ce son sur le canal 1, il faudra placer #8E dans le premier registre et #00 dans le second. <strong>D&#8217;une mani\u00e8re g\u00e9n\u00e9rale, pour produire un son de fr\u00e9quence F, il faudra placer dans les registres du PSG une valeur de p\u00e9riode P&nbsp;=&nbsp;62480 \/ F<\/strong>. Ce n&#8217;est pas si compliqu\u00e9, encore fallait-il le dire clairement. En compl\u00e9ment pour ceux qui seraient int\u00e9ress\u00e9, une table de conversion &#8220;Note-Frequence-periode.pdf&#8221; accompagne cet article.<\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/05\/Note-Frequence-periode.pdf\">Note-Frequence-periode.pdf<\/a><a href=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/05\/Note-Frequence-periode.pdf\" class=\"wp-block-file__button\" download>T\u00e9l\u00e9charger<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Rappels et pr\u00e9cisions par Andr\u00e9 C. CE QU&#8217;IL Y A DERRI\u00c8RE LE HAUT-PARLEUR Le PSG 8912, circuit int\u00e9gr\u00e9 complexe, g\u00e9n\u00e8re des sons sur la base de 14 param\u00e8tres qu&#8217;il faut lui fournir. Ce sont surtout les 6 premiers param\u00e8tres (en fait 3 param\u00e8tres sur 2 octets chacun) qui nous int\u00e9ressent aujourd&#8217;hui. Ils d\u00e9finissent la p\u00e9riode [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3519,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[338,346,347,348,22,318],"tags":[671,856],"class_list":["post-3475","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-338","category-assembleur","category-atmos","category-basic","category-ceomag","category-software","tag-ceomag361","tag-psg-8912"],"_links":{"self":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/3475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/comments?post=3475"}],"version-history":[{"count":0,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/3475\/revisions"}],"wp:attachment":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/media?parent=3475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/categories?post=3475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/tags?post=3475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}