Se connecter
Se connecter

ou
Créer un compte

ou
Agrandir
Les Mains dans le Cambouis
Bidouille & Développement Informatique

Sauvegardes des paramètres dans un VST

  • 5 réponses
  • 2 participants
  • 665 vues
  • 2 followers
Sujet de la discussion Sauvegardes des paramètres dans un VST
Salut à tous,

Je développe molo un VST depuis un an et j'arrive tout doucement à la phase Sauvegarde des paramètres.

Première chose bonne à savoir, dans mon VST, les paramètres peuvent être très nombreux.

Je vois deux cas de sauvegarde:
1) la sauvegarde de presets, et
2) la sauvegarde des données utilisées par l'instance du VST dans le contexte d'un morceau dans le séquenceur-hôte (Traktion, Cubase, ...).

Pour le 1er cas, les presets, j'ai une fonction de sauvegarde de fichiers dans un format texte. Simple.

Pour le 2ème cas, les données "en cours", je ne vois pas comment faire mémoriser dans le morceau ou le séquenceur les paramètres à remettre à l'ouverture dans mon VST. La spec VST de Steinberg de m'a beaucoup éclairé.

La question n'a pas l'air simple, car j'ai vu des VST où cela ne marchait tout simplement pas. A chaque ouverture du séquenceur, il fallait respécifier les paramètres du VST :x:

Comment vous faîtes ou avez fait dans vos développements de VST ?

Merci,

Laurent

J'avais perdu mes tablatures, Zploger me les a retrouvées.

2
Un petit UP à tous les développeurs !!

J'avais perdu mes tablatures, Zploger me les a retrouvées.

3
Je ne suis pas capable de répondre directement à ta question, mais j'ai déjà rencontré ce problème avec un utilitaire qui génére des presets pour les VST (voire le lien "VPG" dans ma signature).
Je crois que la sauvegarde "dans le morceau", est en fait une sauvegarde classique, et souvent avec la méthode chunk (données brutes qui n'ont pas toujours de rapport avec les paramétres accessibles).

Je te conseillerais donc de programmer les fonctions getChunk et setChunk comme indiqué dans le sdk VST (audioeffect.h), et de vérifier ensuite dans différents séquenceurs si cela fonctionne.

virtual VstInt32 getChunk (void** data, bool isPreset = false)
///< Host stores plug-in state.
///Returns the size in bytes of the chunk (plug-in allocates the data array)

virtual VstInt32 setChunk (void* data, VstInt32 byteSize, bool isPreset = false)
//< Host restores plug-in state

Tu organise ton "chunk" comme tu le souhaites, il faut juste que tu sois capable de le faire relire par ton plug-in lors du chargement. C'est donc dedans que tu vas mettre tes "états en cours" !

Si tous les paramétres de ton plug-in sont contenus dans les "paramètres VST" (en gros, ceux sur lequels tu peux mettre une automation dans ton séquenceur), tu peux alors te passer de la méthode dite des "chunks", et simplement surcharger les méthodes relatives aux paramètres (setParameter, getParameter, etc.). Le séquenceur va alors enregistrer la position de ces paramétres pour garantir la sauvegarde.

Tiens nous au courant de tes avancées :coucou:
4
Ok merci pour la suggestion.

Donc dans le getChunck, je peux retourner ce que je veux ? Par exemple des données XML , que je rechargerais au setChunk ?

Dans ton VPG, tu as eu le problème sous quelle forme ? Est-ce qu'il se comporte comme un VST host ou un VST plug-in ?

J'avais perdu mes tablatures, Zploger me les a retrouvées.

5

Citation : Donc dans le getChunck, je peux retourner ce que je veux ? Par exemple des données XML , que je rechargerais au setChunk ?


Oui, tu peux mettre ce que tu veux, par contre ce sont des données binaires, donc un format xml risque de faire perdre pas mal de place. Mais c'est effectivement réalisable. Par contre, il faut que tu active un flag pour indiquer au séquenceur que tu utilises cette méthode (je n'ai pas la doc sous les yeux actuellement, mais c'est une fonction du genre "getFlag" ou autre)

Le VST Preset Generator se comporte comme un host à fonctionnalités réduites : il charge le VST, récupère les paramétres, et écrit un preset de sauvegarde en fonction de cela. Pour les vst utilisant les chunk, il assigne les paramétres au vst et lui demande le chunk de sauvegarde correspondant... Je suis donc confronté en gros au même problèmes que toi, mais du coté hôte !

D'ailleurs le problème (volontaire) qu'ont certains synthé de ne pas sauvegarder leur état avec la sauvegarde du séquenceur, vient souvent du fait qu'ils n'ont pas répecté la "norme" VST spécifiée par Steinberg, avec les différentes fonctions qu'il faut implémenter. Ils utilisent alors un système de sauvegarde propiétaire (Absynth ou Synth1 par exemple)...
6
Si tu veux avoir une idée plus précise du fonctionnement d'un hôte VST, il y une version opensource ici :
http://www.hermannseib.com/english/vsthost.htm

elle n'est pas à jour et un peu buggée, mais cela permet de se faire une opinion sur le principe de sauvegarde/chargement.