Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1621 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Bien préparer le main.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Bien préparer le main.

n°2168087
Profil sup​primé
Posté le 14-12-2012 à 11:57:25  answer
 

Bonjour, je fais appel à vous une fois de plus en espérant être suffisamment descriptif et concis dans l'objet qui m'amène.
Je développe un compositeur virtuel pour instrument MIDI.
Je souhaite donc écrire la musique de manière optimale grâce à l'outil informatique.
J'ai donc décrété qu'il existe quatre sorte de musicalogique,  

  • la naturelle,
  • la fusion,  
  • la fission  
  • et le silence.

A ce premier paramètre musical,s'ajoute

  • le durée d'une partie dans l'un de ces "modes",
  • le tempo à atteindre,
  • la forme musicale initiale  

et optionnellement  

  • la forme musicale terminale  


J'ai donc un type d'objet définie par :

  • Mode,
  • Bar_max,
  • Tempo,
  • init_form
  • term_form


exemple : de flux de donnée.

Citation :


nature                   100  60  classical
fusion 30               110 classical electro
fission 10              130     classical       electro
nature  80              130     electro
fusion 140             130     electro  acid
fission 80              130     electro  acid
nature  80              130     acid
fusion  80              150     acid            jazz
fission 40              150     jazz            acid
silence 8               150     null_item


 
J'aurais voulu avoir votre avis sur le concept, l'architecture découlant de cette "spécification" ?
Je me pose des question comme, une interface X est-elle indispensable.
Si non, dois-je prendre une ligne ou doits-je prendre la page du terminal entière ?
Dois-je lire les entrée ou un fichier ?
Dois-je faire des menu ?
Le mieux quoi ?
En gros, quelle interface pour ce projet.
Je pose la question parce que je commence toujours par le main,et la voilà les questions !
 
Merci pour votre aide.
 
 
----------
edit :
 
 
 
Ce programme est basé au préalable sur la lecture d'un fichier nommé en dur "bank.txt" qui doit décrire l'organisation de la banque du programme du synthétiseur par une liste de forme musicale tel que :

1 2 128
0 0 0 classical
0 0 1 classical
0 0 2 classical
0 0 3 classical
0 0 4 classical
0 0 5 classical
0 0 6 classical
0 0 7 classical
0 0 8 classical
0 0 9 classical
0 0 10 classical
0 0 11 classical
0 0 12 classical
0 0 13 classical
0 0 14 classical
0 0 15 classical
0 0 16 electro
0 0 17 electro
0 0 18 electro
0 0 19 electro
0 0 20 electro
0 0 21 electro
0 0 22 electro
0 0 23 electro
0 0 24 electro
0 0 25 electro
0 0 26 electro
0 0 27 electro
0 0 28 electro
0 0 29 electro
0 0 30 electro
0 0 31 electro
0 0 32 acid
0 0 33 acid
0 0 34 acid
0 0 35 acid
0 0 36 acid
0 0 37 acid
0 0 38 acid
0 0 39 acid
0 0 40 acid
0 0 41 acid
0 0 42 acid
0 0 43 acid
0 0 44 acid
0 0 45 acid
0 0 46 acid
0 0 47 acid
0 0 48 jazz
0 0 49 jazz
0 0 50 jazz
0 0 51 jazz
0 0 52 jazz
0 0 53 jazz
0 0 54 jazz
0 0 55 jazz
0 0 56 jazz
0 0 57 jazz
0 0 58 jazz
0 0 59 jazz
0 0 60 jazz
0 0 61 jazz
0 0 62 jazz
0 0 63 jazz
 
 
 

Message cité 1 fois
Message édité par Profil supprimé le 15-12-2012 à 16:13:25
mood
Publicité
Posté le 14-12-2012 à 11:57:25  profilanswer
 

n°2168118
Profil sup​primé
Posté le 14-12-2012 à 16:04:04  answer
 

j'ai pondu un main file, j'espère qu'il va tenir la route.
sources : http://80.15.188.151/main.adb.html

Code :
  1. --  WaveSched is MIDI virtual Composer.
  2. --------------------------------------------------------------------------------
  3. --  Copyright (C) 2012 jovalise.
  4.  
  5. --  This program is free software: you can redistribute it and/or modify
  6. --  it under the terms of the GNU General Public License as published by
  7. --  the Free Software Foundation, either version 3 of the License, or
  8. --  (at your option) any later version.
  9.  
  10. --  This program is distributed in the hope that it will be useful,
  11. --  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. --  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. --  GNU General Public License for more details.
  14.  
  15. --  You should have received a copy of the GNU General Public License
  16. --  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  17. --------------------------------------------------------------------------------
  18.  
  19. -- ********************----------------
  20. -- ********************----------------
  21. -- ***              ***----------------
  22. -- ***  Wave Sched  ***----------------
  23. -- ***              ***----------------
  24. -- ********************----------------
  25. -- ********************----------------
  26. -- Author       : jovalise-------------
  27. -- Date         : 2012/12/14-----------
  28. -- Description  : Wave Sched is MIDI virtual Composer.
  29. --------------------------------------------------------------------------------
  30.  
  31.  
  32. --with Wave_Scheduler;
  33. with Gnat.Command_Line;
  34. use Gnat;
  35. with Ada.Text_Io;
  36. use Ada;
  37. procedure Main is
  38.  
  39.   Project_Name   : constant String := "WaveSched";  
  40.  
  41.   -- Si un fichier est spécifier sur la ligne de commande, le nom de fichier est utilisé.
  42.   -- Si non, on utilise le nom de fichier par défaut :      
  43.   Filename       : access String := new  String ' (Project_Name & ".txt" );  
  44.   -- Nom de fichier utilisé.
  45.  
  46.   File_Available : Boolean := False;
  47.   -- Indique si un nom de fichier a été fourni.
  48.  
  49.   Interactive    : Boolean := False;
  50.   -- Indique si le programme doit être interactif. False par défaut.
  51.  
  52. begin
  53.  
  54.  
  55.   -- Synopsys : wavesched [ -i ] [ -ffilename ]
  56.  
  57.   begin
  58.      loop
  59.      case Command_Line.Getopt ("i f:" ) is  -- Accepts '-i', '-f:parameter'.
  60.         when ASCII.NUL => exit;
  61.           
  62.         when 'i' =>
  63.            if Command_Line.Full_Switch = "i" then
  64.           
  65.           Interactive := True;
  66.           
  67.            else
  68.           raise Command_Line.Invalid_Switch;
  69.            end if;
  70.         when 'f' =>
  71.            if Command_Line.Full_Switch = "f" then
  72.           
  73.           begin
  74.             
  75.              Filename := new String ' (Command_Line.Parameter);
  76.              File_Available := True;
  77.           exception
  78.             
  79.              when others =>
  80.             Text_Io.Put_Line("invalid parameter for -f option" );
  81.             raise Command_Line.Invalid_Parameter;
  82.           end;
  83.            else
  84.           raise Command_Line.Invalid_Switch;
  85.            end if;
  86.         when others =>
  87.            raise Program_Error;         -- cannot occur!
  88.      end case;
  89.      end loop;
  90.      
  91.   exception
  92.      when Command_Line.Invalid_Switch    => Text_Io.Put_Line ("Invalid Switch " & Command_Line.Full_Switch);
  93.      raise;
  94.      when Command_Line.Invalid_Parameter =>
  95.      raise;
  96.   end;
  97.   -- Lecture des arguments de la ligne de commande.
  98.   -- Si l'argument "-i" est présent, bascule la variable "Interactive" à True.
  99.   -- Si l'argument "-f" est présent, initialise le nom du fichier avec le paramètre.
  100.  
  101.  
  102.  
  103.  
  104.   if not File_Available then
  105.      declare
  106.      Success : Boolean := True;
  107.      begin
  108.      while Success loop
  109.         --Success := Wave_Scheduler.New_Part;
  110.         null;
  111.      end loop;    
  112.      --Wave_Scheduler.Save_All_Parts_As(filename);
  113.      null;
  114.      File_Available := True;
  115.      end;    
  116.   end if;
  117.   -- Si aucun nom de fichier n'a été fourni on lit l'entrée standard jusqu'à --
  118.   -- la fin du texte et on sauvegarde le fichier avec le nom de fichier par défaut.
  119.  
  120.  
  121.   --Wave_Scheduler.Initialize(Filename);
  122.   -- On initialize le wave_scheduler.
  123.  
  124.  
  125.   --Wave_Scheduler.Start(Clock);
  126.   -- On démarre le wave_scheduler.      
  127.  
  128.   if Interactive then
  129.      declare
  130.      Success : Boolean := True;
  131.      begin
  132.      while Success loop    
  133.         --Success := Wave_Scheduler.New_Part;
  134.         null;
  135.      end loop;        
  136.      --Wave_Scheduler.Save_All_Parts_As(filename);
  137.      end;
  138.   end if;
  139.   -- Si le programme est exécuté en mode interatif, on lis les nouvelles parties sur l'entrée standard et on sauvegarde le résultat.
  140.  
  141.  
  142.   --Wave_Scheduler.Finalization;
  143.   -- On attend la fin du programme.
  144.  
  145.  
  146. end Main;


