|
Posted - 11/14/2006 : 15:44:49
|
So che qui dentro ci sono diversi musici e qualche informatico, meglio se esperto di Java Swing, ho il seguente problema che stò cercando di risolvere per impratichirmi appunto con le Swing di Java, posto il problema e poi passo a qualche domandina :
Realizzare un'applicazione grafica che funzioni da metronomo. Il metronomo è un dispositivo che scandisce il trascorrere del tempo secondo una determinata frequenza, espressa in battiti per minuto. Ogni battito corrisponde a un tempo. Per mostrare che è trascorso un tempo, il metronomo colora completamente un cerchio, di cui in precedenza era mostrato il solo contorno. L'applicazione mostra alcuni cerchi, dei quali, in ogni istante, uno solo è colorato; i cerchi si colorano in sequenza, e dopo che l'ultimo è stato colorato si colora nuovamente il primo. Il numero di cerchi della sequenza dipende dal metro della musica. I metri semplici sono i seguenti: • 2/4: 2 tempi, e quindi 2 cerchi; il primo tempo è forte, il secondo è debole • 3/4: 3 tempi; il primo è forte, gli altri sono deboli • 4/4: 4 tempi; il primo è forte, il secondo debole, il terzo mezzoforte, il quarto debole I cerchi corrispondenti ai tempi forti o mezzoforti devono essere distinguibili graficamente dagli altri cerchi. Ogni volta che tutti i tempi del metro sono passati, si dice che è trascorsa una battuta. Attraverso un'idonea GUI, l'utente deve essere in grado di: 1. Selezionare il metro (tra quelli indicati in precedenza) e la frequenza del metronomo. 2. Avviare/sospendere il metronomo (metodi start/stop della classe Timer). 3. Riavviare il metronomo. 4. Leggere il numero di battute trascorse a partire dall'ultimo riavvio del metronomo. 5. Consentire all'utente di impostare un metro arbitrario: l'utente deve poter definire il numero di tempi per battuta. 6. Consentire all'utente di cambiare il colore di riempimento di ogni singolo cerchio, facendo clic su di esso con il mouse e selezionando il suo colore da una paletta.
ed ecco le mie domandine :
-
"l'utente deve poter definire il numero di tempi per battuta" , ma in musica quale numero è sensato per il numero di tempi per battuta, voglio dire, 100, 1000, quanti, insomma de che stamo a parlà ??
-
Da un punto di vista informatico mettiamo che i tempi siano 1000, ciò vuol dire che debbo poter disegnare 1000 cerchi, questo mi provoca un qualche problema di impaginazione, come posso strutturare tale applicazione ?? Pensavo di utilizzare un JScrollPane, all'interno metterci tanti Jpanel quanti sono i cerchi, in questo modo magari potrei sfruttare l'impaginazione automatica che mi viene dal Layout prescelto, ma non sò se poi posso continuare a utilizzare un unico Timer per colorare i cerchi nei diversi JPanel
Qualche idea sull'aspetto funzionale e magari su come strutturare la GUI ???
Grazie
|
CapoStecca 2008 & 2010 & Mutanda 2014 |
Country: Italy ~
Posts: 8976 ~
Member Since: 10/21/2005 ~
Last Visit: 07/26/2024
|
Alert Moderator
|
|
|
|
Posted - 11/14/2006 : 16:46:04
|
Cerco di rispondere alla prima parte del quesito, perchè la seconda nemmeno la capisco tanto...
Come giustamente è riportato nella traccia, i tempi semplici sono i 2/4, 3/4 e 4/4, ovvero tutte le notazioni basate su tempo doppio, triplo o quadruplo.
Poi ci sono i tempi composti che derivano dai tempi semplici, ma ad ogni battito del tempo semplice associano gruppi di 3 o 4 battiti e quindi si hanno ad esempio:
- 3 battiti (terzina) x 4/4 ---> 12/4 - 3 battiti x 4/8 ---> 12/8
Poi si hanno i tempi asimmetrici quando la musica prevede 5, 7 o 11 battiti per battuta: in tal caso il fraseggio può essere differente e prevedere ad esempio nel caso di 7 battiti la sequenza (Forte, Debole) F D D F D D D oppure F D D D F D D oppure F D F D D F D...
Insomma, per farla breve, secondo me al max si potrà arrivare a 12 battiti per battuta, ma per stare tranquillo 32 come massimo può bastare. |
Face your fears. Live your dreams.
Sarebbe ora di fare un bel po' di sano windsurf! |
Edited by - SerFer on 11/14/2006 16:46:52 |
Panettone Oro 2010 |
Country: Spain ~
Posts: 3421 ~
Member Since: 11/12/2005 ~
Last Visit: 09/21/2018
|
Alert Moderator
|
|
|
Gia
Starting Member
Status:
offline
| |
Posted - 11/14/2006 : 17:31:51
|
Ciao a tutti.
Non sono affatto ferrato in programmazione java, ma posso comunque dare qualche consiglio in proposito: - la velocità di un metronomo va dalle 48 battute al minuto, a circa 170 battute al minuto. Ciò significa che un metronomo "classico" emette da 48 a 170 'tic' al minuto. - Chi studia musica solitamente non guarda il metronomo, ma lo ascolta. Quindi i cerchi colorati sono utili solo dal punto di vista didattico.
Quindi un metronomo dovrebbe avere: - Una manopola con un display per regolare il numero di battute al minuto; ... e se proprio non si vuol rinunciare ala grafica... - un pannello per regolare il tempo (2/4, 3/4, 4/4; gli altri tempi si rappresentano sulla stessa base di quelli sopra citati) - la sequenza di accensione mi sembra sia già stata data, comunque, dovrebbe essere: 4/4: 1 - 2 - 3 - 4 3/4: 1 - 2 - 3 2/4: 1 - 2 1/4: 1 ... chiaramente sono sequenze cicliche, in cui il cerchio rosso (o più grande... come vuoi) si accende solo sull'uno.
Ciao |
Country: Italy ~
Posts: 27 ~
Member Since: 01/11/2006 ~
Last Visit: 05/25/2007
|
Alert Moderator
|
|
|
|
Posted - 11/14/2006 : 22:31:49
|
Vediamo se ho capito chi ha scritto questa traccia, in sostanza si crea può ottenere un metronomo abbastanza universale se gli dò la possibilità di creare fino ad un massimo di 32 cerchi e per ciascuno di esso cambiare il colore tra tre (rosso=forte , arancio=mezzo forte , giallo=debole ... o ci sono altri aggettivi da prendere in considerazione ??? )
Con la logica della traccia, come si rappresenta un tempo 12/8 ?? 12 cerchi immagino e l'8 piuttosto che il 4 su cosa va ad influire ??
Per la parte java continuo ad andare a tastoni, ho creato : * una classe tempoMusicale che estende da Jpanel e crea i cerchi
* tre sue classi derivate, TempoMusicaleDebole, TempoMusicaleForte, TempoMusicaleMezzoForte che semplicemente ne cambiano il colore a seconda del tempo
* Una classe Metro che estende Jpanel
* tre sue classi derivate Metro2Tempi, Metro3Tempi, Metro4Tempi che disegnano rispettivamente due, tre e 4 cerchi opportuni
* una classe PannelloControlloMetronomo nella quale c'è il combo per la scelta del metro e una label per mostrare il numero di battute
detto ciò, il Timer a quale di queste classi lo associo ?? e il listener sul combobox dove va implementato, a livello di main o nella classe PannelloControlloMetronomo ???
|
CapoStecca 2008 & 2010 & Mutanda 2014 |
Country: Italy ~
Posts: 8976 ~
Member Since: 10/21/2005 ~
Last Visit: 07/26/2024
|
Alert Moderator
|
|
|
|
Posted - 11/15/2006 : 07:05:20
|
... o ci sono altri aggettivi da prendere in considerazione ??? )
|
Se vuoi fare una cosa un po' più utile, potresti utilizzare olte ai colori diversi, anche suoni diversi per le tre tipologie di battito.
Con la logica della traccia, come si rappresenta un tempo 12/8 ?? 12 cerchi immagino e l'8 piuttosto che il 4 su cosa va ad influire ??
|
Il 4 o 8 danno il riferimento alla "durata assoluta" della battuta: se è ion quarti, allora la nota di rierimento è il quarto, altrimenti è l'ottavo e così via. Questo non riguarda il metronomo, che da un riferimento relativo, ma la durata delle note che faranno parte della battuta. E allora in un 4/4 ci saranno al più 4 note da un quarto o 8 da un ottavo ecc... Il metronomo dovrà solo scandire il ritmo per i quarti o gi ottavi, l'interpretaione della durata della nota a cui associare il tic del metronomo sta all'esecutore in base al denominatore riportato sullo spartito.
|
Face your fears. Live your dreams.
Sarebbe ora di fare un bel po' di sano windsurf! |
Panettone Oro 2010 |
Country: Spain ~
Posts: 3421 ~
Member Since: 11/12/2005 ~
Last Visit: 09/21/2018
|
Alert Moderator
|
|
|
ray
Starting Member
Status:
offline
| |
Posted - 11/15/2006 : 08:50:48
|
Are you trying to use circles instead of the little hand to show where they are at in the tempo? If that is the case, why not just go with a standard number of circles (say 16) and use the timer to update those based on the selected tempo, rather than trying to draw some potentially very large number of circles.
For doing the animation on your center panel, I personally think it would be best to have a single JPanel there and override the paintComponent() method to do the custom drawing. You could probably do a simple loop that would draw either an empty or a colored circle depending on some value at each iteration.
Going with that structure, you would have a main JFrame with BorderLayout that will house your other components, a JPanel in the South region with something like GridLayout or Box Layout, that will contain your metronome inputs. You'll need a data class to update with the data from the metronome components. Finally I would imagine that you would construct a new custom JPanel for the center each time there is new Metronome data. The custom JPanel would contain the paintComponent() function and a Timer based on the selected tempo.
|
Country: USA ~
Posts: 2 ~
Member Since: 11/19/2005 ~
Last Visit: 02/13/2008
|
Alert Moderator
|
|
|
ray
Starting Member
Status:
offline
| |
Posted - 11/15/2006 : 15:36:42
|
I'd pass to JPanel1 a reference to your main frame so that in Jpanel1 you can either set the JComboBox's listener to be the main frame or you can have the actionListener invoke a method in the main frame.
You could instead define your own Listener interface and have JPanel 1 implement it, then the main frame can register itself with e.g. JPanel1.addListener() as a listener for the events.
In JPanel2 I'd create a setXXX method for setting the JLabel value rather than invoking JPanel2.label.setText() directly from the main frame. |
Country: USA ~
Posts: 2 ~
Member Since: 11/19/2005 ~
Last Visit: 02/13/2008
|
Alert Moderator
|
|
|
|
Posted - 11/15/2006 : 19:16:41
|
Ma che hanno scritto questi qua sopra, ma che son canzoni ??? Non vorrei che fossero la versione inglese della mia "Madre Tortura" , ragazzi ci sono i diritti , vabbhe che come la suono io non la suona nessuno, si sà.
Comunque ho visto che c'è questo giovane ragazzo, Etantonio, che si appassiona di musica, bene, voglio anche io dare il mio contributo, sia musicale dicendo che io in "Porcaccia Incallita" ad esempio utilizzo un tempo anomalo, un 54/3456,22 che credo di essere il primo ad aver utilizzato, è stata un grande successo, quanto alla problematica software :
Premetto che come te sto armeggiando con Java e non sono un esperto. Comunque il timer lo puoi estendere (extends) e farlo diventare una classe richiamabile da qualsiasi classe del tuo programma. I listener di solito vengono implementati dove viene definita l'interfaccia, almeno nelle applicazioni non complesse. Quindi se hai una classe che estende JPanel, in questo caso TempoMusicale. Quando crei la combobox ci associ un listener, poi crei una inner class che estende gli eventi e ci metti il metodo per gestire l'evento. Un'altra possibilità è quella di fare una classe separata che estende la combobox ed implementa gli eventi e la usi da TempoMusicale usanto la "composition", cioè instanzi l'oggetto nella classe che utilizza la combo.
Richard Benson (fanc...tutti)
|
Edited by - RichardBenson on 11/15/2006 19:21:06 |
Country: Italy ~
Posts: 27 ~
Member Since: 12/10/2005 ~
Last Visit: 04/08/2013
|
Alert Moderator
|
|
|
|
Posted - 10/31/2007 : 19:25:33
|
Siccome poi me l'han richiesto ecco i sorgenti di come a suo tempo ho provato a risolvere questo quesito del metronomo
Allegato: MetronomoJava.zip ( 4216bytes ) |
CapoStecca 2008 & 2010 & Mutanda 2014 |
Country: Italy ~
Posts: 8976 ~
Member Since: 10/21/2005 ~
Last Visit: 07/26/2024
|
Alert Moderator
|
|
|
|
|