# `aifc` — Ανάγνωση και εγγραφή AIFF και AIFC αρχείων

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

Αποσύρθηκε στην έκδοση 3.11: Το 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. Η κεφαλίδα του αρχείου ενημερώνεται για να αντανακλά το πραγματικό μέγεθος των δεδομένων ήχου. Μετά την κλήση αυτής της μεθόδου, το αντικείμενο δεν μπορεί να χρησιμοποιηθεί πια.