Deadline στο matlab

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

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Atipia
Δημοσιεύσεις: 1
Εγγραφή: 08 Ιουν 2010 13:54

Deadline στο matlab

Δημοσίευση από Atipia » 08 Ιουν 2010 14:02

Καλησπερα σε ολους ειναι το πρωτο μηνυμα μου εδω και ελπιζω να παρω μια απαντηση στην ερωτηση μου διοτι εχω φαει τον τοπο γενικοτερα και το deadline για την εργασια τελειωνει σε λιγες μερες.Συνοπτικα

Εχω μια παρτιτουρα ενος κομματιου (μικρη) οπως επισης και μια συναρτηση tone.m για τις νοτες που αντιστοιχουν σε αριθμους του πληκτρολογιου και τελος μια adsr.m για να σχηματισω την περιβαλλουσα..

Μπορει κανεις να μου πει πως θα το φτιαξω αυτο το πραγμα.
Επισυναπτω και τα σχετικα.

Παιδια θα με σωσετε πραγματικα αν καποιος βοηθησει διοτι ειναι σεδον το τελευταιο μαθημα που μου εχει απομεινει

Ευχαριστω εκ των προτερων.
Συνημμένα
Matlab.zip
(76.7 KiB) Μεταφορτώθηκε 189 φορές

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Deadline στο matlab

Δημοσίευση από nbc » 08 Ιουν 2010 19:53

Δεν μας λες πιο είναι το ζητούμενο και που κόλλησες :D

Προφανώς, πρέπει να φτιάξεις ένα synthesizer. Το οποίο, όμως, θα παίζει από το πληκτρολόγιο ή θα πρέπει να ψηφιοποιήσεις την παρτιτούρα και κατόπιν να αναπαραχθεί από το πρόγραμμα?

Anyway, να σου πω μερικά πράγματα για τη σύνθεση, μιας και είναι κοινό ζητούμενο.

Τη δουλειά θα κάνει η sound(), συνεπώς, θα πρέπει να της ετοιμάσεις ένα vector (για μονοφωνικό ήχο) με samples (=δείγματα), δηλαδή αλληλουχίες τιμών από -1 έως 1, οι οποίες ουσιαστικά θα είναι αποτέλεσμα της sin(). Οι τιμές αυτές αφορούν το amplitude (=ένταση) όπου 0 σημαίνει σιωπή και 1 (ή -1) max ένταση. Ο αριθμός δειγμάτων στη μονάδα του χρόνου εξαρτάται από τη συχνότητα δειγματοληψίας fs (που εσύ θα καθορίσεις), τη διάρκεια της νότας d και τη συχνότητα της f, σύμφωνα με το γενικό τύπο Ν = sin(2*pi*f/fs*[0:fs*d]);

Ας πάρουμε, για, παράδειγμα fs=16000, f=440 και d=1

Αν δώσουμε στην κονσόλα του matlab

Κώδικας: Επιλογή όλων

> sound(sin(2*pi*440/16000*[0:16000]), 16000)
Θα ακούσουμε από το μεγάφωνο 440Ηz (αντιστοιχούν στη νότα A4) για 1". Για να διαπιστώσεις τη σχέση της fs με όλα τα υπόλοιπα, και το πόσο σχετικά είναι, στην παραπάνω εντολή αν αντικαταστήσεις το τελικό 16000 (2η παράμετρος της sound) με 8000, τότε θα παραχθεί τόνος 220Hz με διάρκεια 2". Αυτό έγινε επειδή μειώσαμε τη συχνότητα δειγματοληψίας αλλά τα δείγματά μας παρέμειναν ίδια. Παρομοίως, αν το 16000 το κάνουμε 32000, τότε θα ακούσουμε 880Hz με διάρκεια .5". Συνεπώς, παρατηρούμε πως με τον ίδιο αριθμό δειγμάτων, η fs είναι ανάλογη της συχνότητας του τόνου και αντιστρόφως ανάλογη της διάρκειάς του. Λογικό, αν σκεφτείς πως μεγαλύτερη fs σημαίνει πως ο υπολογιστής θα επεξεργαστεί γρηγορότερα τα δείγματα, αλλά θα τελειώσει πιο σύντομα και ο ήχος θα είναι πιο υψίσυχνος (αφού μειώνεται η περίοδος, αυξάνεται η συχνότητα).

Παραθέτω 2 link που πιστεύω θα σε βοηθήσουν:

Computer Music in Undergraduate Digital Signal Processing

Ένα σύντομο και περιεκτικό pdf με συνδυασμό θεωρίας και παραδειγμάτων. Εξηγεί και πως μπορείς να εφαρμόσεις το ADSR envelope. Ουσιαστικά, "απλώνεις" το ADSR όσο η διάρκεια της νότας σου και πολλαπλασιάζεις τα 2 vectors.

Simple Music in MATLAB

Ολοκληρωμένο προγραμματάκι "Jingle Bells" που μπορεί να σου δώσει ιδέες. Χρησιμοποιεί 1 αρμονική (δεν είναι ανάγκη να το κάνεις) για να εμπλουτίσει τον ήχο.

Απάντηση

Επιστροφή στο “γλώσσες προγραμματισμού - γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες