Beispiel #1
0
        public static List <Tone> ApplyMotif(this List <Note> key, Motif motif, int?startIndex = null, int startOctave = 4)
        {
            int start             = startIndex ?? motif.Pitches[0];
            var translatedMotif   = new Motif();
            var translationAmount = start + startOctave * key.Count - motif.Pitches[0];

            translatedMotif.Pitches = motif.Pitches.Select(i => i == -1 || i + translationAmount < 0 ? i : i + translationAmount).ToList();
            var appliedMotif = new List <Tone>();
            var octaves      = 100;
            var keyRange     = key.KeyRange(octaves);

            for (int i = 0; i < translatedMotif.Pitches.Count; i++)
            {
                var tone = new Tone();
                if (translatedMotif.Pitches[i] == -1)
                {
                    tone.Note   = Note.Rest;
                    tone.Octave = null;
                }
                else
                {
                    var octave = keyRange[translatedMotif.Pitches[i]].Octave;
                    int?octaveToUse;
                    if (octave < Sound.MinOctave)
                    {
                        octaveToUse = Sound.MinOctave;
                    }
                    else if (octave > Sound.MaxOctave)
                    {
                        octaveToUse = Sound.MaxOctave;
                    }
                    else
                    {
                        octaveToUse = octave;
                    }
                    tone.Note   = keyRange[translatedMotif.Pitches[i]].Note;
                    tone.Octave = octaveToUse;
                }
                tone.Length = motif.Rhythm[i];
                appliedMotif.Add(tone);
            }

            return(appliedMotif);
        }
Beispiel #2
0
        public static double FrequencyByTone(Tone tone)
        {
            var lookup = new Dictionary <string, double>
            {
                {
                    Note.C.ToString() + "2", 65.41
                },
                {
                    Note.CsharpDflat.ToString() + "2", 69.30
                },
                {
                    Note.D.ToString() + "2", 73.42
                },
                {
                    Note.DsharpEflat.ToString() + "2", 77.78
                },
                {
                    Note.E.ToString() + "2", 82.41
                },
                {
                    Note.F.ToString() + "2", 87.31
                },
                {
                    Note.FsharpGflat.ToString() + "2", 92.50
                },
                {
                    Note.G.ToString() + "2", 98.00
                },
                {
                    Note.GsharpAflat.ToString() + "2", 103.83
                },
                {
                    Note.A.ToString() + "2", 110.00
                },
                {
                    Note.AsharpBflat.ToString() + "2", 116.54
                },
                {
                    Note.B.ToString() + "2", 123.47
                },

                {
                    Note.C.ToString() + "3", 130.81
                },
                {
                    Note.CsharpDflat.ToString() + "3", 138.59
                },
                {
                    Note.D.ToString() + "3", 146.83
                },
                {
                    Note.DsharpEflat.ToString() + "3", 155.56
                },
                {
                    Note.E.ToString() + "3", 164.81
                },
                {
                    Note.F.ToString() + "3", 174.61
                },
                {
                    Note.FsharpGflat.ToString() + "3", 185.00
                },
                {
                    Note.G.ToString() + "3", 196.00
                },
                {
                    Note.GsharpAflat.ToString() + "3", 207.65
                },
                {
                    Note.A.ToString() + "3", 220.00
                },
                {
                    Note.AsharpBflat.ToString() + "3", 233.08
                },
                {
                    Note.B.ToString() + "3", 246.94
                },

                {
                    Note.C.ToString() + "4", 261.63
                },
                {
                    Note.CsharpDflat.ToString() + "4", 277.18
                },
                {
                    Note.D.ToString() + "4", 293.66
                },
                {
                    Note.DsharpEflat.ToString() + "4", 311.13
                },
                {
                    Note.E.ToString() + "4", 329.63
                },
                {
                    Note.F.ToString() + "4", 349.23
                },
                {
                    Note.FsharpGflat.ToString() + "4", 369.99
                },
                {
                    Note.G.ToString() + "4", 392.00
                },
                {
                    Note.GsharpAflat.ToString() + "4", 415.30
                },
                {
                    Note.A.ToString() + "4", 440.00
                },
                {
                    Note.AsharpBflat.ToString() + "4", 466.16
                },
                {
                    Note.B.ToString() + "4", 493.88
                },

                {
                    Note.C.ToString() + "5", 523.25
                },
                {
                    Note.CsharpDflat.ToString() + "5", 554.37
                },
                {
                    Note.D.ToString() + "5", 587.33
                },
                {
                    Note.DsharpEflat.ToString() + "5", 622.25
                },
                {
                    Note.E.ToString() + "5", 659.25
                },
                {
                    Note.F.ToString() + "5", 698.46
                },
                {
                    Note.FsharpGflat.ToString() + "5", 739.99
                },
                {
                    Note.G.ToString() + "5", 783.99
                },
                {
                    Note.GsharpAflat.ToString() + "5", 830.61
                },
                {
                    Note.A.ToString() + "5", 880.00
                },
                {
                    Note.AsharpBflat.ToString() + "5", 932.33
                },
                {
                    Note.B.ToString() + "5", 987.77
                },

                {
                    Note.C.ToString() + "6", 1046.50
                },
                {
                    Note.CsharpDflat.ToString() + "6", 1108.73
                },
                {
                    Note.D.ToString() + "6", 1174.66
                },
                {
                    Note.DsharpEflat.ToString() + "6", 1244.51
                },
                {
                    Note.E.ToString() + "6", 1318.51
                },
                {
                    Note.F.ToString() + "6", 1396.91
                },
                {
                    Note.FsharpGflat.ToString() + "6", 1479.98
                },
                {
                    Note.G.ToString() + "6", 1567.98
                },
                {
                    Note.GsharpAflat.ToString() + "6", 1661.22
                },
                {
                    Note.A.ToString() + "6", 1760.00
                },
                {
                    Note.AsharpBflat.ToString() + "6", 1864.66
                },
                {
                    Note.B.ToString() + "6", 1975.53
                }
            };

            return(lookup[tone.Id]);
        }