Blame platform-demos/el/guitar-tuner.vala.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" id="guitar-tuner.vala" xml:lang="el">
Packit 1470ea
Packit 1470ea
  <info>
Packit 1470ea
    <link type="guide" xref="vala#examples"/>
Packit 1470ea
Packit 1470ea
    <desc>Χρησιμοποιήστε <link href="http://developer.gnome.org/platform-overview/stable/gtk">GTK+</link> και <link href="http://developer.gnome.org/platform-overview/stable/gstreamer">GStreamer</link> για να φτιάξετε ένα απλό πρόγραμμα ρυθμιστή κιθάρας για το GNOME. Αναδεικνύει πώς να χρησιμοποιήσετε το σχεδιαστή διεπαφής.</desc>
Packit 1470ea
Packit 1470ea
    <revision pkgversion="0.1" version="0.1" date="2012-02-09" status="candidate"/>
Packit 1470ea
    <credit type="author">
Packit 1470ea
      <name>Έργο τεκμηρίωσης GNOME</name>
Packit 1470ea
      <email its:translate="no">gnome-doc-list@gnome.org</email>
Packit 1470ea
    </credit>
Packit 1470ea
    <credit type="author">
Packit 1470ea
      <name>Johannes Schmid</name>
Packit 1470ea
      <email its:translate="no">jhs@gnome.org</email>
Packit 1470ea
    </credit>
Packit 1470ea
    <credit type="editor">
Packit 1470ea
      <name>Tiffany Antopolski</name>
Packit 1470ea
      <email its:translate="no">tiffany.antopolski@gmail.com</email>
Packit 1470ea
    </credit>
Packit 1470ea
  <credit type="editor">
Packit 1470ea
    <name>Marta Maria Casetti</name>
Packit 1470ea
    <email its:translate="no">mmcasetti@gmail.com</email>
Packit 1470ea
    <years>2013</years>
Packit 1470ea
  </credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Ελληνική μεταφραστική ομάδα GNOME</mal:name>
Packit 1470ea
      <mal:email>team@gnome.gr</mal:email>
Packit 1470ea
      <mal:years>2012-2015</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Δημήτρης Σπίγγος</mal:name>
Packit 1470ea
      <mal:email>dmtrs32@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2012, 2013</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Μαρία Θουκιδίδου</mal:name>
Packit 1470ea
      <mal:email>marablack3@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2014</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Θάνος Τρυφωνίδης</mal:name>
Packit 1470ea
      <mal:email>tomtryf@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2014, 2015</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
<title>Συντονιστής κιθάρας</title>
Packit 1470ea
Packit 1470ea
<synopsis>
Packit 1470ea
  

Σε αυτό το μάθημα, θα δημιουργήσουμε μια εφαρμογή που παίζει τόνους και μπορεί να συντονίσει μια κιθάρα. Θα μάθετε πώς να:

Packit 1470ea
  <list type="numbered">
Packit 1470ea
    <item>

Εγκαταστήσετε ένα βασικό έργο χρησιμοποιώντας το <link xref="getting-ready">Anjuta IDE</link>.

</item>
Packit 1470ea
    <item>

Δημιουργήσετε ένα απλό GUI με τον σχεδιαστή UI του <app>Anjuta</app>.

</item>
Packit 1470ea
    <item>

Χρησιμοποιήσετε τη βιβλιοθήκη <link href="http://developer.gnome.org/platform-overview/stable/gstreamer">GStreamer</link> για να παίξει ήχους.

</item>
Packit 1470ea
  </list>
Packit 1470ea
  

Θα χρειαστείτε τα παρακάτω για να μπορέσετε να ακολουθήσετε αυτό το μάθημα:

Packit 1470ea
  <list>
Packit 1470ea
    <item>

Βασική γνώση της γλώσσας προγραμματισμού <link href="https://live.gnome.org/Vala/Tutorial">Vala</link>.

</item>
Packit 1470ea
    <item>

Ένα εγκατεστημένο αντίγραφο του <app>Anjuta</app>.

</item>
Packit 1470ea
  </list>
Packit 1470ea
</synopsis>
Packit 1470ea
Packit 1470ea
<media type="image" mime="image/png" src="media/guitar-tuner.png"/>
Packit 1470ea
Packit 1470ea
<section id="anjuta">
Packit 1470ea
  <title>Δημιουργήστε ένα έργο με το <app>Anjuta</app></title>
Packit 1470ea
  

Πριν ξεκινήσετε να προγραμματίζετε, πρέπει να δημιουργήσετε ένα καινούργιο έργο στο Anjuta. Έτσι θα δημιουργηθούν όλα τα απαραίτητα αρχεία που χρειάζονται για την εκτέλεση του κώδικα αργότερα. Επίσης θα ήταν χρήσιμο να τα κρατάτε όλα μαζί.

Packit 1470ea
  <steps>
Packit 1470ea
    <item>
Packit 1470ea
    

Ξεκινήστε το <app>Anjuta</app> και πατήστε <gui>δημιουργία νέου έργου</gui> ή <guiseq><gui>αρχείο</gui><gui>νέο</gui><gui>έργο</gui></guiseq> για να ανοίξετε τον οδηγό του έργου.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Πατήστε στην καρτέλα <gui>Vala</gui> και επιλέξτε <gui>GTK+ (απλό)</gui>. Πατήστε <gui>συνέχεια</gui> και συμπληρώστε τις λεπτομέρειές σας στις επόμενες λίγες σελίδες. Χρησιμοποιήστε ως όνομα του έργου και του καταλόγου το <file>guitar-tuner</file>.

Packit 1470ea
   	</item>
Packit 1470ea
    <item>
Packit 1470ea
    

Βεβαιωθείτε ότι η <gui>ρύθμιση εξωτερικών πακέτων</gui> είναι <gui>ενεργή</gui>. Στην επόμενη σελίδα, επιλέξτε <link href="http://valadoc.org/gstreamer-0.10/index.htm">gstreamer-0.10</link> από τη λίστα για συμπερίληψη της βιβλιοθήκης GStreamer στο έργο σας. Κάντε κλικ στη <gui>συνέχεια</gui>

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Κλικ στην <gui>εφαρμογή</gui> και το έργο θα δημιουργηθεί για σας. Από τις καρτέλες <gui>έργο</gui> ή <gui>αρχεία</gui>, ανοίξτε το <file>src/guitar_tuner.vala</file> με διπλό κλικ πάνω του. Θα πρέπει να δείτε κάποιο κώδικα που ξεκινάει με τις γραμμές:

Packit 1470ea
    
Packit 1470ea
using GLib;
Packit 1470ea
using Gtk;
Packit 1470ea
    </item>
Packit 1470ea
  </steps>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="build">
Packit 1470ea
  <title>Κατασκευάστε τον κώδικα για πρώτη φορά</title>
Packit 1470ea
  

Ο κώδικας φορτώνει ένα (κενό) παράθυρο από το αρχείο περιγραφής διεπαφής χρήστη και το εμφανίζει. Περισσότερες λεπτομέρειες δίνονται παρακάτω· μπορεί να επιλέξετε να προσπεράστε αυτή τη λίστα αν καταλαβαίνετε τα βασικά:

Packit 1470ea
Packit 1470ea
  <list>
Packit 1470ea
  <item>
Packit 1470ea
    

Οι δύο γραμμές using εισάγουν χώρους ονομάτων έτσι ώστε να μην τους ονομάσουμε ρητά.

Packit 1470ea
   </item>
Packit 1470ea
   <item>
Packit 1470ea
    

Ο κατασκευαστής της κλάσης Main δημιουργεί ένα νέο παράθυρο ανοίγοντας ένα αρχείο GtkBuilder (<file>src/guitar-tuner.ui</file>, που ορίζεται λίγες γραμμές παραπάνω), συνδέοντας τα σήματά του και έπειτα εμφανίζοντας τα σε παράθυρο. Αυτό το αρχείο GtkBuilder περιέχει μια περιγραφή μιας διεπαφής χρήστη και όλων των στοιχείων του. Μπορείτε να χρησιμοποιήσετε τον επεξεργαστή του Anjuta για σχεδίαση διεπαφών χρήστη GtkBuilder.

Packit 1470ea
    <note>
Packit 1470ea
    

Η σύνδεση σημάτων είναι πώς ορίζετε τι συμβαίνει όταν πατάτε ένα κουμπί, ή όταν συμβεί κάποιο άλλο συμβάν. Εδώ, καλείται η συνάρτηση on_destroy (και τερματίζει την εφαρμογή) όταν κλείνετε το παράθυρο.

Packit 1470ea
    </note>
Packit 1470ea
   </item>
Packit 1470ea
   <item>
Packit 1470ea
    

Η στατική συνάρτηση main τρέχει από προεπιλογή όταν ξεκινάτε μια εφαρμογή Vala. Καλεί λίγες συναρτήσεις που δημιουργούν την κύρια κλάση, ρυθμίζουν και έπειτα εκτελούν την εφαρμογή. Η συνάρτηση Gtk.main ξεκινά τον κύριο βρόχο του GTK, που εκτελεί τη διεπαφή χρήστη και ξεκινά την απάντηση για συμβάντα (όπως κλικ και πατήματα πλήκτρου).

Packit 1470ea
   </item>
Packit 1470ea
  </list>
Packit 1470ea
Packit 1470ea
  

Αυτός ο κώδικας είναι έτοιμος να χρησιμοποιηθεί. έτσι μπορείτε να τον μεταγλωττίσετε με κλικ <guiseq><gui>κατασκευή</gui><gui>κατασκευή έργου</gui></guiseq> (ή πατώντας <keyseq><key>Shift</key><key>F7</key></keyseq>). Όταν το κάνετε αυτό, θα εμφανιστεί ένας διάλογος. Αλλάξτε τη <gui>ρύθμιση</gui> σε <gui>προεπιλογή</gui> και έπειτα κλικ <gui>εκτέλεση</gui> για ρύθμιση του καταλόγου κατασκευής. Χρειάζεστε να το κάνετε αυτό μόνο μια φορά, για την πρώτη κατασκευή.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="ui">
Packit 1470ea
  <title>Δημιουργία της διεπαφής χρήστη</title>
Packit 1470ea
  

Μια περιγραφή της διεπαφής χρήστη (UI) περιέχεται στο αρχείο του GtkBuilder <file>src/guitar_tuner.ui</file> που ορίστηκε στην κορυφή της κλάσης. Για να επεξεργαστείτε τη διεπαφή χρήστη, ανοίξτε το <file>src/guitar_tuner.ui</file> με διπλό κλικ πάνω του στην ενότητα <gui>έργο</gui> ή <gui>αρχεία</gui>. Θα βρεθείτε στο σχεδιαστή διεπαφής. Το παράθυρο σχεδίασης είναι στο κέντρο· τα <gui>γραφικά στοιχεία</gui> και οι ιδιότητες γραφικού στοιχείου είναι στα δεξιά και η <gui>παλέτα</gui> με τα διαθέσιμα γραφικά στοιχεία είναι στα αριστερά.

Packit 1470ea
  

Η διάταξη κάθε διεπαφής χρήστη στο Gtk+ οργανώνεται σε πλαίσια και πίνακες. Ας χρησιμοποιήσουμε εδώ ένα κάθετο GtkButtonBox για να αποδώσουμε έξι GtkButtons, ένα για κάθε μία από τις έξι χορδές της κιθάρας.

Packit 1470ea
Packit 1470ea
<media type="image" mime="image/png" src="media/guitar-tuner-glade.png"/>
Packit 1470ea
Packit 1470ea
  <steps>
Packit 1470ea
   <item>
Packit 1470ea
   

Στην καρτέλα <gui>παλέτα</gui>, από την ενότητα <gui>περιέκτες</gui>, επιλέξτε ένα <gui>πλαίσιο κουμπιού</gui> (GtkButtonBox) με κλικ στο εικονίδιο. Έπειτα κλικ στο παράθυρο σχεδίασης στο κέντρο για τοποθέτηση του στο παράθυρο. Ένας διάλογος θα εμφανίσει που μπορείτε να ορίσετε τον <gui>αριθμό των στοιχείων</gui> σε <input>6</input>. Έπειτα κλικ στο <gui>δημιουργία</gui>.

Packit 1470ea
 <note>

Μπορείτε επίσης να αλλάξετε τον <gui>αριθμό των στοιχείων</gui> και τον <gui>προσανατολισμό</gui> στην καρτέλα <gui>γενικά</gui> στα δεξιά.

</note>
Packit 1470ea
   </item>
Packit 1470ea
   <item>
Packit 1470ea
    

Τώρα, από την ενότητα <gui>έλεγχος και εμφάνιση</gui> της <gui>παλέτας</gui> επιλέξτε ένα <gui>κουμπί</gui> (GtkButton) με κλικ πάνω του. Τοποθετήστε το στην πρώτη ενότητα του GtkButtonBox με κλικ στην πρώτη ενότητα.

Packit 1470ea
   </item>
Packit 1470ea
   <item>
Packit 1470ea
    

Έχοντας το κουμπί ακόμα επιλεγμένο, κυλήστε κάτω στην καρτέλα <gui>γενικά</gui> στα δεξιά της ιδιότητας <gui>ετικέτα</gui> και αλλάξτε την σε <gui>E</gui>. Αυτή θα είναι η χαμηλή χορδή της κιθάρας Ε.

Packit 1470ea
  <note>

Η καρτέλα <gui>γενικά</gui> εντοπίζεται στην ενότητα <gui>γραφικά στοιχεία</gui> στα δεξιά.

</note>
Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
     

Πηγαίνετε στην καρτέλα <gui>σήματα</gui> στην ενότητα <gui>γραφικά στοιχεία</gui> στα δεξιά και βρείτε το σήμα clicked του κουμπιού. Μπορείτε να το χρησιμοποιήσετε για να συνδέσετε έναν χειριστή σημάτων που θα καλείται όταν πατηθεί το κουμπί από τον χρήστη. Για να το κάνετε αυτό, κλικ στο σήμα και πληκτρολογήστε main_on_button_clicked στη στήλη <gui>χειριστής</gui> και πατήστε <key>Enter</key>.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Επαναλάβετε τα παραπάνω βήματα για τα υπόλοιπα κουμπιά, προσθέστε τις επόμενες 5 χορδές με τα ονόματα A, D, G, B, και e.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Αποθηκεύστε τη σχεδίαση UI (πατώντας <guiseq><gui>αρχείο</gui><gui>αποθήκευση</gui></guiseq>) και κρατήστε το ανοιχτό.

Packit 1470ea
    </item>
Packit 1470ea
  </steps>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="gstreamer">
Packit 1470ea
  <title>Διοχετεύσεις GStreamer</title>
Packit 1470ea
  

Αυτή η ενότητα θα δείξει πώς να παράξει ο κώδικας ήχους. <link href="http://developer.gnome.org/platform-overview/stable/gstreamer">GStreamer</link> είναι ο σκελετός πολυμέσων του GNOME - μπορείτε να τον χρησιμοποιήσετε για παίξιμο, εγγραφή και επεξεργασία βίντεο, ήχου, ροών ιστοκάμερας και τα παρόμοια. Εδώ, θα το χρησιμοποιήσουμε για να παράξουμε τόνους μιας συχνότητας.

Packit 1470ea
  

Εννοιολογικά, το GStreamer λειτουργεί ως εξής: δημιουργείτε μια<link href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-intro-basics-bins.html"> διοχέτευση</link> που περιέχει διάφορα στοιχεία επεξεργασίας που πηγαίνουν από την πηγή στο ταμιευτήρα (έξοδο). Η πηγή μπορεί να είναι ένα αρχείο εικόνας, βίντεο, ή μουσικής, για παράδειγμα, και η έξοδος μπορεί να είναι γραφικό στοιχείο ή κάρτα ήχου.

Packit 1470ea
  

Ανάμεσα στην πηγή και στην έξοδο, μπορείτε να εφαρμόσετε διάφορα φίλτρα και οι μετατροπείς να χειριστούν εφέ, μετατροπές μορφών και λοιπά. Κάθε στοιχείο της διοχέτευσης έχει ιδιότητες που μπορούν να χρησιμοποιηθούν για να αλλάξουν τη συμπεριφορά τους.

Packit 1470ea
  <media type="image" mime="image/png" src="media/guitar-tuner-pipeline.png">
Packit 1470ea
    

Ένα παράδειγμα διοχέτευσης GStreamer.

Packit 1470ea
  </media>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="pipeline">
Packit 1470ea
  <title>Ρύθμιση της διοχέτευσης</title>
Packit 1470ea
  

Σε αυτό το παράδειγμα θα χρησιμοποιήσουμε μια πηγή παραγωγής τόνων που λέγεται audiotestsrc και θα στείλουμε την έξοδο στην προεπιλεγμένη συσκευή ήχου του συστήματος, autoaudiosink. Πρέπει μόνο να ρυθμίσουμε την συχνότητα της παραγωγής τόνου· αυτό είναι διαθέσιμο μέσα από την ιδιότητα freq του audiotestsrc.

Packit 1470ea
Packit 1470ea
  

Χρειάζεται να προσθέσουμε μια γραμμή για αρχικοποίηση του GStreamer· βάλτε τον παρακάτω κώδικα στην γραμμή πάνω από την κλήση Gtk.init στη συνάρτηση main:

Packit 1470ea
  Gst.init (ref args);
Packit 1470ea
  

Μετά, αντιγράψτε την ακόλουθη συνάρτηση στο <file>guitar_tuner.vala</file> μέσα στην κλάση μας Main:

Packit 1470ea
  
Packit 1470ea
Gst.Element sink;
Packit 1470ea
Gst.Element source;
Packit 1470ea
Gst.Pipeline pipeline;
Packit 1470ea
Packit 1470ea
private void play_sound(double frequency)
Packit 1470ea
{
Packit 1470ea
	pipeline = new Gst.Pipeline ("note");
Packit 1470ea
	source   = Gst.ElementFactory.make ("audiotestsrc",
Packit 1470ea
	                                    "source");
Packit 1470ea
	sink     = Gst.ElementFactory.make ("autoaudiosink",
Packit 1470ea
	                                    "output");
Packit 1470ea
Packit 1470ea
	/* set frequency */
Packit 1470ea
	source.set ("freq", frequency);
Packit 1470ea
Packit 1470ea
	pipeline.add (source);
Packit 1470ea
	pipeline.add (sink);
Packit 1470ea
	source.link (sink);
Packit 1470ea
Packit 1470ea
	pipeline.set_state (Gst.State.PLAYING);
Packit 1470ea
Packit 1470ea
	/* stop it after 200ms */
Packit 1470ea
	var time = new TimeoutSource(200);
Packit 1470ea
Packit 1470ea
	time.set_callback(() => {
Packit 1470ea
		pipeline.set_state (Gst.State.NULL);
Packit 1470ea
		return false;
Packit 1470ea
	});
Packit 1470ea
	time.attach(null);
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
  <steps>
Packit 1470ea
    <item>
Packit 1470ea
    

Οι τρεις πρώτες γραμμές δημιουργούν τα στοιχεία πηγή και έξοδο του GStreamer (<link href="http://valadoc.org/gstreamer-0.10/Gst.Element.html">Gst.Element</link>), και ένα <link href="http://valadoc.org/gstreamer-0.10/Gst.Pipeline.html">στοιχείο διοχέτευσης</link> (το οποίο θα χρησιμοποιηθεί σαν περιέκτης για τα δυο άλλα στοιχεία). Αυτά είναι μεταβλητές κλάσεων, έτσι ορίζονται έξω από τη μέθοδο. Δίνουμε το όνομα "note" στη διοχέτευση· ονομάζουμε την πηγή "source" και ρυθμίζεται στην πηγή audiotestsrc· και ονομάζουμε την έξοδο "output" και ρυθμίζεται στην έξοδο autoaudiosink (προεπιλεγμένη έξοδος κάρτας ήχου).

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Η κλήση στο <link href="http://valadoc.org/gobject-2.0/GLib.Object.set.html">source.set</link> ορίζει την ιδιότητα freq του στοιχείου πηγής σε frequency, η οποία έχει περαστεί ως όρισμα στη συνάρτηση play_sound. Αυτή είναι η συχνότητα της νότας σε Hertz· πολλές χρήσιμες συχνότητες θα οριστούν αργότερα.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Το <link href="http://valadoc.org/gstreamer-0.10/Gst.Bin.add.html">pipeline.add</link> βάζει την πηγή και την έξοδο στη διοχέτευση. Η διοχέτευση είναι ένα <link href="http://valadoc.org/gstreamer-0.10/Gst.Bin.html">Gst.Bin</link>,που είναι απλά ένα στοιχείο που μπορεί να περιέχει πολλαπλά άλλα στοιχεία GStreamer. Γενικά, μπορείτε να προσθέσετε όσα στοιχεία θέλετε στη διοχέτευση προσθέτοντας περισσότερες κλήσεις στο pipeline.add.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Κατόπιν, το <link href="http://valadoc.org/gstreamer-0.10/Gst.Element.link.html">sink.link</link> χρησιμοποιείται για σύνδεση των στοιχείων μαζί, έτσι ώστε η έξοδος της πηγής (ένας τόνος) να πηγαίνει στην είσοδο της εξόδου (η οποία μετά είναι έξοδος στην κάρτα ήχου). Το <link href="http://www.valadoc.org/gstreamer-0.10/Gst.Element.set_state.html">pipeline.set_state</link> χρησιμοποιείται έπειτα για την εκκίνηση της αναπαραγωγής, ρυθμίζοντας την <link href="http://www.valadoc.org/gstreamer-0.10/Gst.State.html">κατάσταση της σωλήνωσης</link> να παίξει (Gst.State.PLAYING).

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Δεν θέλουμε να παίζουμε έναν ενοχλητικό ήχο για πάντα, οπότε το τελευταίο πράγμα που κάνει ο play_sound είναι να προσθέσει έναν <link href="http://www.valadoc.org/glib-2.0/GLib.TimeoutSource.html">TimeoutSource</link>. Αυτό ορίζει ένα χρονικό όριο που θα σταματήσει τον ήχο· περιμένει για 200 ms πριν καλέσει τον χειριστή σήματος που ορίστηκε στη γραμμή που σταματά και καταστρέφει τη διοχέτευση. Επιστρέφει false για να αφαιρέσει την ίδια από το χρονικό όριο, αλλιώς θα συνέχιζε να καλείται κάθε 200 ms.

Packit 1470ea
    </item>
Packit 1470ea
  </steps>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
<section id="signal">
Packit 1470ea
  <title>Δημιουργία χειριστή σημάτων</title>
Packit 1470ea
  

Στον σχεδιαστή διεπαφών χρήστη, κάνατε όλα τα κουμπιά να καλούν την ίδια συνάρτηση, <gui>on_button_clicked</gui>, όταν πατηθούν. Στην πραγματικότητα, πληκτρολογούμε <gui>main_on_button_clicked</gui> που λέει στον σχεδιαστή UI ότι αυτή η μέθοδος είναι τμήμα του Main μας. Πρέπει να προσθέσουμε αυτή την συνάρτηση στο πηγαίο αρχείο.

Packit 1470ea
  

Για να το κάνετε αυτό, στο αρχείο διεπαφής χρήστη (guitar_tuner.ui), επιλέξτε ένα από τα κουμπιά με κλικ πάνω του, έπειτα ανοίξτε <file>guitar_tuner.vala</file> (με κλικ στην καρτέλα στο κέντρο). Εναλλαγή στην καρτέλα <gui>σήματα</gui> στα δεξιά, που χρησιμοποιήσατε για τον ορισμό του ονόματος αρχείου. Τώρα, πάρτε τη γραμμή όπου ορίσατε το σήμα <gui>πατημένο</gui> και σύρσιμο και απόθεσή του στο πηγαίο αρχείο στην αρχή της κλάσης. Ο παρακάτω κώδικας θα προστεθεί στο πηγαίο σας αρχείο:

Packit 1470ea
Packit 1470ea
public void on_button_clicked (Gtk.Button sender) {
Packit 1470ea
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
 <note>

Μπορείτε επίσης να πληκτρολογήσετε απλά των κώδικα στην αρχή της κλάσης αντί της χρήσης συρσίματος και απόθεσης.

</note>
Packit 1470ea
  

Αυτός ο χειριστής σήματος έχει μόνο ένα όρισμα: το <link href="http://valadoc.org/gtk+-3.0/Gtk.Widget.html">Gtk.Widget</link> που κάλεσε η συνάρτηση (στην περίπτωσή μας, πάντοτε ένα <link href="http://valadoc.org/gtk+-3.0/Gtk.Button.html">Gtk.Button</link>).

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
<section id="handler">
Packit 1470ea
  <title>Ορισμός του χειριστή σημάτων</title>
Packit 1470ea
  

Θέλουμε να παίξουμε τον σωστό ήχο όταν ο χρήστης πατά ένα κουμπί. Για αυτό, ζωντανεύουμε τον χειριστή σήματος που ορίσαμε παραπάνω, on_button_clicked. Θα μπορούσαμε να έχουμε συνδέσει κάθε κουμπί σε διαφορετικό χειριστή σήματος, αλλά αυτό θα μπορούσε να οδηγήσει σε εκτεταμένο διπλασιασμό του κώδικα. Αντίθετα, μπορούμε να χρησιμοποιήσουμε την ετικέτα του κουμπιού για να καταλάβουμε ποιο κουμπί πατήθηκε:

Packit 1470ea
  
Packit 1470ea
public void on_button_clicked (Gtk.Button sender) {
Packit 1470ea
	var label = sender.get_child () as Gtk.Label;
Packit 1470ea
	switch (label.get_label()) {
Packit 1470ea
		case "E":
Packit 1470ea
			play_sound (329.63);
Packit 1470ea
			break;
Packit 1470ea
		case "A":
Packit 1470ea
			play_sound (440);
Packit 1470ea
			break;
Packit 1470ea
		case "D":
Packit 1470ea
			play_sound (587.33);
Packit 1470ea
			break;
Packit 1470ea
		case "G":
Packit 1470ea
			play_sound (783.99);
Packit 1470ea
			break;
Packit 1470ea
		case "B":
Packit 1470ea
			play_sound (987.77);
Packit 1470ea
			break;
Packit 1470ea
		case "e":
Packit 1470ea
			play_sound (1318);
Packit 1470ea
			break;
Packit 1470ea
		default:
Packit 1470ea
			break;
Packit 1470ea
	}
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
  

Το Gtk.Button που πατήθηκε περνά ως όρισμα (sender) στο on_button_clicked. Μπορούμε να πάρουμε την ετικέτα αυτού του κουμπιού χρησιμοποιώντας τον get_child και έπειτα να πάρουμε το κείμενο από αυτήν την ετικέτα χρησιμοποιώντας get_label.

Packit 1470ea
  

Η πρόταση διακόπτη συγκρίνει το κείμενο ετικέτας με τις νότες που μπορούμε να παίξουμε και καλείται ο play_sound με την κατάλληλη συχνότητα για αυτήν την νότα. Αυτό παίζει τον τόνο· ο ρυθμιστής κιθάρας είναι έτοιμος!

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="run">
Packit 1470ea
  <title>Κατασκευή και εκτέλεση της εφαρμογής</title>
Packit 1470ea
  

Όλος ο κώδικας πρέπει να είναι έτοιμος τώρα. Κλικ <guiseq><gui>κατασκευή</gui><gui>κατασκευή έργου</gui></guiseq> για ανακατασκευή των πάντων και έπειτα <guiseq><gui>τρέξιμο</gui><gui>εκτέλεση</gui></guiseq> για έναρξη της εφαρμογής.

Packit 1470ea
  

Εάν δεν το έχετε ήδη κάνει, επιλέξτε την εφαρμογή <file>Debug/src/guitar-tuner</file> στον διάλογο που εμφανίζεται. Τελικά, πατήστε <gui>τρέξιμο</gui> και απολαύστε!

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="impl">
Packit 1470ea
 <title>Υλοποίηση αναφοράς</title>
Packit 1470ea
 

Αν αντιμετωπίσετε προβλήματα με το μάθημα, συγκρίνετε τον κώδικά σας με αυτόν τον <link href="guitar-tuner/guitar-tuner.vala">κώδικα αναφοράς</link>.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="further">
Packit 1470ea
<title>Περαιτέρω ανάγνωση</title>
Packit 1470ea

Για να βρείτε περισσότερα για τη γλώσσα προγραμματισμού Vala ίσως θελήσετε να κοιτάξετε το <link href="http://live.gnome.org/Vala/Tutorial">μάθημα Vala</link> και το <link href="http://valadoc.org/">τεκμηρίωση API Vala</link>

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="next">
Packit 1470ea
  <title>Επόμενα βήματα</title>
Packit 1470ea
  

Εδώ είναι κάποιες ιδέες για το πώς μπορείτε να επεκτείνετε αυτή την απλή παρουσίαση:

Packit 1470ea
  <list>
Packit 1470ea
   <item>
Packit 1470ea
   

Βάλτε το πρόγραμμα να περνάει αυτόματα μέσα από τις νότες.

Packit 1470ea
   </item>
Packit 1470ea
   <item>
Packit 1470ea
   

Κάντε το πρόγραμμα να αναπαράγει ηχογραφήσεις από αληθινές χορδές κιθάρας που έχουν εισαχθεί.

Packit 1470ea
   

Για να το κάνετε αυτό, πρέπει να ρυθμίσετε μια πιο περίπλοκη διοχέτευση GStreamer που θα σας επιτρέπει να φορτώνετε και να αναπαράγετε αρχεία ήχου. Θα πρέπει να διαλέξετε τα στοιχεία GStreamer <link href="http://gstreamer.freedesktop.org/documentation/plugins.html">decoder και demuxer</link> με βάση τον τύπο του αρχείου των ηχογραφημένων ήχων — για παράδειγμα το MP3 χρησιμοποιεί διαφορετικά στοιχεία από το Ogg Vorbis.

Packit 1470ea
   

Ίσως χρειαστεί να συνδέσετε τα στοιχεία με πιο περίπλοκους τρόπους. Αυτό μπορεί να συμπεριλαμβάνει τη χρήση <link href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-intro-basics.html">Εννοιών GStreamer</link> που δεν καλύπτουμε σε αυτόν τον οδηγό, όπως και <link href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-intro-basics-pads.html">pad</link>. Ίσως βρείτε χρήσιμη και την εντολή <cmd>gst-inspect</cmd>.

Packit 1470ea
   </item>
Packit 1470ea
   <item>
Packit 1470ea
   

Αυτόματη ανάλυση νότων που παίζει ο χρήστης.

Packit 1470ea
   

Μπορείτε να συνδέσετε μικρόφωνο και να ηχογραφήσετε από αυτό χρησιμοποιώντας την <link href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-autoaudiosrc.html">πηγή εισόδου</link>. Ίσως κάποια μορφή της <link href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-plugin-spectrum.html">ανάλυσης φάσματος</link> θα σας βοηθούσε να καταλάβετε ποια νότα παίζει;

Packit 1470ea
   </item>
Packit 1470ea
  </list>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
</page>