Se connecter
Se connecter

ou
Créer un compte

ou
FR
EN
Ableton Live 8
(30)
Déposer un avis
Où acheter Live 8 ?
Moins
Aucun revendeur ne propose ce produit pour le moment.
Alerte disponibilité
Il n’y a pas de petite annonce pour ce produit.
Alerte nouvelle annonce

Qui utilise Live API

  • 96 réponses
  • 17 participants
  • 17 058 vues
  • 8 followers
Sujet de la discussion Qui utilise Live API
Hello,
qui utilise Live API et Python ici?
je me suis mis à Python il y a 2 jours pour réaliser une set up perso de mon controleur MPD32 , je cherche à utiliser les control change mais j'ai un peu de mal.
Pour les pads pas de probleme il suffit de modifier le fichier const.py
J'utilise la classe TRACE fournie pour reperer les bugs et autres , est ce que quelqu'un a déja écrit un script perso pour son controleur , en partant du script python pour le MPD16 dispo merci.

Si ça fonctionne , plus besoin d'acheter une APC lol...

Je suis sur live 7 pour le moment.

Merci
Afficher le sujet de la discussion
51
Ok, merci
52

Citation : Comment fait-on pour ouvrir python dans Mac puisqu'il est déjà installer, je ne le trouve pas

applications/(utilitaires ou pas)/macpython/idle.app pour ouvrir l'éditeur python
53
Salut camus2,

Merci, je t'ai envoyé un mail hier, concernant une surface de contrôle que j'ai fabriqué avec 8 faders motorisés, 32 encodeurs rotatif ALPS, 64 boutons et 64 LEDs
Pour les intéressés http://www.ucapps.de

J'arrive à la faire fonctionner en mode Mackie Control dans Live 7.0.16

Les faders motorisés, les boutons et les statuts des LEDs fonctionnent très bien, mais le soucis et au niveau des encodeurs rotatifs en mode Mackie, ils ne répondent pas ???

Si j'assigne un paramètre dans Live en mode MIDI, là ils fonctionnent.

J'ai déjà entendu parlé de L'API mais j'y comprend rien et encore moins l'anglais;
Je suppose qu'il est possible de modifier le mode Mackie control.

Est-il possible d'avoir un coups de main, j'aimerai que mes 32 encodeurs réagissent à tous les périfériques et plugins, ...ect

J'ai 8 colonnes de 4 encodeurs rotatif.
Par défaut j'aimerais que les 4 premiers contrôlent les Send A, B , C et le pan de la piste 1
les 4 suivant contôlent les Send A, B , C et le pan de la piste 2
et ainsi de suite pour les 8 premières pistes.

Merci .
54
Camus, j'ai essayé ton tuto avec les touches Arrangement et session.
j'ai toujours des erreurs dans PhotonX25BankController.
Pour consts ok,Live a créé le fichier consts.pyc

Quand j'appuie les touches de mon contrôleur (104 et 105), dans Live j'ai bien les led midi en au a droit qui clignotent, mais les page arrangement et session ne change pas.
je ne sais pas d'où vient l'erreur.

quand tu dit:

Citation : ATTENTION , python est sensible à l'indentation ( tabulations ) si elles ne sont pas correct , le
script ne fonctionnera pas)


tu veux dire quoi par là ?

Merci.
55

Citation : Merci, je t'ai envoyé un mail hier, concernant une surface de contrôle que j'ai fabriqué avec 8 faders motorisés, 32 encodeurs rotatif ALPS, 64 boutons et 64 LEDs
Pour les intéressés http://www.ucapps.de


ta surface je ne l'ai pas donc difficile de savoir comment faire quoi. mais tout est faisable, si tu en détailles l'implémentation midi ici.

Pour les erreurs fait déja un check module comme décrit plus haut pour savoir s'il y a un problème de syntaxe dans ton code.

il y a une fonction trace pour les logs dans les scripts fournis

pour gérer un paramètre il faut trouver la methode (ou adresse) correspondante dans la doc l'API.

il est bien sur possible de gérer les banks de volume,pan ,send,etc... de 8 en 8 je l'ai fait sur mon mpd32.

ou d'utiliser sa surface pour gérer tout les paramètres d'une piste, en permettant le changement de piste via 2 boutons par exemple.
56
Pour le tuto voici le message d'erreur

There's en error in your programm:
unident does not match any outer indentation level.

Qu'est ce que ça veut dire tout ça ????
57
Yo ,j'ai trouvé l'erreur et ça marche :bravo:

La fenêtre de Live passe bien de session à arrangement
58
Dans Live il faut préciser les encoderMapMode .
voici les différent encoderMapMode:

# - Absolute
# - Absolute14Bit
# - LinearSignedBit
# - LinearSignedBit2
# - LinearTwoCompliment
# - LinearBinaryOffset
# - AccelSignedBit
# - AccelSignedBit2
# - AccelTwoCompliment
# - AccelBinaryOffset

Pour mes encodeurs ALPS l' encoderMapMode est LinearBinaryOffset

Où trouver encoderMapMode dans l'API ?
59
Une partie de l'api est spécifiée ici.

http://www.assembla.com/spaces/live-api/documents/cLla_S1V4r3zamab7jnrAJ/download/LivePyDoc.zip

la classe concernée est MapMode , il faut par contre maitriser la notion de dictionnaires en python



Citation : class MapMode(Boost.Python.enum)



Method resolution order:
MapMode
Boost.Python.enum
__builtin__.int
__builtin__.object

Data and non-method functions defined here:

__doc__ = None

__getstate__ = <built-in function __getstate__>

__slots__ = ()
tuple() -> an empty tuple
tuple(sequence) -> tuple initialized from sequence's items

If the argument is a tuple, the return value is the same object.

absolute = MidiMap.MapMode.absolute

absolute_14_bit = MidiMap.MapMode.absolute_14_bit

relative_binary_offset = MidiMap.MapMode.relative_binary_offset

relative_signed_bit = MidiMap.MapMode.relative_signed_bit

relative_signed_bit2 = MidiMap.MapMode.relative_signed_bit2

relative_smooth_binary_offset = MidiMap.MapMode.relative_smooth_binary_offset

relative_smooth_signed_bit = MidiMap.MapMode.relative_smooth_signed_bit

relative_smooth_signed_bit2 = MidiMap.MapMode.relative_smooth_signed_bit2

relative_smooth_two_compliment = MidiMap.MapMode.relative_smooth_two_compliment

relative_two_compliment = MidiMap.MapMode.relative_two_compliment

values = {0: MidiMap.MapMode.absolute, 1: MidiMap.MapMode.relative_signed_bit, 2: MidiMap.MapMode.relative_binary_offset, 3: MidiMap.MapMode.relative_two_compliment, 4: MidiMap.MapMode.relative_signed_bit2, 5: MidiMap.MapMode.absolute_14_bit, 6: MidiMap.MapMode.relative_smooth_signed_bit, 7: MidiMap.MapMode.relative_smooth_binary_offset, 8: MidiMap.MapMode.relative_smooth_two_compliment, 9: MidiMap.MapMode.relative_smooth_signed_bit2}
dict() -> new empty dictionary.
dict(mapping) -> new dictionary initialized from a mapping object's
(key, value) pairs.
dict(seq) -> new dictionary initialized as if via:
d = {}
for k, v in seq:
d[k] = v

60
Camus,

Serais-tu capable de faire un tuto avec un encodeur rotatif qui pilote le PAN de la piste 1, pour essayer
de voir un peut plus claire dans ce charabia.
Merci.
61
Capable oui , mais je ne peux tester l'api concernée car je n'ai pas de contrôleur rotatif, et le développement avec une api incomplète comme celle de Live est purement empirique. donc les tests risquent d'être plutot hasardeux


ton contrôleur doit envoyer un certain message quand tu le tournes vers la droite et un autre quand tu le tournes vers la gauche. il suffit de créer une structure conditionnelle (if/elif) en relation avec les 2 messages pour augmenter ou diminuer la valeur de ton pan.

pour la méthode dans l'api , regarde les scripts trackcontroler.py de l'alesis photon que je donne en lien , une méthode a déjà été écrite pour accéder au pan

si tu veux plus d'aide publie l'implémentation midi complète de ton contrôleur.
62
Voici l' implémentation de mon contrôleur:

32 Encodeurs: encoderMapMode est LinearBinaryOffset
Enc1:CC31 Enc5:CC35 Enc9:CC39 Enc13:43 Enc17:47 Enc21:51 Enc25:55 Enc29:59

Enc2:CC32 Enc6:CC36 Enc10:CC40 Enc14:44 Enc18:48 Enc22:52 Enc26:56 Enc30:60

Enc3:CC33 Enc7:CC37 Enc11:CC41 Enc15:45 Enc19:49 Enc23:53 Enc27:57 Enc31:61

Enc4:CC34 Enc8:CC38 Enc12:CC42 Enc16:46 Enc20:50 Enc24:54 Enc28:58 Enc32:62

Comme tu peux voir j'ai 8 colonnes de 4 encodeurs, les CC je peux les assigner comme je veux.


Pourrait-on partir du dossir Mackie Control et de rajouter les 32 encodeurs.

La Mackie Control me convient très bien, si on pouvait implémenter les 32 encodeurs ça serait le TOP
63
Ca veut dire quoi LinearBinaryOffset ? quel message précis envoie ton controleur? un message de combiens de bytes et avec quel comportement quand tu le tournes, c'est ça que tu dois savoir.
Après tout le code concernant le volume , pan , sends , etc... est déja dans les scripts du alesis photon dont j'ai donné le lien.
64
Puis 8 boutons pour les 8 premier Track

Track1:note 24
Track2:note 25
Track3:note 26
Track4:note 27
Track5:note 28
Track6:note 29
Track7:note 30
Track8:note 31

Puis 8 boutons pour les 8 premier Mute

Mute1: note 16
Mute2: note 17
Mute3: note 18
Mute4: note 19
Mute5: note 20
Mute6: note 21
Mute7: note 22
Mute8: note 23

Puis 8 boutons pour les 8 premier Solo

Solo1: note 8
Solo2: note 9
Solo3: note 10
Solo4: note 11
Solo5: note 12
Solo6: note 13
Solo7: note 14
Solo8: note 15

Puis 8 boutons pour les 8 premier Armement

Arm1: note 0
Arm2: note 1
Arm3: note 2
Arm4: note 3
Arm5: note 4
Arm6: note 5
Arm7: note 6
Arm8: note 7

Puis 8 fader motorisé pour les 8 premier volume

Vol1: PitchBend canal 1
Vol2: PitchBend canal 2
Vol3: PitchBend canal 3
Vol4: PitchBend canal 4
Vol5: PitchBend canal 5
Vol6: PitchBend canal 6
Vol7: PitchBend canal 7
Vol8: PitchBend canal 8

Là j'ai repris la même configuration de la Mackie Control

Puis il y a le transport: Rew-FFwd-Stop-Play-Rec
les flèches haut-bas-gauche-droit pour naviguer dans les clips
un bouton pour déclencher les clips
un bouton pour déclencher les Scènes
Puch in
puch out
Loop
Arrangemnt/session
Afficher/masquer le navigatuer
Bank+ et Bank- pour passer au 8 pistes suivantes

Bon tout ça avec mon contrôleur ça marche nickel en mode Mackie
65

Citation : Ca veut dire quoi LinearBinaryOffset ? quel message précis envoie ton controleur? un message de combiens de bytes et avec quel comportement quand tu le tournes, c'est ça que tu dois savoir.



Où là comment savoir ça, ce que je sais mes encodeurs font 24 impulsions par rotations.
Pour les bytes je vais voir sur ucapps.de
Je me demande si c'est pas 7 bit
66
Et avec ça qu'est ce qu'on en fait, ça se met dans quel ficher

Citation : class MapMode(Boost.Python.enum)



Method resolution order:
MapMode
Boost.Python.enum
__builtin__.int
__builtin__.object

Data and non-method functions defined here:

__doc__ = None

__getstate__ = <built-in function __getstate__>

__slots__ = ()
tuple() -> an empty tuple
tuple(sequence) -> tuple initialized from sequence's items

If the argument is a tuple, the return value is the same object.

absolute = MidiMap.MapMode.absolute

absolute_14_bit = MidiMap.MapMode.absolute_14_bit

relative_binary_offset = MidiMap.MapMode.relative_binary_offset

relative_signed_bit = MidiMap.MapMode.relative_signed_bit

relative_signed_bit2 = MidiMap.MapMode.relative_signed_bit2

relative_smooth_binary_offset = MidiMap.MapMode.relative_smooth_binary_offset

relative_smooth_signed_bit = MidiMap.MapMode.relative_smooth_signed_bit

relative_smooth_signed_bit2 = MidiMap.MapMode.relative_smooth_signed_bit2

relative_smooth_two_compliment = MidiMap.MapMode.relative_smooth_two_compliment

relative_two_compliment = MidiMap.MapMode.relative_two_compliment

