Chargement...
 
[Voir/Cacher menus de gauche]
[Voir/Cacher menus de droite]

Utilisation de Ctrlr pour créer un contrôleur de synthé est un tutoriel sur l’utilisation de Ctrlr pour réaliser un panneau de contrôle pour un synthétiseur matériel.






Description


Le but ici est de faire découvrir le très puissant mais peu documenté Ctrlr au travers de la réalisation d’un panneau de contrôle pour le synthétiseur matériel Meeblip Triode. Le Triode peut être remplacé par n’importe quel autre synthé du marché. Il ne sert ici que de support à ce didacticiel.
Pour info, le Triode est un petit synthétiseur de type basse avec oscillateur numérique et table d’onde ainsi qu’un filtre résonnant analogique. Matériel et logiciel entièrement libre. Bien que vendu, au départ, comme synthé tout monté dans un boîtier rouge, vous avez la possibilité de le fabriquer vous-même. Tous les schémas, diagrammes et code source sont disponibles librement.

La version utilisée de Ctrlr pour l’écriture de ce tutoriel est la : 5.4.16 .

Voici à quoi ce panneau va ressembler :

Image

Après une première lecture, vous pourrez facilement créer vos panneaux pour d’autres synthétiseurs ou appareils MIDI. Le Triode ne sert que d’exemple.
Vous aurez ainsi les bases du logiciel Ctrlr et pourrez facilement aller plus loin dans son apprentissage.




Découverte de l’interface


Pour lancer Ctrlr, vous devez vous placer dans le dossier où vous l’avez installé. Soit depuis votre gestionnaire de fichier, avec un double clic sur le fichier Ctrlr-i686 ou Ctrlr-X86_64 suivant votre architecture.

Depuis un terminal :
cd /chemin/vers/Ctrlr/Ctrlr-i686 # + [ENTRÉE] si vous être en 32 bits
cd /chemin/vers/Ctrlr/Ctrlr-X86_64 # + [ENTRÉE] si vous être en 64 bits


La fenêtre par défaut de Ctrlr va s’ouvrir :

Image

notenote
À chaque démarrage, Ctrlr charge automatiquement le dernier panneau ouvert. Si vous avez déjà utilisé Ctrlr, vous devez créer un nouveau panneau. Dans le menu File, choisissez New Panel.


L’interface se décompose en trois parties :
  • en haut, la barre de menu,
  • à droite, les paramètres des divers éléments que vous allez créer. La bande grise avec un point sur la gauche permet de réduire/agrandir cette partie,
  • le reste de la fenêtre contient votre panneau lui-même (fond blanc avec grille).
La zone des paramètres à droite peut être redimensionnée via la ligne grise foncée, via un glissé-déposé.
Le panneau peut être redimensionné au pixel près. Placez votre pointeur sur un des bords du panneau et effectuez un glissé-déposé pour agrandir / réduire.




Configuration de Ctrlr


notenote
Chose importante pour les linuxiens : vous devez impérativement décocher l’option Use OS native file load/save dialogs (disable for linux) dans le menu Edit -> Preferences. Sans quoi vous aurez une erreur à chaque tentative de sauvegarde de votre panneau.


Pour communiquer avec un synthétiseur ou n’importe quel autre appareil MIDI, nous devons définir le port MIDI ainsi que le canal.
Allez dans Menu -> MIDI -> Settings. La fenêtre suivante va s’ouvrir :

Image

Dans le cas du Triode, il n’y a qu’à configurer le port et le canal de sortie. Dans d’autres cas, vous pouvez régler le port et canal d’entrée, le port et canal du contrôleur (Ctrlr peut être utilisé avec une surface de contrôle par exemple).
Pour le port de sortie, clic sur le menu déroulant sous Output device et choisissez votre interface MIDI dans la liste.
Idem pour le canal associé mais cette fois dans la colonne MIDI Channel.
Si vous suivez ce tuto sans aucun appareil, vous pouvez passer cette étape bien qu’elle puisse être utile pour vérifier le bon fonctionnement de votre panneau avec le moniteur MIDI intégré à Ctrlr.




Configuration de notre panneau


