Commandes vocales et sonores
Vous pouvez produire une étonnante variété de sons sur l'Amiga. Vous pouvez créer des compositions musicales jusqu'à quatre voix, des effets sonores pour les jeux, des invites auditives pour les logiciels - les possibilités sont illimitées. Vous pouvez même connecter l'Amiga à une chaîne stéréo pour produire un son de haute qualité. Assurez-vous de lire les informations sur la production sonore dans le Manuel de référence du matériel.
L'Amiga peut également lire du texte en anglais ou, avec un peu plus d'effort de votre part, n'importe quel texte que vous souhaitez. L'AmigaDOS doit charger les routines de support dans la RAM quand ABasiC en a besoin (elles nécessitent environ 30 Ko de RAM). N'oubliez pas que cela laisse moins de place à votre programme ABasiC, en particulier pour le code graphique gourmand en mémoire.
AUDIO
AUDIO channels%,integer |
Utilisez la commande AUDIO pour activer ou désactiver les sons que vous avez décrits avec une commande SOUND. Spécifiez un nombre entier entre 0 et 15 comme masque pour le ou les canaux que vous souhaitez affecter à AUDIO. Par exemple, le binaire pour 15 est :
1111Ainsi, si vous exécutez l'instruction suivante :
- AUDIO 15, 1
vous activez tous les canaux pour émettre des sons.
Pour activer le son dans un seul canal, spécifiez l'entier équivalent du nombre binaire ayant un 1 dans cette position de canal et un 0 dans tous les autres. Par exemple, pour activer le canal 2 uniquement, spécifiez 4 :
0100Spécifiez l'une des valeurs suivantes comme deuxième paramètre :
Valeur | Description |
---|---|
1 | Activez le son dans le(s) canal(x) indiqué(s). |
0 | Arrêtez temporairement le son dans le(s) canal(aux) indiqué(s). Les données de tous les sons définis sont enregistrées et peuvent reprendre avec une commande AUDIO ultérieure en utilisant un paramètre de 1 (ou tout entier positif). |
-1 | Coupez le son du ou des canaux indiqués. Une nouvelle commande SOUND doit être exécutée pour reprendre le son dans le ou les canaux spécifiés. |
NARRATE
variable% = NARRATE("string" [ ,array%] ) |
La commande NARRATE prononce une chaîne étant une liste de codes de phonèmes. (Les phonèmes sont les plus petites unités de la parole, constituant les syllabes et les mots de la langue parlée.) La chaîne de caractères peut être du texte anglais que vous avez converti en phonèmes avec la commande TRANSLATE$. Ou, vous pouvez construire votre propre chaîne de phonèmes pour faire parler votre Amiga comme vous le souhaitez - même dans une autre langue. (La commande TRANSLATE$ ne peut convertir que du texte anglais.) Voir la page Écrire phonétiquement pour la commande NARRATE pour plus de détails sur la création de chaînes de codes de phonèmes.
En général, utilisez TRANSLATE$ lorsque vous voulez que votre Amiga prononce une chaîne de caractères générée dans un programme en cours d'exécution, comme la réponse d'un utilisateur à une commande INPUT. Créez vos propres chaînes de caractères de phonèmes lorsque vous savez à l'avance ce que vous voulez que l'Amiga dise, afin de pouvoir "affiner" la qualité de la voix et la diction. Avec de la pratique, vous serez capable de traduire des mots en phonèmes rapidement et facilement.
NARRATE est en fait une fonction. ABasiC attribue la valeur zéro à la variable entière spécifiée s'il ne trouve aucune erreur dans la chaîne de caractères de phonèmes. Si ABasiC rencontre un phonème mal orthographié (qu'il ne peut pas reconnaître), la variable contient la position de la chaîne de caractères où NARRATE a trouvé l'erreur.
De plus, ABasiC place le code d'erreur de traduction approprié dans la variable système STATUS. La page Référence des codes d'erreur contient également une liste des messages d'erreur correspondant à chaque code d'erreur. Vous pouvez utiliser ces deux valeurs pour déboguer vos traductions phonémiques. (Notez que la valeur de fonction renvoyée n'est pas valide si vous utilisez le mode de synchronisation 1, décrit ci-dessous.)
Votre Amiga prononce la chaîne de caractères de la manière que vous décrivez dans le tableau d'entiers spécifié, en utilisant les neuf paramètres décrits ci-dessous. Si vous souhaitez utiliser toutes les valeurs par défaut pour ces paramètres, omettez le nom du tableau. NARRATE attribue automatiquement les valeurs par défaut.
Vous trouverez ci-dessous une liste des paramètres des éléments de tableau et leurs descriptions :
Paramètre | Numéro d'élément | Description | |
---|---|---|---|
pitch | (0) | Cette élément permet d'indiquer qu'il n'y a pas de base pour la voix, en hertz. Spécifiez une valeur comprise entre 65 et 320. La valeur par défaut est 110 (voix masculine normale). | |
inflection | (1) | Cette élément permet d'indiquer une inflexion. Choisissez l'une des deux valeurs : | |
Valeur | Description | ||
0 | Cette valeur permet d'indiquer une inflexion et accentuation des syllabes (valeur par défaut). | ||
1 | Cette valeur permet d'indiquer une voix monotone (semblable à un robot). | ||
rate | (2) | Cette élément permet d'indiquer le taux de parole pour la voix, en mots par minute. Spécifiez une valeur comprise entre 40 et 400. La valeur par défaut est 150. | |
voice | (3) | Cette élément permet d'indiquer le parler avec la voix. Choisissez l'une des deux valeurs : | |
Valeur | Description | ||
0 | Cette valeur permet d'indiquer une voix masculine (par défaut). | ||
1 | Cette valeur permet d'indiquer une voix féminine. | ||
tuning | (4) | Cette élément permet d'indiquer la fréquence d'échantillonnage, en hertz. Ce paramètre contrôle les changements de qualité vocale. Spécifiez une valeur comprise entre 5000 (faible et grondant) et 28000 (élevé et grinçant). La valeur par défaut est 22200. | |
volume | (5) | Cette élément permet d'indiquer le volume. Spécifiez une valeur comprise entre 0 (pas de son) et 64 (le plus fort). La valeur par défaut est 64. | |
channel | (6) | Cette élément permet d'indiquer l'affectation des canaux pour la sortie vocale. Les canaux 0 et 3 vont à la sortie audio gauche et les canaux 1 et 2 vont à la sortie audio droite. La valeur par défaut est le code 10, attribuant toute paire de canaux gauche / droite disponible. | |
mode | (7) | Cette élément permet d'indiquer le mode de synchronisation. Spécifiez l'un des nombres entiers suivants : | |
Valeur | Description | ||
0 | Cette valeur permet d'indiquer une sortie vocale synchronisé. Le ABasiC attend la fin de l'exécution en cours de NARRATE avant d'exécuter d'autres commandes. La valeur renvoyée par NARRATE est valide. Ceci est la valeur par défaut. | ||
1 | Cette valeur permet d'indiquer une sortie vocale désynchronisé. Le ABasiC commence à exécuter l'instruction NARRATE actuelle, puis reprend immédiatement le traitement des commandes suivantes. Le NARRATE renvoie toujours 0 dans le mode, bien que ce ne soit pas une valeur valide. | ||
control | (8) | Cette élément permet d'indiquer le mode de contrôle du périphérique de narrateur. Ce paramètre indique à ABasiC comment gérer une deuxième instruction NARRATE pendant qu'il exécute une première. (Cela n'a de sens que si vous utilisez la sortie vocale désynchronisée - mode 1 dans le paramètre précédent - pour la première commande NARRATE.) Spécifiez l'un des nombres entiers suivants : | |
Valeur | Description | ||
0 | Cette valeur permet d'indiquer un traitement normalement. Le ABasic termine l'exécution de la première instruction NARRATE, puis exécute la seconde. C'est le mode par défaut. | ||
1 | Cette valeur permet d'indiquer un arrêt de traitement de la parole ABasiC met immédiatement fin à la première instruction NARRATE. (Le deuxième NARRATE est un mannequin - la chaîne de parole et les autres paramètres sont inutilisés.) | ||
2 | Cette valeur permet d'indiquer de remplacer le traitement. Le ABasiC interrompt immédiatement la première instruction NARRATE et exécute la seconde. |
Voici un exemple d'utilisation de NARRATE :
Lorsque vous exécutez le programme, NARRATE utilise l'ensemble de paramètres par défaut, à l'exception du débit de parole.
Codes d'attribution de canal :
Valeur | Canal |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 0 et 1 |
5 | 0 et 2 |
6 | 3 et 1 |
7 | 3 et 2 |
8 | soit le canal gauche disponible |
9 | soit le canal droit disponible |
10 | paires de canaux gauche / droite disponibles (par défaut) |
11 | n'importe quel canal unique disponible |
PERIOD
PERIOD integer, array% |
La commande PERIOD décrit comment un son change de hauteur au cours de sa durée. L'entier que vous spécifiez indique le nombre de paires d'éléments de tableau que ABasiC doit utiliser avant de commencer à se répéter. PERIOD est une commande facultative. Si vous l'omettez, la commande SOUND crée une hauteur constante avec la période d'échantillonnage initiale que vous spécifiez dans sa liste de paramètres.
L'Amiga utilise un son échantillonné. La hauteur perçue du son dépend du nombre d'échantillons utilisés pour décrire la forme d'onde et de la période d'échantillonnage. Supposons que votre forme d'onde contienne 16 échantillons que vous jouez à une période d'échantillonnage de 254 pour produire la note A. Si vous réduisez la période d'échantillonnage de moitié - à 127 - vous produisez un A dont la hauteur est supérieure d'une octave. Si les autres paramètres restent les mêmes, des valeurs de période plus élevées produisent des hauteurs plus basses, et vice versa.
La formule suivante décrit la relation entre les échantillons par seconde, les unités de temps en unités internes appelées horloges de couleur (279 ,365 nanosecondes) et la période d'échantillonnage :
période = 3579545 / ( ( échantillons / cycle ) x ( cycles / seconde ) ) |
Le numérateur de droite représente le nombre d'horloges de couleur par seconde. Les échantillons sont le nombre d'éléments dans le tableau de formes d'onde défini dans la commande WAVE, et les cycles sont le nombre de fois que la forme d'onde entière est exécutée.
Le tableau d'entiers que vous spécifiez contient des paires successives de valeurs de pente et de destination représentant les modifications des valeurs de période au fil du temps. Vous devez spécifier une valeur de période initiale comme l'un des arguments de la commande SOUND. La commande PERIOD utilise cette période initiale comme valeur de départ. La figure suivante montre des paires successives de valeurs de pente/destination produisant un léger vibrato centré sur le la au-dessus du do médian :
Une autre formule permet de déterminer les valeurs de pente en fonction du temps :
pente = 1092 * incrémentation de pas / secondes |
où :
1092 = 60 (60e de seconde) / 65535 (la valeur la plus élevée dans deux octets de mémoire) |
et l'incrément de pas est la différence entre la période courante et la période de destination. Les valeurs de pente doivent être comprises dans la plage autorisée d'entiers (plus ou moins 2147483648).
Supposons que vous appeliez le tableau VIBRATO%() et que vous spécifiiez la valeur de période initiale à 244. Une oscillation rapide entre 244 et 264 sonnera comme un A (de période 254) à l'oreille. Supposons en outre qu'il y ait trois cycles de vibrato de haut en bas par seconde, et donc 1/6 de seconde s'écoule entre chaque extrême sur le graphique ci-dessus. Ainsi, les valeurs de tableau correspondantes pour la commande PERIOD à utiliser sont :
- 136500, 264, -136500, 244
Comme le cycle recommence à ce point, il suffit de spécifier les deux couples pente/destination. ABasiC utilise la valeur finale de 244 et répète à nouveau le cycle. La commande PERIOD résultante est :
- PERIOD 2, VIBRATO%()
Voir la commande SOUND pour un exemple de programmation utilisant PERIOD.
SOUND
variable% = SOUND(channels%,override%, cycles%, init. volume%,init. period%) |
La commande SOUND décrit le mode d'exécution et fait émettre un son à l'Amiga sur l'un des canaux audio. Avant d'exécuter la commande SOUND, définissez la forme d'onde souhaitée avec la commande WAVE. Vous pouvez obtenir le son de votre Amiga en utilisant uniquement les commandes SOUND et AUDIO. La forme d'onde par défaut est une onde sinusoïdale, et les commandes PERIOD et VOLUME sont facultatives si vous ne voulez pas que la hauteur ou le volume changent.
SOUND est en fait une fonction. La variable entière que vous spécifiez contient le canal qu'ABasiC assigne au son pour qu'il sorte. Le premier paramètre de la liste des paramètres indique lequel des quatre canaux peut émettre le son actuel, mais ABasiC effectue l'affectation spécifique en fonction des canaux disponibles au moment de l'exécution.
Avec de la pratique, vous serez capable de créer des effets sonores sophistiqués et une musique complexe en stéréo avec des sons synchronisés provenant de plusieurs canaux à la fois. Il convient de répéter que l'expérimentation est un excellent professeur.
Les cinq paramètres sont les suivants :
Paramètre | Numéro d'élément | Description |
---|---|---|
channels% | (0) | Ce paramètre permet d'indiquer un masque à quatre bits indiquant quels canaux disponibles doivent produire le son. (Les canaux 0 et 3 vont à la sortie audio gauche, et les canaux 1 et 2 vont à la sortie audio droite.) Le masque est l'équivalent entier d'un nombre binaire entre 1 et 15. Par exemple, si vous voulez un son que vous définissez pour aller au canal 1 ou 2, alors spécifiez 6, étant la valeur binaire 0110. |
override% | (1) | Ce paramètre permet d'indiquer le remplacement de canal. Spécifiez 0 ou 1 pour indiquer si vous souhaitez qu'un nouveau son puisse remplacer le son en cours d'exécution dans le ou les canaux spécifiés. Cette fonction vous permet de faire correspondre les sons avec les événements se produisant dans votre programme (par exemple, un «boom!» Lorsque deux objets graphiques entrent en collision). |
cycles% | (2) | Ce paramètre permet d'indiquer le compteur de cycle : le nombre de fois où jouer la forme d'onde décrite dans la dernière commande WAVE. Spécifiez zéro (0) pour un son continu. |
initvolume% | (3) | Ce paramètre permet d'indiquer le volume initial du son. La valeur doit être un entier compris entre 0 (pas de son) et 64 (le plus fort). La commande VOLUME facultative utilise des paires de valeurs de pente/destination. La première paire commence par le volume initial que vous spécifiez ici. |
initperiod% | (4) | Ce paramètre permet d'indiquer la période initiale du son. La hauteur (la hauteur ou la gravité d'une note) dépend du nombre de fois que la forme d'onde est exécutée par période d'échantillonnage. La commande facultative PERIOD utilise un tableau composé de paires de valeurs de pente / destination. La première paire commence par la période que vous spécifiez ici. Le tableau à la fin de cette page contient les valeurs de période à utiliser pour la gamme musicale standard (à tempérament égal). A noter qu'une valeur de période basse correspond à une fréquence haute, et inversement. Une erreur se produit si vous utilisez une valeur de période inférieure à 124. La période a un intervalle de 127 à 65535, mais fonctionne mieux de 127 à 256 ou de 127 à 512 selon la forme d'onde. (Cette dernière gamme est utile pour produire des fréquences plus basses, mais introduit en même temps un sifflement avec les notes les plus basses.) |
L'ABasiC peut exécuter des sons tout en continuant à traiter d'autres instructions de votre programme, y compris d'autres instructions SOUND. Cela signifie que vous pouvez "empiler" plusieurs sons provenant d'un seul canal si vous le souhaitez (un processus appelé mise en file d'attente). Une fois qu'un SOUND commence à s'exécuter, il peut se terminer de l'une des trois manières suivantes :
- Le nombre de cycles (spécifié comme un nombre positif) est épuisé.
- Les valeurs de pente et de destination du tableau utilisé par la commande VOLUME atteignent la valeur zéro (0).
- Une commande AUDIO désactive le son du ou des canaux concernés.
Voici un exemple :
- 10 DIM SINEWAV%(20), PITCH%(10), LOUD%(10)
- 20 FOR I=0 TO 15: READ SINEWAV%(I): NEXT I
- 30 FOR K=0 TO 7: READ FITCH%(K): NEXT K
- 40 FOR K=0 TO 5: READ LOUDNESS%(K): NEXT K
- 100 WAVE 8, SINEWAV%()
- 110 PERIOD 4, PITCH%()
- 120 VOLUME 3, LOUDNESS%()
- 130 SOUND(9, 0, -1, 32, 240)
- 140 AUDIO 9, 1: REM Allume ça
- 150 GET A$: IF A$ <> "" THEN AUDIO 9,-1
- 200 DATA 0,34,64,94,100,94,64,34,0,-34,-64,-94,-100,-94,-64,-34
- 210 DATA 100000,250,-100000,240,-100000,230,100000,240
- 220 DATA 300000,32,-100000,26,-20000,12
TRANSLATE$
string variable = TRANSLATE$("string") |
La commande TRANSLATE$ convertit la chaîne de caractères anglaise que vous spécifiez en une chaîne de caractères de phonèmes devenant la valeur de la variable de chaîne de caractères spécifiée. Vous spécifiez ensuite cette variable de chaîne de caractères comme premier paramètre de la commande NARRATE pour que votre Amiga la prononce. La limite de la longueur de chaîne de caractères résultante est de 255 caractères.
Si ABasiC développe votre chaîne de caractères anglaise en plus de 255 caractères, une erreur se produit. Si cela se produit, la variable STATUS contient la position dans la chaîne de caractères où TRANSLATE$ a dépassé la limite. (STATUS contient un 0 si TRANSLATE$ est capable de traduire toute la chaîne de caractères.) S'il manque de place, TRANSLATE$ s'arrête toujours entre les mots.
Si votre texte ne tient pas dans une chaîne de caractères de traduction, traduisez simplement plusieurs chaînes de caractères plus courtes l'une après l'autre et exécutez les commandes NARRATE pour prononcer chacune d'elles. L'ABasiC est suffisamment rapide pour exécuter plusieurs commandes (dans le cadre d'une boucle, par exemple) entre des paires de commandes TRANSLATE$ et NARRATE sans «bégaiement» perceptible.
- 30 A$ =TRANSLATE$("Il n'y a pas d'endroit comme a la maison.")
- 40 X% = NARRATE(A$)
Lorsque vous exécutez le programme, TRANSLATE$ convertit le texte en une chaîne de caractères de codes de phonèmes et l'entrepose dans A$. NARRATE fait dire à l'Amiga la chaîne de caractères en fonction de sa liste de paramètres par défaut.
VOLUME
VOLUME integer, array% |
La commande VOLUME décrit comment un son change de volume (intensité) au cours de sa durée. L'entier que vous spécifiez indique le nombre de paires d'éléments de tableau que ABasiC doit utiliser avant de commencer à se répéter.
Le tableau contient des paires successives de valeurs de pente et de destination. La commande SOUND lançant le son contient une valeur de volume initiale. La commande VOLUME utilise cette valeur comme volume à partir duquel commencer. Par exemple, la valeur initiale donnée dans la commande SOUND peut être 32. La figure suivante montre comment utiliser cette valeur comme point de départ pour décrire une enveloppe sonore typique (la variation de volume dans le temps distinguant différents instruments et sons naturels) pour un note frappée au piano :
Supposons que vous appeliez le tableau PIANO%(). L'enveloppe décrit un son dont le volume augmente brusquement (l'attaque), s'estompe rapidement (le déclin initial), puis diminue lentement jusqu'à la fin du son (le maintien) et se termine enfin (le relâchement). Supposons que vous spécifiez un volume initial de 32 dans la commande SOUND correspondante. Les valeurs de tableau correspondantes pour la commande VOLUME à utiliser sont :
- 698880, 64, -349440, 32, -12600, 15, -185640, 0
La commande VOLUME résultante est :
- VOLUME 4, PIANO%()
WAVE
WAVE integer, array% |
La commande WAVE décrit la forme d'onde de la prochaine commande SOUND à exécuter. Le premier paramètre est le nombre d'éléments du tableau formant un cycle d'onde complet. ABasiC utilisera ce nombre d'éléments, puis recommencera au premier élément à chaque répétition de cycle.
Définissez un tableau d'entiers décrivant un cycle complet de son. Voir la description de la commande POKE pour des instructions sur l'entreposage des valeurs d'octets dans un tableau d'entiers. Les valeurs doivent être comprises entre -128 et 127. La meilleure qualité sonore utilise une zone aussi large que possible de cette intervalle.
La forme d'onde par défaut, une onde sinusoïdale, produit une tonalité pure (c'est-à-dire une tonalité ne contenant aucune harmonique). La figure ci-dessous montre les points sur le graphique de l'onde sinusoïdale correspondant aux éléments du tableau décrivant l'onde. Ces points sont appelés échantillons. Plus une vague est complexe, plus il faut de points pour la décrire avec précision.
Vous devez inclure suffisamment d'échantillons pour décrire avec précision le graphique. Pour produire un son doux, commencez et terminez les données à ou près de la même valeur de cycle.
Il existe un certain nombre de formes d'onde que vous pouvez créer pour obtenir différentes qualités sonores. Par exemple, un motif erratique crée un son similaire à la radio statique, ou "bruit blanc", ayant de nombreuses utilisations. Pour créer un type de forme d'onde complexe, vous pouvez additionner les ondes sinusoïdales des composantes. Par exemple, la première harmonique de l'onde de la figure précédente est une tonalité de fréquence supérieure à la fondamentale. Ainsi, pour chaque cycle de la fondamentale, il y a plusieurs cycles de l'harmonique. La somme des deux formes d'onde a un graphique comme dans la figure ci-dessous :
Fonctions sonores
INPLAY
variable% = INPLAY(integer) |
La fonction INPLAY renvoie une valeur entière représentant les canaux sonores indiqués produisant actuellement du son. L'entier renvoyé est une valeur 4 bits comprise entre 0 et 15. Le paramètre entier est également un nombre 4 bits indiquant les canaux à tester. Dans la plupart des cas, vous voudrez spécifier 15 pour tester tous les canaux.
Si INPLAY renvoie zéro, cela signifie qu'il n'y a actuellement aucun son dans aucun des canaux. Une valeur de 15 signifie qu'il y a actuellement du son provenant des quatre canaux.
Gamme musicale standard
Période | Ton | Période | Ton |
---|---|---|---|
508 | A | 254 | A |
480 | A# | 240 | A# |
453 | B | 226 | B |
428 | C | 214 | C |
404 | C# | 202 | C# |
381 | D | 190 | D |
360 | D# | 180 | D# |
339 | E | 170 | E |
320 | F | 160 | F |
302 | F# | 151 | F# |
285 | G | 143 | G |
269 | G# | 135 | G# |
127 | A |