"aifc" --- Ανάγνωση και εγγραφή AIFF και AIFC αρχείων
*****************************************************

**Πηγαίος κώδικας:** Lib/aifc.py

Καταργήθηκε στην έκδοση 3.11, θα αφαιρεθεί στην έκδοση 3.13: Το module
"aifc" είναι κατηργημένο (δείτε το **PEP 594** για λεπτομέρειες).

======================================================================

Το module παρέχει υποστήριξη για την ανάγνωση και την εγγραφή AIFF και
AIFF-C αρχείων. Το AIFF είναι η μορφή ήχου Audio Interchange File
Format, μια μορφή για την αποθήκευση ψηφιακών δειγμάτων ήχου σε ένα
αρχείο. Το AIFF-C είναι μια νεότερη έκδοση της μορφής που περιλαμβάνει
την δυνατότητα συμπίεσης των δεδομένων ήχου.

Τα αρχεία ήχου έχουν έναν αριθμό παραμέτρων που περιγράφουν τα
δεδομένα ήχου. Η συχνότητα δειγματοληψίας ή ο ρυθμός καρέ είναι ο
αριθμός των φορών ανά δευτερόλεπτο που δειγματοληπτείται ο ήχος. Ο
αριθμός των καναλιών δείχνει αν ο ήχος είναι μονοφωνικός,
στερεοφωνικός ή τετραφωνικός. Κάθε καρέ αποτελείται από ένα δείγμα ανά
κανάλι. Το μέγεθος δείγματος είναι το μέγεθος σε bytes του κάθε
δείγματος. Έτσι ένα καρέ αποτελείται από "nchannels * samplesize"
bytes, και ένα δευτερόλεπτο ήχου από "nchannels * samplesize *
framerate" bytes.

Για παράδειγμα, ο ήχος ποιότητας CD έχει μέγεθος δείγματος δύο bytes
(16 bits), χρησιμοποιεί δύο κανάλια (στερεοφωνικός ήχος) και έχει
ρυθμό καρέ 44.100 καρέ/δευτερόλεπτο. Αυτό δίνει μέγεθος καρέ 4 bytes
(2*2), και ένα δευτερόλεπτο καταλαμβάνει 2*2*44100 bytes (176.400
bytes).

Το module "aifc" ορίζει την ακόλουθη συνάρτηση:

aifc.open(file, mode=None)

   Ανοίγει ένα αρχείο AIFF ή AIFF-C και επιστρέφει ένα στιγμιότυπο
   αντικειμένου με μεθόδους που περιγράφονται παρακάτω. Η παράμετρος
   *file* είναι είτε μια συμβολοσειρά που καθορίζει το όνομα του
   αρχείου είτε ένα *file object*. Η παράμετρος *mode* πρέπει να είναι
   "'r'" ή "'rb'" όταν το αρχείο πρέπει να ανοίξει για ανάγνωση, ή
   "'w'" ή "'wb'" όταν το αρχείο πρέπει να ανοίξει για εγγραφή. Αν
   παραληφθεί, χρησιμοποιείται το "file.mode" αν υπάρχει, διαφορετικά
   χρησιμοποιείται το "'rb'". Όταν χρησιμοποιείται για εγγραφή, το
   αντικείμενο αρχείου θα πρέπει να είναι αναζητήσιμο, εκτός αν
   γνωρίζετε εκ των προτέρων πόσα δείγματα θα γράψετε συνολικά και
   χρησιμοποιήσετε τις μεθόδους "writeframesraw()" και "setnframes()".
   Η συνάρτηση "open()" μπορεί να χρησιμοποιηθεί σε μια δήλωση "with".
   Όταν ολοκληρωθεί το μπλοκ "with", καλείται η μέθοδος "close()".

   Άλλαξε στην έκδοση 3.4: Προστέθηκε υποστήριξη για τη δήλωση "with".

Τα αντικείμενα που επιστρέφονται από τη συνάρτηση "open()" όταν ένα
αρχείο είναι ανοιχτό για ανάγνωση διαθέτουν τις παρακάτω μεθόδους:

aifc.getnchannels()

   Επιστρέφει τον αριθμό των καναλιών ήχου (1 για μονοφωνικό ήχο, 2
   για στερεοφωνικό ήχο).

aifc.getsampwidth()

   Επιστρέφει το μέγεθος σε bytes των μεμονωμένων δειγμάτων.

aifc.getframerate()

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

aifc.getnframes()

   Επιστρέφει τον αριθμό των καρέ ήχου στο αρχείο.

aifc.getcomptype()

   Επιστρέφει έναν πίνακα από bytes μήκους 4 που περιγράφει τον τύπο
   συμπίεσης που χρησιμοποιείται στο αρχείο ήχου. Για τα αρχεία AIFF,
   η επιστρεφόμενη τιμή είναι "b'NONE'".

aifc.getcompname()

   Επιστρέφει έναν πίνακα από bytes που μπορεί να μετατραπεί σε
   αναγνώσιμη περιγραφή του τύπου συμπίεσης που χρησιμοποιείται στο
   αρχείο ήχου. Για τα αρχεία AIFF, η επιστρεφόμενη τιμή είναι "b'not
   compressed'".

aifc.getparams()

   Επιστρέφει μια πλειάδα "namedtuple()" "(nchannels, sampwidth,
   framerate, nframes, comptype, compname)", η οποία είναι ισοδύναμη
   με την έξοδο των μεθόδων "get*()".

aifc.getmarkers()

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

aifc.getmark(id)

   Επιστρέφει την πλειάδα όπως περιγράφεται στη μέθοδο "getmarkers()"
   για το δείκτη με το δοσμένο *id*.

aifc.readframes(nframes)

   Διαβάζει και επιστρέφει τα επόμενα *nframes* καρέ από το αρχείο
   ήχου. Τα δεδομένα που επιστρέφονται είναι μια αλυσίδα που περιέχει
   για κάθε καρέ τα αποσυμπιεσμένα δείγματα όλων των καναλιών.

aifc.rewind()

   Επαναφέρει τον δείκτη ανάγνωσης. Η επόμενη μέθοδος "readframes()"
   θα ξεκινήσει από την αρχή.

aifc.setpos(pos)

   Μετακινεί το δείκτη στο καθορισμένο αριθμό καρέ.

aifc.tell()

   Επιστρέφει τον τρέχοντα αριθμό καρέ.

aifc.close()

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

Τα αντικείμενα που επιστρέφονται από τη συνάρτηση "open()" όταν ένα
αρχείο ανοίγεται για εγγραφή έχουν όλες τις παραπάνω μεθόδους, εκτός
από τις μεθόδους "readframes()" και "setpos()". Επίσης, υπάρχουν οι
εξής μέθοδοι. Οι μέθοδοι "get*()" μπορούν να κληθούν μόνο αφού έχουν
κληθεί οι αντίστοιχες μέθοδοι "set*()". Πριν την πρώτη κλήση των
μεθόδων "writeframes()" ή "writeframesraw()", όλες οι παράμετροι εκτός
από τον αριθμό των καρέ πρέπει να είναι συμπληρωμένες.

aifc.aiff()

   Δημιουργία αρχείου AIFF. Η προεπιλογή είναι να δημιουργηθεί ένα
   αρχείο AIFF-C, εκτός αν το όνομα του αρχείου λήγει σε "'.aiff'"
   οπότε η προεπιλογή είναι ένα αρχείο AIFF.

aifc.aifc()

   Δημιουργία αρχείου AIFF-C. Η προεπιλογή είναι να δημιουργηθεί ένα
   αρχείο AIFF-C, εκτός αν το όνομα του αρχείου λήγει σε "'.aiff'"
   οπότε η προεπιλογή είναι ένα αρχείο AIFF.

aifc.setnchannels(nchannels)

   Καθορίζει τον αριθμό των καναλιών στο αρχείο ήχου.

aifc.setsampwidth(width)

   Καθορίζει το μέγεθος σε bytes των δειγμάτων ήχου.

aifc.setframerate(rate)

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

aifc.setnframes(nframes)

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

aifc.setcomptype(type, name)

   Καθορίζει τον τύπο συμπίεσης. Εάν δεν καθοριστεί, τα δεδομένα ήχου
   δεν θα συμπιεστούν. Στα αρχεία AIFF, η συμπίεση δεν είναι δυνατή. Η
   παράμετρος όνομα θα πρέπει να είναι μια αναγνώσιμη περιγραφή του
   τύπου συμπίεσης ως πίνακας byte, ενώ η παράμετρος τύπος θα πρέπει
   να είναι ένας πίνακας από bytes μήκους 4. Προς το παρόν
   υποστηρίζονται οι εξής τύποι συμπίεσης: "b'NONE'", "b'ULAW'",
   "b'ALAW'", "b'G722'".

aifc.setparams(nchannels, sampwidth, framerate, comptype, compname)

   Ορίζει όλες τις παραμέτρους παραπάνω ταυτόχρονα. Η παράμετρος είναι
   μια πλειάδα που αποτελείται από τις διάφορες παραμέτρους. Αυτό
   σημαίνει ότι είναι δυνατό να χρησιμοποιηθεί το αποτέλεσμα μιας
   κλήσης μεθόδου "getparams()" ως παράμετρος στην μέθοδο
   "setparams()".

aifc.setmark(id, pos, name)

   Προσθέστε ένα δείκτη με το δοσμένο αναγνωριστικό (μεγαλύτερο από
   0), και το δοσμένο όνομα στη δοσμένη θέση. Αυτή η μέθοδος μπορεί να
   κληθεί οποιαδήποτε στιγμή πριν από την μέθοδο "close()".

aifc.tell()

   Επιστρέφει την τρέχουσα θέση εγγραφής στο αρχείο εξόδου. Χρήσιμο σε
   συνδυασμό με τη μέθοδο "setmark()".

aifc.writeframes(data)

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

   Άλλαξε στην έκδοση 3.4: Τώρα γίνονται αποδεκτά όλα τα αντικείμενα
   τύπου *bytes-like object*.

aifc.writeframesraw(data)

   Όπως η μέθοδος "writeframes()", εκτός από το γεγονός ότι η κεφαλίδα
   του αρχείου ήχου δεν ενημερώνεται.

   Άλλαξε στην έκδοση 3.4: Τώρα γίνονται αποδεκτά όλα τα αντικείμενα
   τύπου *bytes-like object*.

aifc.close()

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