En suivant les éléments encadrés en rouge dans la capture d’écran ci-dessous, nous allons nommer notre panneau, indiquer notre nom ou pseudo, notre adresse de courriel ainsi que l’URL de notre site web si nous en avons un. Ensuite nous allons lui donner un numéro de version et un nom de version (pas obligatoire). Pour finir, nous allons indiquer le nom et l’éditeur / constructeur du logiciel ou appareil piloté par ce panneau.

notenote
Pour les cases contenant du texte, un simple clic passe en mode d’édition. Pour les cases contenant des nombres, un clic simple passe en mode d’édition, un clic-glissé permet de changer la valeur à la souris.


Image

Pour le moment, j’ai mis 0 dans Version MAJOR et 1 dans Version MINOR ce qui correspond à 0.1. Nous augmenterons ces numéros progressivement au fur et à mesure pour arriver à la version fatidique 1.0 à la fin de ce tuto.

Il est maintenant grand temps d’enregistrer notre premier panneau. Allez dans le menu File puis Save as, choisissez l’emplacement. Vous verrez que par défaut, Ctrlr créé un nom pour vous. Dans mon cas c’est "Triode Panel_0_1_LinuxMAO_2018-09-30_12-24.panel". À l’avenir vous pourrez, soit sauvegarder avec Save ou avec Save versioned qui permet d’incrémenter le numéro Version MINOR ainsi que le nom du fichier. Pratique !




Quels paramètres MIDI à contrôler ?


Pour aller plus loin, il nous faut définir quels seront les paramètres que nous souhaitons contrôler depuis le panneau.
Pour cela, vous aurez besoin de la notice de votre synthé. Les assignations MIDI CC sont souvent différentes d’un fabricant à l’autre.

Dans le cas du triode, voici la liste des MIDI CC :
  • 48 LFO Depth
  • 49 LFO Rate
  • 50 Oscillator Detune
  • 51 Note Glide (portamento)
  • 52 Filter resonance
  • 53 Filter Cutoff
  • 54 Filter Decay
  • 55 Amplitude Decay
  • 56 Filter Accent
  • 57 Filter Envelope Modulation
  • 58 Oscilator Pulse Width
  • 59 Filter Attack
  • 60 Amplitude Attack
  • 64 Envelope Sustain
  • 65 Sub-oscillator
  • 66 PWM Sweep
  • 67 LFO Destination (osc/filter)
  • 68 Oscillator Wave (pulse/sawtooth)
  • 69 LFO Randomize
  • 70 LFO Note Retrigger (default ON)

Les MIDI CC compris entre 48 et 60 ont des valeurs comprises entre 0 et 127. Les MIDI CC compris entre 61 et 70 sont des interrupteurs. Les valeurs comprises entre 0 et 63 correspondent à Désactivé ou à la première valeur (osc pour LFO Destination par exemple) et 64 à 127 correspondent à Activé ou à la seconde valeur (filter pour LFO Destination).
notenote
Vous rencontrerez parfois des valeurs comprises entre -63 et +63. Sachez qu’en matière de MIDI, il n’y a pas de valeur négative. C’est toujours entre 0 et 127. Ctrlr permet de faire une correspondance assez facilement (-63 = 0, 0 = 63 et +63 = 127). Nous verrons ça un peu plus loin.





Organisation de notre panneau


Regardons à quoi ressemble notre synthé. L’image ci-dessous va nous servir de base pour positionner nos divers boutons. Si votre synthé est différent, basez-vous dessus.

Image

En haut à droite, nous avons le potentiomètre de volume et la DEL de mise sous tension. Ils ne sont pas contrôlables via des CC, laissons-les de côté.
Ceux qui nous intéressent sont dans les trois rangées en dessous.
Dans la première, nous retrouvons la section Envelopes avec Amp Decay, Filter Decay et l’interrupteur Sustain. La section Filter avec Cutoff et Rez.
Dans la seconde rangée nous trouvons la section Oscillators avec Glide, Detune et le bouton Sub OSC. La section LFO avec Rate et Depth.
Pour finir, les deux boutons du bas Waveform et LFO Dest.

Nous allons calquer la position des boutons de notre panneau en fonction de leurs positions réelles.

Les CC 56, 57, 58, 59, 60, 69 et 70 ne se retrouvent pas sur le synthé. Ces paramètres ne sont accessibles qu’en MIDI. Mettons-les de côté pour l’instant.

Entrons dans le vif du sujet ! Commençons par mettre une couleur. Faites descendre l’ascenseur de la partie à droite de la fenêtre Ctrlr jusqu’à Editor comme sur la capture d’écran ci-dessous :

Image

Choisissez la couleur de fond dans Background colour. Avec un clic simple, vous pouvez entrer des valeurs numériques. Avec un clic sur le bouton droit, vous ferez ouvrir un sélecteur de couleur bien pratique. Dans le cas du triode, j’ai mis "FFFF5050" mais vous pouvez mettre ce que vous voulez et même jouer sur la transparence.
Rien ne se passe ? Normal. Enfin j’ignore pourquoi mais ce paramètre n’a pas l'effet souhaité. Je le configure tout de même.
Ensuite, d’un simple clic-gauche sur la valeur de Background colour, vous allez la sélectionner. Taper Ctrl+c pour copier cette valeur. Refaites un simple clic-gauche sur la valeur juste en dessous Background colour 1 et tapez Ctrl+v pour copier la valeur de Background colour ici. Tapez entrée et cette fois, votre fond a changé. Mais c’est un dégradé vers le blanc !
Ctrlr est très puissant. Vous pouvez même faire de jolis dégradés avec. surprised Il est aussi possible de mettre une image en fond ainsi que des images à la place des divers boutons afin de ressembler de manière très précise à l’appareil original.
Pour un fond uni, ouvrez le menu déroulant Background gradient type juste en dessous de background colour 1 et choisissez none. Enfin, nous y sommes ! Nous obtenons ainsi un joli fond de couleur.

Un conseil, sauvegardez maintenant. Je ne le répéterai plus mais n’hésitez pas à sauvegarder le plus souvent possible. Ce n’est pas spécifique à Ctrlr d’ailleurs.

Séparons maintenant notre panneau en quatre groupes. Envelopes, Filter, Oscillators et LFO.
La capture d’écran suivante vous donne une idée de l’organisation du panneau. L’exemple n’est qu’à titre indicatif et devra être adapté à votre synthé. Pour l’instant, ne cherchez pas à être trop précis, ce n’est qu’une ébauche.

Image

Pour obtenir les étiquettes ENVELOPES, FILTER, OSCILATORS et LFO, nous allons utiliser les uiLabel.
Placez le pointeur de souris dans le panneau, clic-droit ouvre le menu contextuel. Allez dans Static puis clic sur uiLabel. Vous venez de créer une étiquette noire avec texte blanc. smile

Maintenant, il vous faut la mettre en place. Pour la déplacer, un simple glissé-déposé à l’emplacement souhaité. Pour plus de précision, vous pouvez utiliser les flèches de votre clavier.
Redimensionnez l’étiquette en plaçant le pointeur sur le contour puis faites un glissé-déposé à la taille souhaitée.

Passons aux noms. Sélectionnez votre étiquette si ce nest pas le cas. Dans la partie droite de la fenêtre, dans Modulator, mettez ENVELOPES dans la case Name. Cette partie est surtout là pour l’organisation de votre panneau et pour accéder à tous les éléments depuis le langage LUA. Pour le cacher sur le panneau, allez dans Component generic et décochez la case Name label visible. Et hop, le nom de l’étiquette disparaît.
Ensuite, rendez-vous dans Component et inscrivez ENVELOPES dans la case Label text.

notenote
Ctrlr pourrait être amélioré sur plusieurs points dont celui d’avoir un nom de uiLabel qui peut être différent du nom affiché. Un seul aurait suffit. C’est le cas pour la grande majorité des éléments. Et pas uniquement pour les noms. Au début, cela entraîne certaines confusions. Faites-y bien attention.

Dernier point, mettons un peu de couleur. Dans Component, vous pouvez changer la couleur de fond Background colour et du texte Text colour. Choisissez, de préférence, des couleurs en harmonie avec votre synthé et surtout lisibles, bien contrastées.

Il ne vous reste plus qu’à copier votre première étiquette avec Ctrl+c et la coller avec Ctrl+v. Changez les noms comme ci-dessus. Faites en autant que nécessaire puis positionnez et redimensionnez-les, toujours de façon grossière pour l’instant.




Création de notre premier bouton de type potentiomètre


Pour ce faire, et comme pour les uiLabel, clic-droit sur le panneau pour ouvrir le menu contextuel, allez dans Sliders puis clic sur uiSlider. Votre premier bouton est créé. smile
Exactement comme pour le uiLabel, vous pouvez le déplacer et le redimensionner.

Changez quelques paramètres dans la partie droite (dorénavant, je vais juste indiquer les noms des paramètres) :
  • Modulator -> Name -> amp-decay
  • Component generic -> Visible name -> AMD DECAY
Vous pouvez aussi changer la police dans Name label font et la couleur dans Name label colour.
notenote
Bien que le paramètre Modulator Name soit peu utile pour une étiquette, il est très important ici. En particulier si vous envisagez d’employer le langage LUA. Ce nom est celui qui vous permettra de choisir ce bouton dans votre script.


Passons maintenant au plus important : contrôler notre synthé.
Toujours avec notre bouton sélectionné, dans la partie droite, section MIDI :
Choisissez CC dans MIDI message type.
Le canal MIDI dans MIDI Channel doit être celui que vous avez configuré au début de ce tuto. Mais vous pouvez contrôler plusieurs appareils avec un seul panneau. Chaque bouton peut envoyer / recevoir des informations sur un canal différent si besoin.
Dans MIDI controler number, indiquez le numéro de CC. Avec le triode, indiquons le numéro 55.
Bien, si vous avez respectés scrupuleusement les indications ci-dessus, le bouton doit contrôler le synthé.

Encore une petite étape avant d’essayer ce bouton. Changeons la couleur du bouton. Pour le triode, je mets :
  • blanc (FFFFFFFF) à Component Rotary outline colour
  • noir (FF000000) à Component Rotary fill colour

notenote
Si votre bouton doit avoir une valeur comprise entre -63 et 63 par exemple, vous devez modifier : Modulator -> Expression to evaluate when calculating MIDI message from the modulator value -> modulatorValue+64.
Component -> Minimum value à -63 et Maximum value à 63.





Essayons notre panneau


La première chose à faire, est de sortir du mode d’édition pour passer au mode "panneau". Dans le menu Panel, choisissez Panel mode. Le raccourcis Ctrl+e est bien pratique à retenir.
Désormais, vous pouvez faire tourner votre bouton et changer la valeur indiquée juste en dessous.
Si vous avez un synthé avec écran, vous devriez vous la valeur changer dessus aussi.
Si vous n’avez pas de synthé, ou s’il n’a pas d’écran, Ctrlr offre un utilitaire bien pratique : un moniteur MIDI. Dans le menu Tools, clic sur MIDI Monitor. Une nouvelle fenêtre vient de s’ouvrir. Pour activer la fonction de monitoring, dans le menu de cette fenêtre, View, clic sur Monitor Output va activer le moniteur de sortie MIDI.
Faites bouger votre bouton et vous verrez des indications dans la partie rouge, en haut de la fenêtre du moniteur.

Par exemple :
[22:11:11:000796]: Time(1.000000) [Controller] Ch:[ 1] No:[  55] Val:[  45] RAW:[b0 37 2d]

Ce qui nous intéresse commence à Controller, dont Ch, No et Val. Si les valeurs ne correspondent pas à ce que votre bouton est censé faire, c’est que vous avez fait une erreur ou un oubli dans le chapitre précédent. Dans ce cas, prenez le temps de le relire.
Dans notre cas, nous agissons bien sur le canal 1, avec le CC numéro 55. La valeur étant comprise entre 0 et 127, tout va bien.

Vous êtes maintenant en mesure de copier ce bouton autant de fois que nécessaire et de l’adapter.

Ci-dessous, une image du Triode avec tous ces boutons :

Image




Petites modifications visuelles


Pour ne pas compliquer les choses dès le départ, nous avons laissé le texte au dessus des boutons. Sur notre triode, le texte est en dessous. Ctrlr permet de changer ça très facilement.

En mode Panel Edit, choisissez un bouton puis déplacez l’ascenseur de la partie de droite jusqu’à Component generic. Là, vous avez Name label position. Vous avez le choix entre none, top, bottom, left et right qui correspondent respectivement à aucun, haut, bas, gauche et droite. Dans le cas du triode, choisissez bottom.

Vous pouvez aussi choisir l’alignement du texte, sa taille et encore d’autres paramètres. Vous devriez commencer à être un peu plus autonome avec ce logiciel. Lâchez vous et essayez ! Vous voyez, au début Ctrlr paraît intimidant mais au final tout est assez clair.

Profitons-en pour changer les couleurs de la zone indiquant la valeur du paramètre, située au-dessous de nos boutons. Allez dans Component est cherchez Value text colour. Remplacez par la couleur de votre choix. J’ai choisi blanc pour le triode.
Changez aussi Value background colour, j’ai pris noir. Puis Value outline colour, transparent dans mon cas (00000000).




Création de nos interrupteurs à deux positions


D’un clic-droit sur le panneau, en mode d’édition, sélectionnez Add component -> Buttons -> uiButton. Placez-le à la bonne place et redimensionnez-le si besoin. Dans le cas du triode, à droite de FILTER DECAY dans la section ENVELOPES.
Nommez-le dans Modulator -> Name. env-sustain pour le triode.
Dans MIDI message type, choisissez CC puis indiquez le numéro de CC correspondant, 64 pour le triode dans MIDI Controller number.
Pour rester cohérent avec l’ensemble de notre panneau, choisissez bottom dans Component generic -> Name label position, puis SUSTAIN dans Visible name. Vous pouvez aussi modifier la police dans Name label font si besoin.
Allez dans Component, puis faites les réglages suivants :

  • cochez Button is toggle button, ce qui permet de basculer entre les deux positions. Sinon vous devrez garder le clic pour activer,
  • blanc (FFFFFFFF) à Button background colour (on),
  • par défaut, Button values est à ON et OFF. Indiquez Inactif=0 et Actif=127 dessous.

Nous venons de créer notre premier interrupteur. smile

Vous pouvez maintenant le copier pour SUB OSC de la section OSCILLATORS.
Puis pour finir, copiez-le pour le bouton LFO DEST de la section LFO. Mais cette fois, indiquez OSC=0 et FILTER=127 dans Button values afin de faire apparaître la fonction sur le bouton lui-même. Changez les couleurs de ce texte si besoin dans Button text colour (on) et Button text colour (off).




Nos boutons supplémentaires


Il nous reste quelques boutons qui ne sont pas physiquement sur le synthé. Ils sont accessibles uniquement en MIDI.
Il y a 5 boutons de type potentiomètre. Vous pouvez simplement copier un bouton du même type existant et changer ses paramètres.
Pour des raisons d’espace, j’ai choisi un autre type de potentiomètre. Des linéaires au lieu des rotatifs. Pour ça, allez dans Component puis changez la valeur Slider style pour LinearHorizontal. Vous pouvez aussi essayer les autres types et choisir celui que vous préférez.

Il est temps d’ajouter les deux interrupteurs à deux positions. Mais ça, vous savez déjà le faire smile.




Le bouton spécial à trois positions


Cette étape est réservée aux plus téméraires n’ayant pas peur de LUA.

Ce bouton est spécifique au Triode. Il a trois positions mais 2 MIDI CC différents pour le contrôler. Habituellement, ce genre de bouton à trois positions ou plus ont un seul MIDI CC avec plusieurs valeurs (généralement 0, 1, 2, ...).
Ses trois positions sont:
  • Square pour sélectionner l’onde carrée.
  • PWM pour sélectionner l’onde de type impulsion à largeur variable.
  • Saw pour l’onde triangulaire (ou en dent de scie).
La position PWM est particulière ici car il faut l’activer ou la désactiver. Si vous choisissez une forme d’onde Saw ou Square, vous devez désactiver le PWM.
Pour choisir Square, il faut envoyer un MIDI CC 66 (PWM Sweep) avec 0 (désactivé) en valeur et un MIDI CC 68 (sélecteur d’onde), là aussi avec 0 (square) en valeur.
Pour le PWM, il faut un MIDI CC 68 à 64 et un MIDI CC 66 à 127 (PWM sweep activé).
Enfin, pour le Saw, un MIDI CC 66 à 0 et un MIDI CC 68 à 127 (saw).

Créons le bouton. Choisissez cette fois uiCombo dans Buttons. Changez les couleurs et paramètres comme le nom, exactement comme pour les autres boutons.

C’est là où ça se complique un peu mais LUA nous vient en aide.

