¿Cómo puedo producir salida de audio en tiempo real a partir de música hecha con Music21. En su defecto, ¿cómo puedo producir CUALQUIER salida de audio de música hecha con Music21 a través de software de código abierto? Gracias por la ayuda.¿Cómo puedo producir una salida de audio en tiempo real a partir de la música hecha con Music21?
Respuesta
Así que esto es lo que descubrí. Aquí hay un script de Python que funciona en Windows XP. Necesita pygame además de music21.
# genPlayM21Score.py Generates and Plays 2 Music21 Scores "on the fly".
#
# see way below for source notes
from music21 import *
# we create the music21 Bottom Part, and do this explicitly, one object at a time.
n1 = note.Note('e4')
n1.duration.type = 'whole'
n2 = note.Note('d4')
n2.duration.type = 'whole'
m1 = stream.Measure()
m2 = stream.Measure()
m1.append(n1)
m2.append(n2)
partLower = stream.Part()
partLower.append(m1)
partLower.append(m2)
# For the music21 Upper Part, we automate the note creation procedure
data1 = [('g4', 'quarter'), ('a4', 'quarter'), ('b4', 'quarter'), ('c#5', 'quarter')]
data2 = [('d5', 'whole')]
data = [data1, data2]
partUpper = stream.Part()
def makeUpperPart(data):
for mData in data:
m = stream.Measure()
for pitchName, durType in mData:
n = note.Note(pitchName)
n.duration.type = durType
m.append(n)
partUpper.append(m)
makeUpperPart(data)
# Now, we can add both Part objects into a music21 Score object.
sCadence = stream.Score()
sCadence.insert(0, partUpper)
sCadence.insert(0, partLower)
# Now, let's play the MIDI of the sCadence Score [from memory, ie no file write necessary] using pygame
import cStringIO
# for music21 <= v.1.2:
if hasattr(sCadence, 'midiFile'):
sCadence_mf = sCadence.midiFile
else: # for >= v.1.3:
sCadence_mf = midi.translate.streamToMidiFile(sCadence)
sCadence_mStr = sCadence_mf.writestr()
sCadence_mStrFile = cStringIO.StringIO(sCadence_mStr)
import pygame
freq = 44100 # audio CD quality
bitsize = -16 # unsigned 16 bit
channels = 2 # 1 is mono, 2 is stereo
buffer = 1024 # number of samples
pygame.mixer.init(freq, bitsize, channels, buffer)
# optional volume 0 to 1.0
pygame.mixer.music.set_volume(0.8)
def play_music(music_file):
"""
stream music with mixer.music module in blocking manner
this will stream the sound from disk while playing
"""
clock = pygame.time.Clock()
try:
pygame.mixer.music.load(music_file)
print "Music file %s loaded!" % music_file
except pygame.error:
print "File %s not found! (%s)" % (music_file, pygame.get_error())
return
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
# check if playback has finished
clock.tick(30)
# play the midi file we just saved
play_music(sCadence_mStrFile)
#============================
# now let's make a new music21 Score by reversing the upperPart notes
data1.reverse()
data2 = [('d5', 'whole')]
data = [data1, data2]
partUpper = stream.Part()
makeUpperPart(data)
sCadence2 = stream.Score()
sCadence2.insert(0, partUpper)
sCadence2.insert(0, partLower)
# now let's play the new Score
sCadence2_mf = sCadence2.midiFile
sCadence2_mStr = sCadence2_mf.writestr()
sCadence2_mStrFile = cStringIO.StringIO(sCadence2_mStr)
play_music(sCadence2_mStrFile)
## SOURCE NOTES
## There are 3 sources for this mashup:
# 1. Source for the Music21 Score Creation http://web.mit.edu/music21/doc/html/quickStart.html#creating-notes-measures-parts-and-scores
# 2. Source for the Music21 MidiFile Class Behaviour http://mit.edu/music21/doc/html/moduleMidiBase.html?highlight=midifile#music21.midi.base.MidiFile
# 3. Source for the pygame player: http://www.daniweb.com/software-development/python/code/216979/embed-and-play-midi-music-in-your-code-python
Como hemos visto, music21 no está diseñado para ser un sistema de reproducción de música, pero está diseñado para ser integrado dentro de otros sistemas de reproducción o para llamarlos desde dentro del sistema. No estamos planeando poner demasiado trabajo en los sistemas de reproducción (debido al soporte de hardware, nuestro pequeño laboratorio de investigación, el trabajo que aún debe realizarse en el análisis musical, etc.), pero su solución es tan elegante que ahora está incluido en todas las versiones de music21 (post v1.1) como el módulo music21.midi.realtime. He aquí un ejemplo que tiene la capacidad de music21 para asignar dinámicamente canales MIDI con diferentes objetos de tono-bend con el fin de simular la reproducción microtonal (un problema importante para la mayoría de reproducción midi): función
# Set up a detuned piano
# (where each key has a random
# but consistent detuning from 30 cents flat to sharp)
# and play a Bach Chorale on it in real time.
from music21 import *
import random
keyDetune = []
for i in range(0, 127):
keyDetune.append(random.randint(-30, 30))
b = corpus.parse('bach/bwv66.6')
for n in b.flat.notes:
n.microtone = keyDetune[n.midi]
sp = midi.realtime.StreamPlayer(b)
sp.play()
.play de la StreamPlayer() puede también take busyFunction y busyArgs y busyWaitMilliseconds argumentos que especifican una función para llamar con argumentos como máximo cada busyWaitMilliseconds (podría ser más si su sistema es más lento). También hay un endFunction y endArgs que se llamarán al final, en caso de que desee configurar algún tipo de reproducción con subprocesos. - Myke Cuthbert (creador de Music21)
- 1. Cómo reproducir audio de una transmisión en tiempo real
- 2. ¿Grabar audio en tiempo real en java?
- 3. Visualizar la salida mathjax en tiempo real
- 4. entrada midi en tiempo real y sincronización con audio
- 5. Salida en tiempo real de NSTask
- 6. Procesamiento de audio en tiempo real en Android
- 7. Transmisión de video/audio en tiempo real (descarga no progresiva)
- 8. Conmutación de bucle de audio en tiempo real para iPhone
- 9. Análisis de audio en tiempo real en Linux
- 10. opciones para producir audio con GWT
- 11. ¿Cómo producir salida hexadecimal con formato boost ::?
- 12. Rieles: transmisión de salida en tiempo real en formato zip.
- 13. ¿Alguien tiene algún consejo sobre la programación de síntesis de audio en tiempo real?
- 14. ¿Cómo leer/escribir datos de audio en bruto en tiempo real (con python)?
- 15. ¿Cómo producir un tono y silencio con precisión de tiempo?
- 16. salida del proceso de impresión en tiempo real
- 17. Cómo asegurar la música cuando se transmite a través de la etiqueta de audio HTML5
- 18. Streaming Real time Audio
- 19. Desplazamiento de tono en tiempo real en el iPhone
- 20. ¿Cómo puedo producir un buen resultado de una matriz numpy?
- 21. ¿Puedo hacer una constante a partir de una variable env en tiempo de compilación en csharp?
- 22. ¿Cómo crear una matriz a partir de la salida de var_dump en PHP?
- 23. con xcode, ¿cómo definir macros de preprocesador a partir de la salida de un comando?
- 24. ¿Cómo programar un secuenciador de audio preciso en tiempo real en el iPhone?
- 25. Cómo vincular/sincronizar la animación a una grabación de video en tiempo real
- 26. Generar una imagen de forma de onda a partir de un archivo de audio
- 27. Grabación de audio en tiempo real desde una radio en línea
- 28. actualizar la variable de javascript con ajax en tiempo real
- 29. ¿Cómo redirigir desde la salida de audio a la entrada de micrófono usando PulseAudio?
- 30. ¿Cómo puedo redirigir la salida del comando "tiempo"?
Tu pregunta es bastante vaga. ¿Cuál es el problema exactamente? Además, ¿has [leído los documentos] (http://mit.edu/music21/doc/html/contents.html)? –