values = {0: MidiMap.MapMode.absolute, 1: MidiMap.MapMode.relative_signed_bit, 2: MidiMap.MapMode.relative_binary_offset, 3: MidiMap.MapMode.relative_two_compliment, 4: MidiMap.MapMode.relative_signed_bit2, 5: MidiMap.MapMode.absolute_14_bit, 6: MidiMap.MapMode.relative_smooth_signed_bit, 7: MidiMap.MapMode.relative_smooth_binary_offset, 8: MidiMap.MapMode.relative_smooth_two_compliment, 9: MidiMap.MapMode.relative_smooth_signed_bit2}
dict() -> new empty dictionary.
dict(mapping) -> new dictionary initialized from a mapping object's
(key, value) pairs.
dict(seq) -> new dictionary initialized as if via:
d = {}
for k, v in seq:
d[k] = v

67
Ça c'est juste une doc dont j'ai donné le lien.
68
Si tes encodeurs envoient des messages continus, pourquoi veux tu changer le mapmode cela ne sert à rien.

Il suffit d'adapter les données du fichiers const.py aux infos qu'envoie ton controleur , tu n'as rien à faire de plus.

tu dois changer le map mod uniquement quand ton contrôleur envoie un message complexe (genre CC43 vers la droite et CC44 vers la gauche) , ce qui n'est absolument pas le cas si on se base sur ce que tu viens d'écrire.
69
Je ferai un test quand mon contrôleur sera monté complètement et je te dis quoi avec mes encodeurs. :bravo:
70
Quand je parle de LinearBinaryOffset ,c'est quand j'assigne mes encodeurs un paramètre en midi, Live m'indique en bas à gauche de l'écran LinearBinaryOffset et pas Absolut comme les simples potentiomètres.

une info pour ceux qui ne savent pas la différence entre un encodeur et un potentiomètre

L'avantage des encodeurs c'est qu'il n'y a pas de saut quand on bouge un paramètre.
Alors qu'avec un potentiomètre, si ton paramètre dans Live (ex: PAN) est complètement à droite et que ton pot de ton contrôleur est à gauche ( mode de reprise: Graduer dans les option MIDI ), il faut tourner ton pot à droite et puis seulement régler ton paramètre.
71
Dans ce cas ton "encoder" n'envoie pas un contrôle change mais un autre type de message en fait 2 messages différents selon la direction de 'révolution' du contrôleur , donc l'implémentation que tu décrit ci dessus n'est pas bonne.

quoiqu'il en soit, je t'ai proposé une solution avec une structure conditionnelle, ou alors l'utilisation de la classe midimap avec les dictionnaires en python, faut que tu te plonges un minimum dans le code sinon tu n'iras pas loin.

tu as la classe trace fournie avec le script de départ , à toi de regarder dans le fichier log qui sera crée quel message exact envoie ton contrôleur , parce que la on n'en sait toujours rien.
72
J'ai fait un test de mes encodeurs avec le logiciel MIDI Monitior sur Mac pour voir ce que les encodeurs envoient.

voici les messages en tournant l'encodeur 22 vers la gauche, c'est toujours le chiffre 63 qu'envoie l'encodeur

Time Source Messge Chan DATA

22:35:15.394 From YAMAHA UX96 Port1 Control 1 Controller 22 63
22:35:15.544 From YAMAHA UX96 Port1 Control 1 Controller 22 63
22:35:15.654 From YAMAHA UX96 Port1 Control 1 Controller 22 63
22:35:16.137 From YAMAHA UX96 Port1 Control 1 Controller 22 63
22:35:16.288 From YAMAHA UX96 Port1 Control 1 Controller 22 63
22:35:16.511 From YAMAHA UX96 Port1 Control 1 Controller 22 63
22:35:16.690 From YAMAHA UX96 Port1 Control 1 Controller 22 63

En tournant vers la droite, c'est toujours 65 qu'envoie l'encodeur

22:47:41.528 From YAMAHA UX96 Port1 Control 1 Controller 22 65
22:47:41.688 From YAMAHA UX96 Port1 Control 1 Controller 22 65
22:47:41.823 From YAMAHA UX96 Port1 Control 1 Controller 22 65
22:47:41.970 From YAMAHA UX96 Port1 Control 1 Controller 22 65
22:47:42.358 From YAMAHA UX96 Port1 Control 1 Controller 22 65
22:47:42.528 From YAMAHA UX96 Port1 Control 1 Controller 22 65