Pour créer un script LUA, il faut d’abord savoir à quel moment il doit intervenir. Ici, c’est lors de tous changements sur ce bouton. Dans Modulator -> Called when the modulator value change clic sur l’icône représentée par un rectangle et engrenage en haut à droite (Add new method dans les infobulles). L’éditeur de texte de Ctrlr va s’ouvrir avec une partie préremplie :
--
-- Called when a modulator value change
-- @mod http://ctrlr.org/api/class_ctrlr_modulator.html
-- @value    new numeric value of the modulator


Les lignes commençant par des "--" sont des commentaires. Ils n’ont aucun impact sur le programme.

Ajoutez, à la suite, les lignes suivantes :
_t={66,68} -- 66 = PWM Sweep, 68 = sélecteur d’onde

mySendMidiCC = function(--[[ CtrlrModulator --]] mod, --[[ number --]] value, --[[ number --]] source)

		if value == 0 then -- la première valeur du bouton = Square
			panel:sendMidiMessageNow(CtrlrMidiMessage({0xb0, _t[1], 0}))
			panel:sendMidiMessageNow(CtrlrMidiMessage({0xb0, _t[2], 0}))
		end
		if value == 1 then -- la seconde valeur = PWM
			panel:sendMidiMessageNow(CtrlrMidiMessage({0xb0, _t[2], 64}))
			panel:sendMidiMessageNow(CtrlrMidiMessage({0xb0, _t[1], 127}))
		end
		if value == 2 then -- la dernière = Saw
			panel:sendMidiMessageNow(CtrlrMidiMessage({0xb0, _t[1], 0}))
			panel:sendMidiMessageNow(CtrlrMidiMessage({0xb0, _t[2], 127}))
		end

end


Il ne nous reste plus qu’à définir les trois positions qui seront affichés comme des valeurs dans un menu. Dans Component puis Combo contents, ajouter les trois lignes suivantes :
Square = 0
PWM = 1
Saw = 2

Ne tapez pas sur [ENTRÉE] à la dernière ligne sinon vous aurez une entrée vide dans votre menu.

Si tout va bien, nous avons un bouton de type menu avec trois lignes. Dans le MIDI Monitor, vous devriez voir 2 MIDI CC à chaque changement.




Conclusion


Nous avons terminé notre panneau. Si tout fonctionne correctement, n’oubliez pas de le numéroter en 1.0.
S’il peut servir à la communauté, vous pourriez aussi le publier sur le site officiel en suivant ce tuto Image  .

Si vous souhaitez télécharger le panneau ayant servit dans le cadre de ce didacticiel, rdv sur le site officiel ici  Image .







Collaborateur(s) de cette page : olinuxx et bda .
Page dernièrement modifiée le Mardi 06 novembre 2018 10:41:52 par olinuxx.
Le contenu de cette page est licencié sous les termes licence.

Documentation [Afficher / Cacher]

Faire un don
[Afficher / Cacher]

Connexion
[Afficher / Cacher]



Mégaphone [Afficher / Cacher]

olinuxx, 11:48, ven. 15 mars 2024: Bonjour et bienvenue à Jerry cool
calixtus06, 18:03, mer. 13 mars 2024: Bonjour et bienvenue à tanguero :-)
olinuxx, 11:01, dim. 10 mars 2024: Bonjour et bienvenue à lolo cool
bda, 16:59, sam. 09 mars 2024: Chapeau pour l'édito. Vous êtes au top les gars :-)
allany, 07:20, jeu. 07 mars 2024: Ça ne fait jamais de mal, c'est l'éditorial ! [Lien]
olinuxx, 19:52, mer. 06 mars 2024: Bonjour et bienvenue à TrkNrk cool
calixtus06, 11:17, mar. 05 mars 2024: Bonjour et bienvenue à D752 :-)
calixtus06, 18:59, lun. 04 mars 2024: Bonjour et bienvenue à Hborsa et Adjudandouille :-)
olinuxx, 18:34, jeu. 29 Feb 2024: Bonjour et bienvenue à anto45500 cool
jujudusud, 23:38, mar. 27 Feb 2024: Venez participer à la joute numéro 17 : [Lien]
calixtus06, 18:36, jeu. 22 Feb 2024: Bonjour et bienvenue à nikartri et rckloar :-)
calixtus06, 10:15, mer. 14 Feb 2024: Bonjour et bienvenue à smonff, Alphascorpii, tadumtss et letoII :-)