7
votes

Comment puis-je créer une mélodie? Y a-t-il un module sonore?

Je suis confus car il y a beaucoup de programmes. Mais je cherche quelque chose comme ça. Je vais taper une mélodie comme "A4 C3 H3 A2", etc., puis je veux entendre ça. Est-ce que quelqu'un sait ce que je cherche? merci d'avance


4 commentaires

"H3"? Outre le H3, votre notation ressemble à la notation utilisée par Lilypond. Recherchez une application lilypond-to-audio ou lilypond-to-midi.


Ah, Lieu: Berlin. Comme je soupçonnais. @Ewan: en notation de musique allemande, c'est "CDEFGAH". "H" au lieu de (anglais / international) "B".


Nitpick: Comme je le comprends, "h" est en fait nous appelons un plat plat (naturel) n'est toujours que B. Le compositeur Bach a pu utiliser cela pour encoder son nom dans les notes dans l'une de ses pièces.


Fermer, Daniel. L'allemand B est égal à l'U.S. B Flat (BB), et H est égal à B.


5 Réponses :


2
votes

Vous pouvez utiliser une bibliothèque qui produit une sortie MIDI, en cas de .NET, je recommanderais Celui créé par Stephen Toub de Microsoft (ne peut pas trouver d'où je l'ai eu, mais Google pour cela.)


0 commentaires

1
votes

Vérifiez ceci: http://www.algorithm.co. Il / blogs / index.php / pytuner / C'est un projet très similaire et ressemble à une référence très décente.


1 commentaires

J'ai du mal à installer la Pymedia :(



8
votes

Les fréquences informatiques du nom de la note sont faciles. Chaque demi-notes est 2 ^ (1/12) à partir de la note précédente, 440 Hz est A4.

Si, par une chance que vous soyez sous Windows, vous pouvez essayer cette pièce de code, qui joue une chanson via le haut-parleur PC: xxx

(Veuillez noter que je suis Utilisation de Python 3.x, vous devrez peut-être adapter une partie du code afin de l'utiliser sur Python 2.x.)

ho, à la manière, j'ai utilisé abcdefg En tant que balance, mais vous trouverez sûrement le moyen d'utiliser h au lieu de b .


2 commentaires

NameError: Nom global 'Noms' n'est pas défini


Ooops, désolé. C'est ce qui se passe lorsque vous n'allez pas votre séance de python avant de tester. Corrigé maintenant!



3
votes

Une option extérieure est Jfugue comme montré ici (avec groovy). Notez que vous utiliseriez Jython au lieu de Python, ce qui, espérons-le, est dans la limite de réponse.


0 commentaires

1
votes

Voici le même programme que @Adrien Plisson, mais pour MacOS:

import math
import time
import pygame
import numpy

sampleRate = 44100
freq = 440

labels = ['a','a#','b','c','c#','d','d#','e','f','f#','g','g#']

name   = lambda n: labels[n%len(labels)] + str(int((n+(9+4*12))/12))
# 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)

freq   = lambda n: int(440*(math.pow(2,1/12)**n))
# 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.

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

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

def play(song, tempo):
    for note in song.lower().split():
        if note in notes.keys():
            pygame.mixer.init(notes[note])
            arr = numpy.array([4096 * numpy.sin(2.0 * numpy.pi * notes[note] * x / sampleRate) for x in range(0, sampleRate)]).astype(numpy.int16)
            arr2 = numpy.c_[arr,arr]
            sound = pygame.sndarray.make_sound(arr2)
            sound.play(-1)
            pygame.time.delay(1000)
            sound.stop()
        else:
            time.sleep(period(tempo))
# play each note in sequence through the PC speaker at the given tempo

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 )
# "au clair de la lune"!! 'r' is a rest


0 commentaires