C'est bien comme tu disais, il y a 2 valeurs différentes quand on tourne à gauche et à droite




Un autre test avec mon contrrôleur PCP-300 d'Edirol.
Ici j'utilise des potentiomètres


quand je tourne le potentiomètre vers la droite, on voit défiler des chiffres de 0 à 127

22:53:57.845 From EDIROL PCR 1 Control 1 Controller 22 1
22:53:57.881 From EDIROL PCR 1 Control 1 Controller 22 2
22:53:57.899 From EDIROL PCR 1 Control 1 Controller 22 3
22:53:57.935 From EDIROL PCR 1 Control 1 Controller 22 4
22:53:57.953 From EDIROL PCR 1 Control 1 Controller 22 5
22:53:57.971 From EDIROL PCR 1 Control 1 Controller 22 6
22:53:58.007 From EDIROL PCR 1 Control 1 Controller 22 7
22:53:58.025 From EDIROL PCR 1 Control 1 Controller 22 8
22:53:58.061 From EDIROL PCR 1 Control 1 Controller 22 9
22:53:58.079 From EDIROL PCR 1 Control 1 Controller 22 10
22:53:58.097 From EDIROL PCR 1 Control 1 Controller 22 11
22:53:58.116 From EDIROL PCR 1 Control 1 Controller 22 12
22:53:58.170 From EDIROL PCR 1 Control 1 Controller 22 13
22:53:58.224 From EDIROL PCR 1 Control 1 Controller 22 14
22:53:58.278 From EDIROL PCR 1 Control 1 Controller 22 15
22:53:58.404 From EDIROL PCR 1 Control 1 Controller 22 16
22:53:58.476 From EDIROL PCR 1 Control 1 Controller 22 17

Et vers la gauche de 127 à 0


23:00:47.018 From EDIROL PCR 1 Control 1 Controller 22 126
23:00:47.072 From EDIROL PCR 1 Control 1 Controller 22 125
23:00:47.198 From EDIROL PCR 1 Control 1 Controller 22 124
23:00:47.740 From EDIROL PCR 1 Control 1 Controller 22 123
23:00:47.812 From EDIROL PCR 1 Control 1 Controller 22 122
23:00:47.938 From EDIROL PCR 1 Control 1 Controller 22 121
23:00:47.956 From EDIROL PCR 1 Control 1 Controller 22 120
23:00:47.992 From EDIROL PCR 1 Control 1 Controller 22 119
23:00:48.028 From EDIROL PCR 1 Control 1 Controller 22 118
23:00:48.064 From EDIROL PCR 1 Control 1 Controller 22 117
23:00:48.082 From EDIROL PCR 1 Control 1 Controller 22 116
23:00:48.118 From EDIROL PCR 1 Control 1 Controller 22 115
23:00:48.136 From EDIROL PCR 1 Control 1 Controller 22 114
23:00:48.172 From EDIROL PCR 1 Control 1 Controller 22 113
73
Dans Live avec tout ce qui est generic Encoder, mes encodeurs ne répondent pas
avec photon_X25 marche pas non plus.

Il y a qu'avec Mackie Control et Mackie Control Classic que mes encodeurs répondent, mais quand je tourne à gauche le Pan piste 1 tourne vite vers la droite et quand je tourne l'encodeur vers la droite le Pan tourne tout doucement vers la gauche.

dansle dossier Mackie Control, fichier Mackie Control.py il y a


def suggest_map_mode(self, cc_no, channel):
result = Live.MidiMap.MapMode.absolute
if (cc_no in range(FID_PANNING_BASE, (FID_PANNING_BASE + NUM_CHANNEL_STRIPS))):
result = Live.MidiMap.MapMode.relative_signed_bit
return result


J'ai changé result=Live.MidiMap.MapMode.relative_signed_bit

par
result=Live.MidiMap.MapMode.relative_binary_offset

Mais là, mes encodeurs ne répondent plus???
J'y comprend rien :(((
74
Ou à tu trouvé le fichier Mackie Control.py puisque les fichiers livrés avec Live sont compilés?

Pour faire marcher ton controleur avec le script photon il faut au minimum changer les numéros de CC dans le fichier const et surtout changer les canaux midi du midi channel mal sachant que le canal 1 = 0 , canal 2 = 1 , etc...
75
J'ai tous les dossiers des contrôleurs en .py ,je ne sais plus où je les est téléchargés, je peux te les envoyer par mail.