Blame platform-demos/el/guitar-tuner.cpp.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.cpp" xml:lang="el">
Packit 1470ea
Packit 1470ea
  <info>
Packit 1470ea
    <link type="guide" xref="cpp#examples"/>
Packit 1470ea
Packit 1470ea
    <desc>Χρησιμοποιήστε Gtk+ και GStreamer για να κατασκευάσετε μια απλή εφαρμογή συντονιστή κιθάρας για το GNOME. Αναδεικνύοντας τη χρήση του σχεδιαστή διεπαφών.</desc>
Packit 1470ea
Packit 1470ea
    <revision pkgversion="0.1" version="0.1" date="2011-03-17" status="review"/>
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>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>
Packit 1470ea
    <item>

Ρυθμίζετε το κύριο έργο στο Anjuta

</item>
Packit 1470ea
    <item>

Δημιουργείτε απλό GUI με τον σχεδιαστή UI του Anjuta

</item>
Packit 1470ea
    <item>

Χρησιμοποιείτε το GStreamer για να παίζετε ήχους

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

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

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

Ένα εγκατεστημένο αντίγραφο του <link xref="getting-ready">Anjuta IDE</link>

</item>
Packit 1470ea
    <item>

Βασική γνώση της γλώσσας προγραμματισμού C++

</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>Δημιουργία έργου με το Anjuta</title>
Packit 1470ea
  

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

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

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

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

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

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

Βεβαιωθείτε ότι το <gui>ρύθμιση εξωτερικών πακέτων</gui> επιλέχτηκε. Στην επόμενη σελίδα, επιλέξτε gstreamer-0.10 από τη λίστα για συμπερίληψη της βιβλιοθήκης GStreamermm στο έργο σας.

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

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

Packit 1470ea
    
Packit 1470ea
#include <gtkmm.h>
Packit 1470ea
#include <iostream>
Packit 1470ea
    </item>
Packit 1470ea
  </steps>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="build">
Packit 1470ea
  <title>Κατασκευάστε τον κώδικα για πρώτη φορά</title>
Packit 1470ea
  

Αυτός είναι ένας πολύ βασικός κώδικας C++ εγκατάστασης GTKmm. Περισσότερες λεπτομέρειες δίνονται παρακάτω· προσπεράστε αυτή τη λίστα αν καταλαβαίνετε τα βασικά:

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

Οι τρεις γραμμές #include στην κορυφή περιλαμβάνουν τον config (ορίζει χρήσιμη κατασκευή του autoconf), gtkmm (διεπαφή χρήστη) και iostream (STL). Συναρτήσεις από αυτές τις βιβλιοθήκες χρησιμοποιούνται στον υπόλοιπο κώδικα.

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

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

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

Κατόπιν καλεί λίγες συναρτήσεις που ρυθμίζουν και έπειτα εκτελούν την εφαρμογή. Η συνάρτηση kit.run ξεκινά τον κύριο βρόχο του 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>).

Packit 1470ea
  

Πατήστε <gui>Execute</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>. Θα βρεθείτε στο σχεδιαστή διεπαφής. Το παράθυρο σχεδίασης είναι στο κέντρο· τα γραφικά στοιχεία και οι ρυθμίσεις τους είναι στα αριστερά, η παλέτα με τα διαθέσιμα γραφικά στοιχεία στα δεξιά.

Packit 1470ea
  

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

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>GtkButtonBox</gui> από το τμήμα <gui>Container</gui> στην <gui>Παλέτα</gui> στο δεξιά και προσθέστε το στο παράθυρο. Στο φάτνωμα <gui>Ιδιότητες</gui> καθορίστε τον αριθμό των στοιχείων σε 6 (για τις έξι χορδές της κιθάρας) και τον προσανατολισμό σε κάθετο.

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

Τώρα, διαλέξτε ένα <gui>GtkButton</gui> από την παλέτα και βάλτε το στο πρώτο μέρος του κουτιού.

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

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

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

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

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="gst">
Packit 1470ea
  <title>Διοχετεύσεις GStreamer</title>
Packit 1470ea
  

Το Gtreamer είναι ο σκελετός πολυμέσων του GNOME — μπορείτε να το χρησιμοποιήσετε για να αναπαραγωγή ηχογράφηση και επεξεργασία βίντεο, ήχου, ροών ιστοκάμερας και τα παρόμοια. Εδώ, θα το χρησιμοποιήσουμε για να παράξουμε μονές συχνότητες τόνων. Το GStreamermm είναι ένας σύνδεσμος C++ στο GStreamer που θα χρησιμοποιήσουμε εδώ.

Packit 1470ea
  

Εννοιολογικά, το GStreamer λειτουργεί ως εξής: δημιουργείς μια διοχέτευση που περιέχει διάφορα επεξεργαζόμενα στοιχεία που πηγαίνουν από την πηγή στην έξοδο. Η πηγή μπορεί να είναι ένα αρχείο εικόνας, βίντεο, ή και μουσικής, για παράδειγμα, και η έξοδος μπορεί να είναι ένα γραφικό στοιχείο ή η κάρτα ήχου.

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="usinggst">
Packit 1470ea
  <title>Χρήση GStreamermm</title>
Packit 1470ea
  

Για να χρησιμοποιήσετε το GStreamermm, πρέπει να αρχικοποιηθεί. Το κάνουμε αυτό προσθέτοντας την παρακάτω γραμμή του κώδικα δίπλα στη γραμμή Gtk::Main kit(argc, argv); στο <file>main.cc</file>:

Packit 1470ea
  	Gst::init (argc, argv);
Packit 1470ea
  

Ενώ είμαστε σε αυτό, βεβαιωθείτε επίσης ότι το <file>gstreamermm.h</file> περιέχεται κατάλληλα στο <file>main.cc</file>.

Packit 1470ea
Packit 1470ea
  

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

Packit 1470ea
Packit 1470ea
  

Για απλοποίηση του χειρισμού της διοχέτευσης θα ορίσουμε μια βοηθητική κλάση Sound. Το κάνουμε στο <file>main.cc</file> για να κρατήσουμε αυτό το παράδειγμα απλό, ενώ ίσως συνήθως να θέλατε να το χρησιμοποιήσετε σε ξεχωριστό αρχείο:

Packit 1470ea
  
