Как я могу создать мелодию? Есть ли какой-либо звуковой модуль?

Я смущен, потому что существует много программ. Но я выгляжу примерно так. Я введу мелодию как "a4 c3 h3 a2" и т.д., и затем я хочу услышать это. Кто-либо знает то, что я ищу?заранее спасибо

7
задан kame 27 December 2009 в 21:04
поделиться

4 ответа

вычислительные частоты от имени ноты просты. каждая полунота находится на расстоянии 2^(1/12) от предыдущей ноты, 440 Гц - A4.

если вы случайно оказались в окнах, вы можете попробовать этот кусок кода, который проигрывает песню через компьютерный динамик:

import math
import winsound
import time

labels = ['a','a#','b','c','c#','d','d#','e','f','f#','g','g#']
# name is the complete name of a note (label + octave). the parameter
# n is the number of half-tone from A4 (e.g. D#1 is -42, A3 is -12, A5 is 12)
name   = lambda n: labels[n%len(labels)] + str(int((n+(9+4*12))/12))
# the frequency of a note. the parameter n is the number of half-tones
# from a4, which has a frequency of 440Hz, and is our reference note.
freq   = lambda n: int(440*(math.pow(2,1/12)**n))

# a dictionnary associating note frequencies to note names
notes  = {name(n): freq(n) for n in range(-42,60)}

# the period expressed in second, computed from a tempo in bpm
period = lambda tempo: 1/(tempo/60)

# play each note in sequence through the PC speaker at the given tempo
def play(song, tempo):
    for note in song.lower().split():
        if note in notes.keys():
            winsound.Beep(notes[note], int(period(tempo)*1000))
        else:
            time.sleep(period(tempo))

# "au clair de la lune"!! 'r' is a rest
play( 'c4 c4 C4 d4 e4 r d4 r c4 e4 d4 d4 c4 r r r '
      'c4 C4 c4 d4 e4 r d4 r c4 e4 d4 d4 c4 r r r '
      'd4 d4 d4 d4 A3 r a3 r d4 c4 B3 a3 g3 r r r '
      'c4 c4 c4 d4 e4 r d4 r c4 e4 d4 d4 c4 r r r ', 180 )

(обратите внимание, что я использую питон 3.x, вам может понадобиться адаптация некоторой части кода, чтобы использовать его на питоне 2. x.)

ho, кстати, я использовал abcdefg в качестве шкалы, но вы наверняка найдете способ использовать h вместо b.

.
7
ответ дан 6 December 2019 в 19:37
поделиться

Одним из внешних вариантов является JFugue, как показано здесь (с Groovy). Обратите внимание, что вместо Python вы используете Jython, который, надеюсь, в качестве ответа находится в пределах диапазона.

.
3
ответ дан 6 December 2019 в 19:37
поделиться

вы можете использовать любую библиотеку, которая производит MIDI-вывод, в случае .net я бы порекомендовал созданный Стивеном Таубом из Microsoft (не могу найти, откуда я его взял, но google для него)

.
2
ответ дан 6 December 2019 в 19:37
поделиться

Зацените: http://www.algorithm.co.il/blogs/index.php/pytuner/ Это очень похожий проект и выглядит как очень приличная справка.

1
ответ дан 6 December 2019 в 19:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: