• 沒有找到結果。

4. Discussion

4.5 Conclusion

The implementation program runs successfully; the original purpose of this thesis is basically realized accordingly. I propose a model for algorithmic composition of monophonic pitches; the melodic contour corresponds with the law of conservation of energy. In spite of the main process of energy regulation, the input and output data in this thesis are symbolic musical pitches. They can also be, however, sub-symbolic audio

48

frequencies. We could further integrate the method with other supplementary algorithm.

I should reiterate that to reconsider the phenomena of higher levels from the point of view which we have in lower levels can assist us in composing genuinely but with imitations by adopting the principles in old styles. Above all, the domain of academic knowledge may separate again after lengthy union while it is now on the road to unite.

This thesis may be a tiny part in the giant progress; nevertheless, it strongly stands for my response to the revival.

49

Appendix: Source Code

Visual C++ Files

stdafx.h

#pragma once

#include <cmath> // for pow()

#include <time.h> // for srand(time(NULL)) and rand()

#include <fstream> // for std::ofstream

Form1.h (excerpt)

#pragma once

#include "Note.h"

#include "Score.h"

System::Void button_execute_Click(System::Object^ sender, System::EventArgs^ e) {

double countMax = pow(2.0, exponent);

// main function:

short* pitches = new short[nNote]; // pitch array

50

Note note(nNote, bottom, range, mode, tonic, center, susceptibility, similiarStepMax, contraryStepMax, stepMax, skipMax,

repetitionMax, countMax);

if (isComplete(nNote, pitches, countMax, note))

finalScore(nNote, pitches, duration); // write the result score else

finalScore(); // write a blank score delete [] pitches;

}

bool isComplete(short nNote, short* pitches, double countMax, Note note) {

else // 3. following pitches

pitches[i] = note.compose(pitches[i-2], pitches[i-1]);

// backtrack procedure:

if (pitches[i] < 0) // 1. rejectee: nextPitch_ == -1 i--; // undo the previous pitch

else // 2. pass

51 }

while (i<nNote);

return is;

}

void finalScore(short nNote, short* pitches, short duration) // write the result score {

short noteon = 0;

short pitch = 0;

Score score;

score.create();

for (short i=0; i<nNote; i++){

pitch = pitches[i];

Score score(noteon, pitch, 127, 120, 0);

// Noteon, Pitch, Velocity=127, Artdur=120, Channel=0 score.write();

noteon += duration; // whole note == 480 }

score.finish();

}

void finalScore() // write a blank score {

52 public:

Note();

Note(short nNote, short bottom, short range, short mode, short tonic, short centerPitch, short susceptibility, short consecutiveSimiliarStepTimesMax,

short consecutiveContraryStepMax,

short consecutiveStepTimesMax, short consecutiveSkipTimesMax, short repetitionTimesMax, double countMax);

short compose(); // first note creator

short compose(short firstPitch); // second note creator short compose(short previousPitch, short presentPitch);

// following note creator

bool isOnModeScale(); // pitch check: mode scale

bool isTolerableEnergyRatio(); // pitch check: energy ratio bool isAcceptableInterval(); // pitch check: interval bool isWithinRepetitionLimit(); // repetition times check

bool isWithinConsecutiveMotionLimit(); // consecutive motion check void countRepetitionTimes(); // repetition times counter

void countConsecutiveMotion(Motion motion); // consecutive motion counter private:

short nNote_; // note amount short bottom_; // bottom pitch short range_; // melody range

short mode_; // mode: 1.Ionian, 2.Aeolian short tonic_; // tonic pitch

short centerPitch_; // center pitch

short susceptibility_; // susceptibility constant

short consecutiveSimiliarStepTimesMax_; // consecutive similiar step maximum short consecutiveContraryStepTimesMax_; // consecutive contrary step maximum short consecutiveStepTimesMax_; // consecutive step maximum

short consecutiveSkipTimesMax_; // consecutive skip maximum short repetitionTimesMax_; // repetition maximum

double countMax_; // count times maximum short previousPitch_; // the previous pitch short presentPitch_; // the present pitch short nextPitch_; // the next pitch

double nextEnergyRatio_; // next energy ratio

53

double energyRatioMax_; // tolerable energy ratio maximum double energyRatioMin_; // tolerable energy ratio minmum

double tempEnergyRatioMax_; // temporary tolerable energy ratio maximum double tempEnergyRatioMin_; // temporary tolerable energy ratio minmum short nextInterval_; // next pitch interval

short consecutiveSimiliarStepTimes_; // consecutive similiar step times short consecutiveContraryTimes_; // consecutive contrary step times short consecutiveStepTimes_; // consecutive step times

short consecutiveSkipTimes_; // consecutive skip times short repetitionTimes_; // repetition times

short tempConsecutiveSimiliarStepTimes_;

// temporary consecutive similiar step times short tempConsecutiveContraryStepTimes_;

// temporary consecutive contrary step times

short tempConsecutiveStepTimes_; // temporary consecutive step times short tempConsecutiveSkipTimes_; // temporary consecutive skip times short tempRepetitionTimes_; // temporary repetition times

};

54

Note::Note(short nNote, short bottom, short range, short mode, short tonic, short centerPitch, short susceptibility,

short consecutiveSimiliarStepTimesMax, short consecutiveContraryStepMax, short consecutiveStepTimesMax, short consecutiveSkipTimesMax,

short repetitionTimesMax, double countMax) {

55

energyRatioMax_ = 4.0; // initial Max = 4

energyRatioMin_ = 0.25; // initial rMin = 4, therefore Min = 1 / 4

short Note::compose() // the first pitch {

presentPitch_ = centerPitch_;

// present pitch is the center pitch; next pitch is the first pitch double count = 0;

do {

do nextPitch_ = rand() % range_ + bottom_;

while (!isOnModeScale());

56

nextPitch_ = -1; // rejectee break;

short Note::compose(short presentPitch) // the second pitch {

presentPitch_ = presentPitch;

double count = 0;

do {

do nextPitch_ = rand() % range_ + bottom_;

while (!isOnModeScale());

if (count > countMax_) {

57 nextPitch_ = -1; // rejectee break;

short Note::compose(short previousPitch, short presentPitch) // following pitches {

do nextPitch_ = rand() % range_ + bottom_;

while (!isOnModeScale());

// reset variables of consecutive motion:

tempConsecutiveSimiliarStepTimes_ = consecutiveSimiliarStepTimes_;

58 count++;

if (count > countMax_) {

nextPitch_ = -1; // rejectee break;

short pitchClass = (nextPitch_ + 12 - tonic_) % 12;

switch (mode_)

59

else if (nextEnergyRatio_ < tempEnergyRatioMin_) is = false;

short interval = nextPitch_ - presentPitch_;

if (interval > 12) // exceed ascending octave is = false;

else if (interval < -12) // exceed descending octave is = false;

else if (interval == 6) // ascending tritone is = false;

60

else if (interval == -6) // descending tritone is = false;

else if (interval == 10) // ascending minor seven is = false;

else if (interval == -10) // descending minor seven is = false;

else if (interval == 11) // ascending major seven is = false;

else if (interval == -11) // descending major seven is = false;

tempConsecutiveStepTimes_ <= consecutiveStepTimesMax_ &&

tempConsecutiveSkipTimes_ <= consecutiveSkipTimesMax_

61 }

void Note::countRepetitionTimes() {

nextInterval_ = nextPitch_ - presentPitch_;

if (nextInterval_ == 0) // repetition

case 1 : // consecutive similiar step tempConsecutiveSimiliarStepTimes_++;

tempConsecutiveContraryStepTimes_ = 0;

tempConsecutiveStepTimes_++;

tempConsecutiveSkipTimes_ = 0;

break;

case 2 : // consecutive contrary step

tempConsecutiveSimiliarStepTimes_ = 0;

62

Frequency(short mode, short tonic, short susceptibility,

short centerPitch, short presentPitch, short nextPitch);

double allocateFrequency(short octave, short pitchClass);

double countEnergyRatioMax(double energyRatioMax); // Max

double countEnergyRatioMin(double energyRatioMin); // Min = 1 / rMin double getNextEnergyRatio();

private:

short mode_; // mode: 1.Ionian, 2.Aeolian short tonic_; // tonic pitch

short susceptibility_; // susceptibility constant short centerPitch_; // centerPitch

short presentPitch_; // present pitch short nextPitch_; // next pitch

short centerOctave_; // center pitch register location short presentOctave_ ; // present pitch register location short nextOctave_ ; // next pitch register location short centerPitchClass_; // center pitch class short presentPitchClass_; // present pitch class short nextPitchClass_; // next pitch class

double centerFrequency_; // center pitch frequency double presentFrequency_; // present pitch frequency double nextFrequency_; // next pitch frequency double presentFrequencyRatio_;

// present frequency ratio: frequency (n-1) / frequency (0)

63 double nextFrequencyRatio_;

// next frequency ratio: frequency (n) / frequency (0) double presentEnergyRatio_;

// present energy ratio: (frequency (n-1) / frequency (0))^2 double nextEnergyRatio_;

// next energy ratio: (frequency (n) / frequency (0))^2 double energyRatioInterval_; // energy ratio interval };

64

Frequency::Frequency(short mode, short tonic, short susceptibility,

short centerPitch, short presentPitch, short nextPitch) {

centerPitchClass_ = (centerPitch_ + 12 - tonic_) % 12;

presentPitchClass_ = (presentPitch_ + 12 - tonic_) % 12;

nextPitchClass_ = (nextPitch_ + 12 - tonic_) % 12;

centerOctave_ = (centerPitch_ + 12) / 12 - 1;

presentOctave_ = (presentPitch_ + 12) / 12 - 1;

nextOctave_ = (nextPitch_ + 12) / 12 - 1;

centerFrequency_ = allocateFrequency(centerOctave_, centerPitchClass_);

presentFrequency_ = allocateFrequency(presentOctave_, presentPitchClass_);

nextFrequency_ = allocateFrequency(nextOctave_, nextPitchClass_);

presentFrequencyRatio_ = presentFrequency_ / centerFrequency_;

nextFrequencyRatio_ = nextFrequency_ / centerFrequency_;

presentEnergyRatio_ = presentFrequencyRatio_ * presentFrequencyRatio_;

nextEnergyRatio_ = nextFrequencyRatio_ * nextFrequencyRatio_;

energyRatioInterval_ = nextEnergyRatio_ - presentEnergyRatio_;

}

double Frequency::allocateFrequency(short octave, short pitchClass) {

65

case 9 : frequency = 40 * pow(2.0, octave); break;

case 11 : frequency = 45 * pow(2.0, octave); break;

default : frequency = 1; break;

}

case 10 : frequency = 216 * pow(2.0, octave); break;

default : frequency = 2; break;

} break;

default : frequency = 3; break;

}

return frequency;

}

double Frequency::countEnergyRatioMax(double energyRatioMax) {

energyRatioMax = energyRatioMax - (energyRatioInterval_ * susceptibility_);

// next Max

if (energyRatioMax < 1)

energyRatioMax = 1; // Max always >=1 return energyRatioMax;

}

double Frequency::countEnergyRatioMin(double energyRatioMin) {

double reciprocalEnergyRatioMin = 1 / energyRatioMin; // present rMin reciprocalEnergyRatioMin = reciprocalEnergyRatioMin + (energyRatioInterval_

* susceptibility_); // next rMin if (reciprocalEnergyRatioMin < 1)

reciprocalEnergyRatioMin = 1; // rMin always >=1

66

energyRatioMin = 1 / reciprocalEnergyRatioMin; // next Min return energyRatioMin;

Motion(short previousPitch, short presentPitch, short nextPitch);

short identify(); // motion types identifier private:

short previousPitch_; // 0 ~ 127 short presentPitch_; // 0 ~ 127 short nextPitch_; // 0 ~ 127

short previousInterval_; // -127 ~ +127 short nextInterval_; // -127 ~ +127

bool areSimilarDirections_; // T: similiar, F: contrary short previousMotion_; // 0: repetition, 1: step, 2: skip short nextMotion_; // 0: repetition, 1: step, 2: skip };

67

Motion::Motion(short previousPitch, short presentPitch, short nextPitch) {

previousPitch_ = previousPitch;

presentPitch_ = presentPitch;

nextPitch_ = nextPitch;

previousInterval_ = presentPitch_ - previousPitch_;

nextInterval_ = nextPitch_ - presentPitch_;

// directions:

if (previousInterval_ * nextInterval_ >= 0) // not "> 0"

areSimilarDirections_ = true; // similiar

else if (previousInterval_ <= 2 && previousInterval_ >= -2) previousMotion_ = 2; // step

else

previousMotion_ = 3; // skip // next motion:

if (nextInterval_ == 0)

nextMotion_ = 1; // repetition

else if (nextInterval_ <= 2 && nextInterval_ >= -2) nextMotion_ = 2; // step

68 short identity = 0;

if (previousMotion_ == 2 && nextMotion_ == 2) {

switch (areSimilarDirections_) {

case true : identity = 1; break;// consecutive similiar step case false : identity = 2; break;// consecutive contrary step }

}

else if (previousMotion_ == 3 && nextMotion_ == 3) identity = 3; // consecutive skip

else

identity = 4; // none of above return identity;

}

Score.h

// Score Writer for the File Format of MusicSculptor by Phil Winsor

#pragma once

class Score {

public:

Score();

Score(short noteon, short pitch, short velocity, short artdur, short channel);

void create(); // output file initiator void write(); // note writer

void finish(); // output file closer private:

69

Score::Score(short noteon, short pitch, short velocity, short artdur, short channel) {

tfile<<noteon_<<' '<<pitch_<<' '<<velocity_<<' '<<artdur_<<' '<<channel_<<

std::endl;

}

70 void Score::finish()

{

// write the end flag of the output file:

std::ofstream tfile("Output.sc", std::ios::app);

tfile<<"0 -1 0 0 0"<<std::endl;

}

71

References

Adiloglu, Kamil, and Ferda N. Alpaslan. “A Machine Learning Approach to Two-Voice Counterpoint Composition.” Knowledge-based Systems 20, no. 3 (2007): 300-09.

Aguilera, Gabriel, José Luis Galán, Rafael Madrid, Antonio Manuel Martínez, Yolanda Padilla, and Pedro Rodríguez. “Automated Generation of Contrapuntal Musical Compositions Using Probabilistic Logic in Derive.” Mathematics and Computers in Simulation 80, no. 6 (2010): 1200-11.

Aldwell, Edward, and Carl Schachter. Harmony and Voice Leading. 3rd ed. New York: Schirmer, 2003.

Baggi, Denis, ed. Readings in Computer-Generated Music. Los Alamitos: IEEE Computer Society Press, 1992.

Balaban, Mira, Kemal Ebcioglu, and Otto Laske, eds. Understanding Music with Ai: Perspectives on Music Cognition. Cambridge, MA: The MIT Press, 1992.

Bobbitt, Richard. “The Physical Basis of Intervallic Quality and Its Application to the Problem of Dissonance.” Journal of Music Theory 3, no. 2 (1959): 173-207.

Brower, Candace. “Paradoxes of Pitch Space.” Music Analysis 27, no. 1 (2008): 51-106.

Bruner, Cheryl L. “The Perception of Contemporary Pitch Structures.” Music Perception 2, no. 1 (1984):

25-39.

Callender, Clifton, Ian Quinn, and Dmitri Tymoczko. “Generalized Voice-Leading Spaces.” Science 320, no. 5874 (2008): 346-48.

Campbell, Murray, and Clive Greated. The Musician's Guide to Acoustics. London: J. M. Dent & Sons Ltd, 1987.

Chew, Elaine, Adrian Childs, and Ching-Hua Chuan. “Mathematics and Computation in Music.” Paper presented at the Second international conference, MCM, New Haven, CT, USA, 2009.

Collins, Nicholas, and Nick Collins. Introduction to Computer Music. John Wiley & Sons, 2010.

Cooper, Grosvenor W., and Leonard B. Meyer. The Rhythmic Structure of Music. Chicago: University of Chicago, 1960.

72

Cope, David. Computer Models of Musical Creativity. Cambridge, MA: MIT Press, 2005.

———. Hidden Structure: Music Analysis Using Computers. The Computer Music and Digital Audio Series. edited by James Zychowicz Middleton: A-R Editions, 2008.

———. Virtual Music: Computer Synthesis of Musical Style. Cambridge, MA: The MIT Press, 2001.

Dallin, Leon. Techniques of Twentieth Century Composition: A Guide to the Materials of Modern Music.

Music Series. 3rd ed. Dubuque: W. C. Brown Co., 1974.

Duffin, Ross W. How Equal Temperament Ruined Harmony (and Why You Should Care). New York: W.

W. Norton, 2007.

Farbood, Mary, and Bernd Schoner. “Analysis and Synthesis of Palestrina-Style Counterpoint Using Markov Chains.” In International Computer Music Conference. Habana, Cuba, 2001.

Fauvel, John, Raymond Flood, and Robin Wilson, eds. Music and Mathematics: From Pythagoras to Fractals. Oxford: Oxford University Press, 2006.

Foerster, Heinz Von, and James W. Beauchamp, eds. Music by Computers. New York: John Wiley & Sons, 1969.

Gedik, Ali C., and Barıs Bozkurt. “Pitch-Frequency Histogram-Based Music Information Retrieval for Turkish Music.” Signal Processing 90, no. 4 (2010): 1049-63.

Halliday, David, Robert Resnick, and Jearl Walker. Fundamentals of Physics Extended. 8th ed.

Hoboken: John Wiley & Sons, 2008.

Harkleroad, Leon. The Math Behind the Music. Cambridge: Cambridge University Press, 2006.

Hasty, Christopher F. Meter as Rhythm. Oxford: Oxford University Press, 1997.

Helmholtz, Hermann L. F. On the Sensations of Tone as a Physiological Basis for the Theory of Music.

New York: Dover Publications, 1954.

Hewlett, Walter B., and Eleanor Selfridge-Field, eds. Melodic Similarity: Concepts, Procedures, and Applications, Computing in Musicology, vol. 11. Cambridge, MA: The MIT Press, 1998.

Hiller, Lejaren A., and Leonard M. Isaacson. Experimental Music: Composition with an Electronic Computer. New York: McGraw-Hill, 1959.

73

Hsu, Kenneth J., and Andreas J. Hsu. “Fractal Geometry of Music.” Proceedings of the National Academy of Sciences of the United States of America 87, no. 3 (1990): 938-41.

———. “Self-Similarity of the ‘1/F Noise’ Called Music.” Proceedings of the National Academy of Sciences of the United States of America 88, no. 8 (1991): 3507-09.

Jeppesen, Kund. Counterpoint: The Polyphonic Vocal Style of the Sixteenth Century. Translated by Glen Haydon. New York: Dover Publications, 1992.

Jonhson, Timothy A. Foundations of Diatonic Theory: A Mathematically Based Approach to Music Fundamentals. Lanham: Scarecrow Press, 2008.

Kennan, Kent Wheeler. Counterpoint: Based on Eighteenth-Century Practice. 3rd ed. Englewood Cliffs:

Prentice-Hall, 1987.

Kosko, Bart. Fuzzy Thinking: The New Science of Fuzzy Logic. New York: Hyperion, 1993.

Kostka, Stefan, and Dorothy Payne. Tonal Harmony: With an Introduction to Twentieth-Century Music.

4th ed. New York: McGraw-Hill, 2000.

Krumhansl, Carol L. Cognitive Foundations of Musical Pitch. Oxford Psychology Series. edited by Donald E. Broadbent, James L. McGaugh, Stephen Kosslyn, Endel Tulving, Nicholas J. Mackintosh and Lawrence Weisskrantz Oxford: Oxford University Press, 1990.

Lerdahl, Fred. Tonal Pitch Space. Oxford: Oxford University Press, 2005.

Lerdahl, Fred, and Ray Jackendoff. A Generative Theory of Tonal Music. Cambridge, MA: The MIT Press, 1983.

Lewin, David. Generalized Musical Intervals and Transformations. Oxford: Oxford University Press, 1987.

Lin, Hsin-Ming, and Chih-Fang Huang. “An Algorithmic Composition Method of Monophonic Pitches Based on the Frequency Relationship of Melody Motion.” In International Computer Music Conference, 518-21. Suffolk, NY, USA, 2010.

———. “A Better Layout for Playing Melody by Cellphone Keypad.” In The 4th Intelligent Living Technology Conference, 1555-58. Taichung, Taiwan, 2009.

Lloyd, Llewelyn Southworth, and Hugh Boyle. Intervals, Scales and Temperaments. New York: St.

74 Martin's Press, 1979.

Loy, Gareth. Musimathics: The Mathematical Foundations of Music. Cambridge, MA: MIT Press, 2006.

Ma, James. “Theory and Application of the Dynamic Just Intonation.” The Periodical of Taiwanese Computer Music Association (2002): 23-33.

Mann, Alfred. The Study of Counterpoint: From Johann Joseph Fux's Gradus Ad Parnassum. Revised ed.

New York: W. W. Norton & Company, 1965.

Mathews, Max V., and John R. Pierce, eds. Current Directions in Computer Music Research, System Development Foundation Benchmark. Cambridge, MA: The MIT Press, 1991.

Mazzola, Guerino. The Topos of Music: Geometric Logic of Concepts, Theory, and Performance Basel:

Birkhäuser, 2002.

Miranda, Eduardo Reck. Composing Music with Computers. Music Technology Series. edited by Francis Rumsey Burlington: Focal Press, 2001.

Morris, Robert D. Composition with Pitch-Classes: A Theory of Compositional Design. New Haven:

Yale University Press, 1987.

———. “New Directions in the Theory and Analysis of Musical Contour.” Music Theory Spectrum 15, no.

2 (1993): 205-28.

———. “Voice-Leading Spaces.” Music Theory Spectrum 20, no. 2 (1998): 175-202.

Morris, Reginald Owen. Contrapuntal Technique in the Sixteenth Century. Oxford: Oxford University Press, 1922.

Nierhaus, Gerhard. Algorithmic Composition: Paradigms of Automated Music Generation. Vienna:

SpringerWienNewYork, 2009.

Parncutt, Richard. Harmony: A Psychoacoustical Approach. Springer Series in Information Sciences.

edited by Manfred R. Schroeder New York: Springer-Verlag, 1989.

Roads, Curtis, and John Strawn, eds. Foundations of Computer Music. Cambridge, MA: MIT Press, 1985.

Rossing, Thomas D., F. Richard Moore, and Paul A. Wheeler. The Science of Sound. 3rd ed. San

75 Francisco: Addison Wesley, 2002.

Rowe, Robert. Interactive Music Systems: Machine Listening and Composing. Cambridge, MA: The MIT Press, 1993.

———. Machine Musicianship. Cambridge, MA: The MIT Press, 2001.

———. “Split Levels: Symbolic to Sub-Symbolic Interactive Music Systems.” Contemporary Music Review 28, no. 1 (2009): 31-42.

Schell, Daniel. “Optimality in Musical Melodies and Harmonic Progressions: The Travelling Musician.”

European Journal of Operational Research 140 (2002): 354-72.

Schmuckler, Mark. A. “Melodic Contour Similarity Using Folk Melodies.” Music Perception 28, no. 2 (2010): 169-93.

Schoenberg, Arnold. 8 Lieder, Op. 6. Berlin: Verlag Dreililien (Richard Birnbach), 1908.

———. Fundamentals of Musical Composition. Translated by Gerald Strang. London: Faber & Faber, 1967.

Schottstaedt, Bill. “Automatic Species Counterpoint.” Stanford University, 1984.

Schwanauer, Stephan M., and David A. Levitt, eds. Machine Models Music. Cambridge, MA: The MIT Press, 1993.

Serra, Xavier. “Towards a Roadmap for the Research in Music Technology.” In International Computer Music Conference. Barcelona, Spain, 2005.

Straus, Joseph N. Introduction to Post-Tonal Theory. Englewood Cliffs: Prentice-Hall, 1990.

Taube, Heinrich K. Notes from the Metalevel: Introduction to Algorithmic Music Composition. Studies on New Music Research. edited by Marc Leman London: Taylor & Francis, 2004.

Temperley, David. “An Algorithm for Harmonic Analysis.” Music Perception 15, no. 1 (1997): 31-68.

———. The Cognition of Basic Musical Structures. Cambridge, MA: The MIT Press, 2001.

———. “The Line of Fifths.” Music Analysis 19, no. 3 (2000): 289-319.

76

———. Music and Probability. Cambridge, MA: The MIT Press, 2007.

Thompson, William Forde. Music, Thought, and Feeling: Understanding the Psychology of Music.

Oxford: Oxford University Press, 2008.

Thornton, Stephen T., and Jerry B. Marion. Classical Dynamics of Particles and Systems. 5th ed.

Belmont: Brooks Cole, 2004.

Toussaint, Godfried. “Computational Geometric Aspects of Rhythm, Melody, and Voice-Leading.”

Computational Geometry 43 (2010): 2-22.

Tymoczko, Dmitri. “The Geometry of Musical Chords.” Science 313, no. 5783 (2006): 72-74.

———. “Scale Theory, Serial Theory and Voice Leading.” Music Analysis 27, no. 1 (2008): 1-49.

Winsor, Phil. Automated Music Composition. Denton: University of North Texas Press, 1989.

Winsor, Phil, and Gene De Lisa. Computer Music in C. Denton: University of North Texas Press, 1991.

Wu, Dian-Foon. “An Expert System for Composing 16th Century's Palestrina Musical Style.” Master's thesis, National Chiao Tung University, 1988.

Xenakis, Iannis. Formalized Music: Thought and Mathematics in Composition. Harmonologia Series.

edited by Sharon Kanach. Revised ed. Hillsdale: Pendragon Press, 1992.

Zimmermann, Hans-Jürgen. Fuzzy Set Theory and Its Applications. 3rd ed. Norwell: Kluwer Academic Publisher, 1996.

Zuckerkandl, Victor. The Sense of Music. Corrected Edition, with index, 1971 ed. Princeton: Princeton University Press, 1971.

相關文件