Message édité par Profil supprimé le 14-12-2012 à 16:10:35
n°2168174
Profil sup​primé
Posté le 15-12-2012 à 16:24:38  answer
 

Code :
  1. -- Ce programme lit l'entrée standard si il est appelé avec l'option -i (interactive)
  2. -- ou si aucun nom de fichier n'a été fournit et lit un fichier nommé "bank.txt" dans
  3. -- lequel il lit les information sur la banque de son à jouer.
  4. -- Le fichier "bank.txt" doit contenir une première ligne avec les nombre de banque
  5. -- LSB, MSB, et le nombre de programme par banque ; puis la liste des formes musicales
  6. -- par programme.
  7. -- exemple : (voir fichier "bank.txt" )
  8. -- Le fichier dont le nom est fourni doit contenir des lignes décrivant une partie à
  9. -- jouée par le mode, la longueur, la forme initiale, le tempo, et optionnellement
  10. -- le forme terminale.
  11. -- exemple : (voir fichier "WaveSched.txt" )
  12. ----------------------------------------------------------------------------------


 
 
Voici le résultat du programme.
 

root@Muse:/home/root/WaveSched# ./bin/wavesched -i -f WaveSched.txt  
Select output device :
ID, Name
 0, Midi Through Port-0
 2, WORLDE CONTROLLER MIDI 1
 4, Audigy MPU-401 (UART)
 6, Audigy MPU-401 #2
 8, Emu10k1 Port 0
 9, Emu10k1 Port 1
 10, Emu10k1 Port 2
 11, Emu10k1 Port 3
 12, RADIAS MIDI 1
 14, RADIAS MIDI 2
Entre device ID : 14
Your selected device :
RADIAS MIDI 2
Mode:fission
size:120
Initial form:
 1      null_item
 2       classical
 3       electro
 4       acid
 5       jazz
N° 5
Tempo:150
Terminal form:
 1      null_item
 2       classical
 3       electro
 4       acid
 5       jazz
N° 4
 
Mode:


Vous êtes où ?  [:tonio65]


Message édité par Profil supprimé le 15-12-2012 à 16:33:25
n°2168206
ewas
electronic wait and see
Posté le 16-12-2012 à 13:08:40  profilanswer
 


 
Oui, l'interface est importante. C'est bien plus motivant pour les utilisateur de machines virtuelles. Sinon, avec la dématérialisation l'outil devient trop abstrait et peu attrayant, même s'il est efficace. :D
 
Tu peux t'inspirer de l'interface des VST -> http://bit.ly/TUFF9W - Il faudrait que tu concrétises un peu le biniou par le schéma, avec des "slider" et/ou "knob" pour illustrer. Tu pourrais éventuellement trouver conseil sur ce forum des développeurs de VSTi sous Synthedit-> http://nay-seven.com/index.php - Il y a sans doute parmi eux des adeptes qui je pense développent aussi en langage évolué, peut-être pas en ADA, mais qui pourraient mieux comprendre où tu veux en venir et te conseiller. Voilà pour le moment tout ce que je peux te dire. Pour ma part je vais suivre l'évolution de ton projet et essayer d'en comprendre plus, mais plutôt en temps qu'utilisateur en attente (comme la plupart des utilisateurs, d'ailleurs, j'y vais plutôt de manière empirique, c'est pour ça qu'une interface intuitive, autant qu'esthétique, serait la bienvenue). ;)


---------------
c'est quand qu'on va où ?
n°2168214
Profil sup​primé
Posté le 16-12-2012 à 15:31:40  answer
 

Bonjoue ewas,  
D'abord merci pour ta contribution.
Pour le moment l'interface se présente dans un terminal qui permet de saisir tout au long de l'oeuvre une nouvelle partie de l'oeuvre.
 

Mode:fusion
size:16
Initial form:
 1      classical
 2      jazz
 3      electro
 4      acid
 5      techno
 6      hardtech
 7      tribe
 8      hardcore
 9      null_item
N° 4
Tempo:130
Terminal form:
 1      classical
 2      jazz
 3      electro
 4      acid
 5      techno
 6      hardtech
 7      tribe
 8      hardcore
 9      null_item
N° 2
 
Mode:


 
edit : sans doublon.


Message édité par Profil supprimé le 16-12-2012 à 15:42:49
n°2168220
ewas
electronic wait and see
Posté le 16-12-2012 à 20:31:26  profilanswer
 


    http://hfr-rehost.net/gif/d8cfeba23e2505e2c717cef3055d6a99d939e2fc.gif
 
J'ai failli lui mettre un bonnet de Noël. Mais bon. :D
 
Là il y a quatre touches, un peu comme à un player. C'est juste pour le fun et meubler l'interface. Mais en fait, deux touches suffiraient, une pour la sélection du genre musical que tu fais scroller dans l'affichage, et l'autre, un "run/stop". Mais tu sembles me dire qu'il y a d'autres paramètres à initialiser. Quels sont ces paramètres ?

Message cité 1 fois
Message édité par ewas le 23-12-2012 à 06:39:15

---------------
c'est quand qu'on va où ?
n°2168259
Profil sup​primé
Posté le 17-12-2012 à 11:06:46  answer
 

ewas a écrit :

Si je comprends bien, ce sont simplement des touches de sélection qu'il faut à ton interface ?


 
Je sais pas ce que tu appelle une touche de sélection.
 
Comme tu peux le voir, il faut entrer 4 ou 5 paramètres dont un ou deux sont des sélection dans une liste.
 
C'est intégrable à une interface X plus ou moins facilement.... Mais ça se fait.

n°2169049
ewas
electronic wait and see
Posté le 23-12-2012 à 06:30:55  profilanswer
 

Ah merde c'est raté, j'ai écrasé mon post précédent d'une fausse manoeuvre. J'ai édité au lieu de répondre. Il est vrai qu'il est tard... :sleep:


---------------
c'est quand qu'on va où ?
n°2169052
Profil sup​primé
Posté le 23-12-2012 à 10:08:51  answer
 

Woais, non, mais faire un dessin, c'est pas de la programmation.
Si tu lisais le sujet...:/

n°2169053
Profil sup​primé
Posté le 23-12-2012 à 10:24:13  answer
 

  • En fait, faut d'abord que je sélectionne un périphérique de sortie.


En suite tout au long du programme je doit

  • choisir un mode entre (fusion, fission, nature, silence)
  • donner une dimension de partie.
  • donner le tempo à atteindre.
  • choisir un style initial

Et si le mode est différent de nature et silence

  • je dois fournir un style terminal.


Ca fait six paramètres au total.
 
Mais avant ça, j'ai deux fichiers de données à lire et si je fais une interface, je vais permettre de les écrire.
En fait ça fait une interface de plus pour le fichier de banque puisque le fichier de parties c'est celui que l'on écrit dans l'interface principale.

mood
Publicité
Posté le 23-12-2012 à 10:24:13  profilanswer
 

n°2169059
ewas
electronic wait and see
Posté le 23-12-2012 à 11:51:39  profilanswer
 


Ah ben alors faudrait savoir si tu as besoin d'une interface ou non. C'était à la fois égayer le sujet et concrétiser les propos pour y voir plus clair. Ça ne mange pas de pain. Par ailleurs la programmation s'occupe aussi d'interface, avec du graphisme, que je sache. :??:
 
Je sais pas ce que vous avez tous sur ce forum. Mais vous êtes tous plus ou moins psychorigides ou quoi ? Vivement que l'année se termine et qu'on passe à autre chose !


---------------
c'est quand qu'on va où ?
n°2169075
Profil sup​primé
Posté le 23-12-2012 à 17:46:18  answer
 

Je plaisantais. [:dawa]

n°2169088
ewas
electronic wait and see
Posté le 24-12-2012 à 00:58:05  profilanswer
 

Bon ok, c'est c'qu'on dit après coup. :o Avec une tronche de smiley plutôt verdâtre. :D
 
Cela dit, ton sujet m'intéresse, mais les réponses que sollicitent tes questions sont plutôt du ressort de compétances que je n'ai pas en programmation et norme MIDI. Mais bon, je veux bien en apprendre plus à cette occasion.
 
Cela dit², je ne vois pas bien pourquoi ton programme nécessiterait une seconde interface (au mieux l'ouverture d'une fenêtre pour une quelconque saisie). Mais parlent-t-on bien de la même chose en matière d'interface ?
 
As-tu pensé à voir ça éventuellement sur le petit forum que je t'ai indiqué ? Ils sont convivial, tu sais, ils ne vont pas te manger ! :D
 


---------------
c'est quand qu'on va où ?
n°2169145
Profil sup​primé
Posté le 25-12-2012 à 18:38:06  answer
 

Oui, je vais faire une interface graphique, pour facilité tout les paramétrages, avec quelque fenêtre ad'hoc.
Je ne suis pas allez voir le forum en question ?

n°2169250
Profil sup​primé
Posté le 28-12-2012 à 05:19:01  answer
 

Bonjour,
 
 
Donc, comme prévu, je me fais une interface graphique pour mon programme qui sera un mix de Quatur-0.2.x et de WaveSched
 
Voici ma fenêtre principale :  
 
http://80.15.188.151/dev/Phoebus-main_window-screenshot_2.jpg
 
 
Dans la zone de texte Log, je vais peut-être afficher d'autres messages sur les entrées en provenance d'une surface de contrôle MIDI et peut-être sur les sorties vers le périphérique de sortie MIDI, genre note on note off, etc.
 
A mais j'ai oublié les périphériques, allé au boulot....

n°2169371
ewas
electronic wait and see
Posté le 30-12-2012 à 05:56:46  profilanswer
 

Citation :

Not Found - The requested URL /dev/Phoebus-main_window-screenshot_2.jpg was not found on this server.

[:clooney2]

Citation :

A mais j'ai oublié les périphériques, allé au boulot....

Ouais, et qu'ça saute mon coco ![:adrien monk]


---------------
c'est quand qu'on va où ?
n°2169373
Profil sup​primé
Posté le 30-12-2012 à 08:07:58  answer
 

http://80.15.188.151/dev/Phoebus-main_window-screenshot_3.jpg

n°2169376
ewas
electronic wait and see
Posté le 30-12-2012 à 10:16:26  profilanswer
 

AH YAISSS ! C'est plus parlant. Mais c'est un appareil de pro que tu vas nous pondre. Ça va être au moins pour des chercheurs de l'IRCAM, ce truc. :D
 
La "bank" en question, ce sera une banque de samples ou de presets ? Les paramètres à saisir, des variables ?
 
Dommage que c'est réservé aux linuxiens. :o
 
 
Edit : Et ton projet de streaming, tu abandonnes ?


Message édité par ewas le 30-12-2012 à 10:22:38

---------------
c'est quand qu'on va où ?
n°2169379
Profil sup​primé
Posté le 30-12-2012 à 12:23:43  answer
 

La banque c'est pour l'identification des programmes/presset de la banque de l'instrument à jouer.
On saisie la position du programme dans la banque, la forme musicale associer et la composition du programme pas MIDI channel.
 
L'idée de streaming est abandonnée oui.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Bien préparer le main.

 

Sujets relatifs
Help, j'ai besoin d'un coup de main..bien nommer les backups rman
Bien sécuriser les variables GETProblème pour faire liaison entre main.c et header.h
[PHP+SQL] Cherche un petit coup de main pour une application simpleproblème sur le main java
htacces, redirection, dossier et surtout un petit coup de main[VB.NET] Préparer une impression
Vérifier qu'une URL correspond bien à un site Internetjquery et ui : j'ai besoin d'un petit coup de main pour me lancer.
Plus de sujets relatifs à : Bien préparer le main.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR