Τρίτη, 29 Δεκεμβρίου 2015

Πιανάκι έκδοση 3 (και αναθεώρηση 131)

Η εντολή Παίξε 0 είχε ένα πρόβλημα και για το λόγο αυτό στη προηγούμενη αναθεώρηση για να τρέξουν τα νήματα έπρεπε να εκτελέσουμε μια Παίξε 1,1 (χωρίς να δώσουμε κάποιες νότες).
(είχα ξεχάσει μια "σημαία" να την γυρίσω false)

Οπότε με την αλλαγή αυτή έκανα και μια προσθήκη. Η Παίξε 12, 0 τερματίζει τη φωνή 12
Το νέο Πιανάκι (δοκιμάστε με επιλογή 5 που παίζει το σαξόφωνο) όταν σηκώνουμε το χέρι από το πλήκτρο τερματίζει τη δράση της νότας. Εξαρτάται από το τέμπο που έχουμε δώσει (το χρόνο που παίζει η νότα), αν είναι σύντομος θα τερματίσει πριν σηκώσουμε το χέρι από το πλήκτρο. Ορισμένα όργανα δεν έχουν μεγάλη διάρκεια νότας όπως και να έχει το πράγμα!
Το τμήμα πλήκτρο πήρε και ένα νούμερο για τον πίνακα φων() όπου καταχωρούμε την φωνή που παίζει η νότα. Έτσι όταν χρειάζεται την σταματάμε και την αποδίδουμε στο πρόγραμμα ενημερώνοντας τον πίνακα χρη() χρήσεως δηλαδή!


Ο ρυθμός της drum machine είναι λίγο χάλια...αλλά μπορεί κανείς να τον αλλάξει. Έχω κάνει μια αλλαγή για να ξεκινάει γρήγορα και μετά αλλάζω το διάστημα που παίζει!
(μπορεί κανείς να φτιάξει δυο πλήκτρα να αλλάζουν το τέμπο των drums, με μια πρόσθετη  μεταβλητή που θα κρατάει ταυτόχρονα και το τέμπο και το διάστημα του νήματος)

Δοκιμάστε με το 5 (Σαξόφωνο) και παίξτε ZXC (κρατημένα) μετά κρατάμε το διάστημα και μετά μαζί τα ΒΝΜ. Θα ακουστούν έξι νότες και οι τελευταίες με μεγαλύτερη ένταση! Μετά αφήνουμε όποια από τα πλήκτρα θέλουμε!
(έκανα μια προσθήκη ώστε σε περίπτωση που εξαντλήσουμε τα όρια..πχ παίζουμε όλα τα πλήκτρα τόσο γρήγορα που δεν προλαβαίνει να τα σταματήσει και περνάει τις 15 φωνές (η 16η είναι για τα ντραμς), τότε ξαναχρησιμοποιεί την 1).
(Βελτίωσα το πρόγραμμα σε έκδοση 3)

Φόρμα 60,30
Πένα 14
Οθονη 5
Τύπωσε "Πιανάκι 003"
Αναφορά 2,{Οδηγίες
1-Έξοδος  3-Ξυλόφωνο 4-Πιάνο 5-Σαξόφωνο   9-Ρυθμός Ναι 0-Ρυθμός Όχι


||A|.|D|F|  |H|J|K| |;|||
|||Z|X|C|V|B|N|M|,|.|/|

Διάστημα - Δυναμώνει τις νότες
-- Γιώργος Καρράς --‘́
}
Οθόνη , Γραμμή+1
Σχέδιο.Νημάτων Διαδοχικό
Παίξε 0 \\ καθαρίζει το σύστημα
Γενική πλ$=" ", τέμπο=300, οργ=5, φ=0, εντ$="V90", φων(18), χρη(17) ' 0 ..17,
Για ι=1 έως 16 { χρη(ι)=Αληθές }
χρη(10)= Ψευδές \\ για την drum machine
Τμήμα Πλήκτρο {
      Διάβασε α$, πατ, επιλ
      αν πατ τοτε {
      Αν Θέση(πλ$,α$+"-")>0 τότε έξοδος
      διαμέσου Επομ()
      φων(επιλ)=φ \\ δεν χρειάζεται <=
      Τύπωσε α$, φ
      Φωνή φ, τεμπο, α$+εντ$ : πλ$<=πλ$+α$+"-": Παίξε φ, οργ
      } αλλιως {
            πλ$<=αλλαγή$(α$+"-","", πλ$)
            Αν φων(επιλ)>0 τότε {
             Παίξε φων(επιλ), 0 ' προσθήκη στην αναθ. 131
             χρη(φων(επιλ))~
             φων(επιλ)=0
             }
      }
      Ρουτίνα Επομ()
      τοπικη ι
      για ι=1 έως 16 {
            αν χρη(ι) τότε έξοδος
      }
      αν ι<17 τότε { φ<=ι : χρη(ι)~ } αλλιώς φ<=1: χρη(1)=αληθές
      Τέλος Ρουτίνας
}
\\ κανάλι 10 είναι το drum machine
Νήμα { Φωνή 10,400,"CV90CC  ab Cd eCC" : Παίξε 10,1 } ως Λ κάθε 60
Νήμα {
      πλήκτρο "A#2", πατημένο(κωδ("A")), 1
      πλήκτρο "B2", πατημένο(κωδ("Z")), 2
      πλήκτρο "C3", πατημένο(κωδ("X")), 3
      πλήκτρο "C#3", πατημένο(κωδ("D")), 4
      πλήκτρο "D3", πατημένο(κωδ("C")), 5
      πλήκτρο "D#3", πατημένο(κωδ("F")), 6
      πλήκτρο "E3", πατημένο(κωδ("V")), 7
      πλήκτρο "F3", πατημένο(κωδ("B")), 8
      πλήκτρο "F#3", πατημένο(κωδ("H")), 9
      πλήκτρο "G3", πατημένο(κωδ("N")), 10
      πλήκτρο "G#3", πατημένο(κωδ("J")), 11
      πλήκτρο "A3", πατημένο(κωδ("M")), 12
      πλήκτρο "A#3", πατημένο(κωδ("K")), 13
      \\ https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
      πλήκτρο "B3", πατημένο(0xBC), 14 \\ VK_OEM_COMMA
      πλήκτρο "C4", πατημένο(0xBE), 15 \\ VK_OEM_PERIOD
      πλήκτρο "C#4", πατημένο(0xBA), 16 \\ VK_OEM_1
      πλήκτρο "D4", πατημένο(0xBF), 17 \\VK_OEM_2  
} ως ΑΛ κάθε 50
Τύπωσε "οκ"
Νηματα
Αναμονή 100 \\ ξεκινάει το Λ μέσα στην αναμονή και μετά αλλάζουμε το χρόνο του!
Νήμα Λ Κάθε 6000
Κύριο.Έργο 100 {
      αν πατημένο(κωδ("1")) τότε έξοδος
      αν πατημένο(κωδ("3")) τότε οργ<=14 : τέμπο<=100 ' ξυλόφωνο
      αν πατημένο(κωδ("4")) τότε οργ<=5 : τέμπο<=300 ' Πιάνο
      αν πατημένο(κωδ("5")) τότε οργ<=65 : τέμπο<=5000 ' Σαξόφωνο
      αν πατημένο(κωδ("9")) τότε Νήμα Λ Ξεκίνα
      αν πατημένο(κωδ("0")) τότε Νήμα Λ Κράτα
      αν πατημένο(32) τότε { εντ$<="V127" } Αλλιώς εντ$<="V90"
      Τύπωσε "--------"
}
Τύπωσε "Τέλος"