Packit 1470ea
class Sound
Packit 1470ea
{
Packit 1470ea
	public:
Packit 1470ea
		Sound();
Packit 1470ea
Packit 1470ea
		void start_playing(double frequency);
Packit 1470ea
		bool stop_playing();
Packit 1470ea
Packit 1470ea
	private:
Packit 1470ea
		Glib::RefPtr<Gst::Pipeline> m_pipeline;
Packit 1470ea
		Glib::RefPtr<Gst::Element> m_source;
Packit 1470ea
		Glib::RefPtr<Gst::Element> m_sink;
Packit 1470ea
};
Packit 1470ea
Packit 1470ea
Sound::Sound()
Packit 1470ea
{
Packit 1470ea
	m_pipeline = Gst::Pipeline::create("note");
Packit 1470ea
	m_source = Gst::ElementFactory::create_element("audiotestsrc",
Packit 1470ea
	                                               "source");
Packit 1470ea
	m_sink = Gst::ElementFactory::create_element("autoaudiosink",
Packit 1470ea
	                                             "output");
Packit 1470ea
	m_pipeline->add(m_source);
Packit 1470ea
	m_pipeline->add(m_sink);
Packit 1470ea
	m_source->link(m_sink);
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
void Sound::start_playing (double frequency)
Packit 1470ea
{
Packit 1470ea
	m_source->set_property("freq", frequency);
Packit 1470ea
	m_pipeline->set_state(Gst::STATE_PLAYING);
Packit 1470ea
Packit 1470ea
	/* stop it after 200ms */
Packit 1470ea
	Glib::signal_timeout().connect(sigc::mem_fun(*this, &Sound::stop_playing),
Packit 1470ea
	                               200);
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
bool Sound::stop_playing()
Packit 1470ea
{
Packit 1470ea
	m_pipeline->set_state(Gst::STATE_NULL);
Packit 1470ea
	return false;
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
Packit 1470ea
  

Ο κώδικας έχει τον παρακάτω σκοπό:

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

Στον κατασκευαστή, τα στοιχεία πηγής και εξόδου του GStreamer (Gst::Element)δημιουργούνται και ένα στοιχείο διοχέτευσης (το οποίο θα χρησιμοποιηθεί ως περιέκτης για τα δυο άλλα στοιχεία). Δίνουμε το όνομα "note" στη διοχέτευση· ονομάζουμε την πηγή "source" και ρυθμίζεται στην πηγή audiotestsrc· και ονομάζουμε την έξοδο "output" και την ρυθμίζετε στην έξοδο autoaudiosink (προεπιλεγμένη έξοδος κάρτας ήχου). Αφού τα στοιχεία προστεθούν στη διοχέτευση και συνδεθούν μαζί, η σωλήνωση είναι έτοιμη να τρέξει.

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

Ο start_playing ορίζει το στοιχείο πηγής να αναπαράγει μια συγκεκριμένη συχνότητα και έπειτα ξεκινά τη διοχέτευση ώστε ο ήχος στην πραγματικότητα να ξεκινήσει αναπαραγωγή. Καθώς δεν θέλουμε να έχουμε τον ενοχλητικό ήχο για πολύ, ορίζεται μια λήξη χρόνου για να σταματήσει τη διοχέτευση μετά από 200 ms καλώντας stop_playing.

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

Στον stop_playing που καλείται όταν η λήξη χρόνου περάσει, η διοχέτευση σταματά και έτσι δεν υπάρχει κανένας ήχος εξόδου πια. Καθώς το GStreamermm χρησιμοποιεί μετρητή αναφοράς μέσα από το αντικείμενο Glib::RefPtr, η μνήμη αυτόματα ελευθερώνεται μόλις η κλάση Sound καταστραφεί.

Packit 1470ea
    </item>
Packit 1470ea
  </steps>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="signals">
Packit 1470ea
  <title>Σύνδεση σημάτων</title>
Packit 1470ea
  

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

Packit 1470ea
Packit 1470ea
  

Η συνάρτηση που καλείται όταν ο χρήστης πατά ένα κουμπί μπορεί να είναι αρκετά απλή, καθώς όλο το ενδιαφέρον υλικό γίνεται τώρα στη βοηθητική κλάση:

Packit 1470ea
  
Packit 1470ea
static void
Packit 1470ea
on_button_clicked(double frequency, Sound* sound)
Packit 1470ea
{
Packit 1470ea
	sound->start_playing (frequency);
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
  

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

Packit 1470ea
Packit 1470ea
  

Ο κώδικας για ρύθμιση των σημάτων πρέπει να προστεθεί στη συνάρτηση main() αμέσως μετά τη γραμμή builder->get_widget("main_window", main_win);:

Packit 1470ea
  
Packit 1470ea
Sound sound;
Packit 1470ea
Gtk::Button* button;
Packit 1470ea
Packit 1470ea
builder->get_widget("button_E", button);
Packit 1470ea
button->signal_clicked().connect (sigc::bind<double, Sound*>(sigc::ptr_fun(&on_button_clicked),
Packit 1470ea
                                              329.63, &sound));
Packit 1470ea
Packit 1470ea
	<steps>
Packit 1470ea
	<item>
Packit 1470ea
	

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

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

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

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

Τελικά συνδέουμε το σήμα πατημένο. Αυτό δεν είναι πλήρως κατανοητό επειδή αυτό γίνεται με έναν πλήρη τρόπο ασφαλούς τύπου και στην πραγματικότητα θέλουμε να περάσουμε τη συχνότητα και τη βοηθητική μας κλάση στο χειριστή σήματος. Ο sigc::ptr_fun(&on_button_clicked) δημιουργεί μια υποδοχή για τη μέθοδο on_button_clicked που ορίσαμε παραπάνω. Με τον sigc::bind μπορούμε να περάσουμε πρόσθετα ορίσματα στην υποδοχή και σε αυτήν την περίπτωση περνάμε τη συχνότητα (ως διπλή) και τη βοηθητική μας κλάση.

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

Τώρα που ρυθμίσαμε το κουμπί E θα χρειαστούμε επίσης να συνδέσουμε τα άλλα κουμπιά σύμφωνα με τις συχνότητές τους: 440 για A, 587.33 για D, 783.99 για G, 987.77 για B και 1318.5 για την υψηλή Ε. Αυτό γίνεται με τον ίδιο τρόπο, απλά περνώντας μια διαφορετική συχνότητα στον χειριστή.

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.cc">κώδικα αναφοράς</link>.

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

Πολλά από τα πράγματα που εμφανίστηκαν παραπάνω εξηγούνται με λεπτομέρεια στο <link href="http://library.gnome.org/devel/gtkmm-tutorial/stable/">βιβλίο GTKmm</link> που επίσης καλύπτει πολύ περισσότερες βασικές έννοιες χρήσης όλης της δύναμης του GTKmm. Ίσως επίσης ενδιαφέρεστε για την <link href="http://library.gnome.org/devel/gstreamermm/">τεκμηρίωση αναφοράς GStreamermm</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>