2012-06-11 15 views
5

मैं संगीत 21 के साथ संगीत से रीयल-टाइम ऑडियो आउटपुट कैसे बना सकता हूं। यह असफल रहा, मैं ओपन-सोर्स सॉफ्टवेयर के माध्यम से संगीत 21 के साथ किए गए संगीत से किसी भी ऑडियो आउटपुट का उत्पादन कैसे कर सकता हूं? सहायता के लिए धन्यवाद।मैं संगीत 21 के साथ संगीत से रीयल-टाइम ऑडियो आउटपुट कैसे उत्पन्न कर सकता हूं?

+0

आपका प्रश्न अस्पष्ट है। वास्तव में समस्या क्या है? साथ ही, क्या आप [दस्तावेज़ पढ़ें] (http://mit.edu/music21/doc/html/contents.html)? –

उत्तर

6

तो यहां मुझे जो पता चला है। यहां एक पाइथन स्क्रिप्ट है जो विंडोज एक्सपी पर काम करती है। संगीत 21 के अलावा इसे pygame की जरूरत है।

# 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 
8

आप देखा है के रूप में, music21 एक संगीत प्लेबैक प्रणाली होने के लिए नहीं बनाया गया है, लेकिन यह अन्य प्लेबैक प्रणालियों के भीतर एम्बेड करने के लिए या उन्हें प्रणाली के भीतर से कॉल करने के लिए बनाया गया है। हम प्लेबैक सिस्टम में बहुत अधिक काम करने की योजना नहीं बना रहे हैं (हार्डवेयर समर्थन के कारण, हमारी एक छोटी शोध प्रयोगशाला, संगीत विश्लेषण पर अभी भी काम करने की आवश्यकता है), लेकिन आपका समाधान इतना सुरुचिपूर्ण है कि यह अब संगीत 21 (पोस्ट v1.1) के सभी संस्करणों में music21.midi.realtime मॉड्यूल के रूप में शामिल है।

# 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() 

StreamPlayer के .play() फ़ंक्शन कर सकते हैं भी: यहाँ एक उदाहरण है कि music21 की तेज़ी से आदेश microtonal प्लेबैक (सबसे मिडी प्लेबैक के लिए एक बड़ी समस्या) अनुकरण करने के लिए अलग-अलग पिच-मोड़ वस्तुओं के साथ मिडी चैनलों आवंटित करने की क्षमता ले जाता है व्यस्त रहें फ़ंक्शन और व्यस्तआर्ग और व्यस्त WaitMilliseconds तर्क जो प्रत्येक व्यस्त WaitMilliseconds पर तर्क के साथ कॉल करने के लिए एक फ़ंक्शन निर्दिष्ट करते हैं (यदि आपका सिस्टम धीमा हो तो अधिक हो सकता है)। यदि आप किसी प्रकार के थ्रेडेड प्लेबैक को सेट करना चाहते हैं तो अंत में एक एंडफंक्शन और एंडअर्ग भी कहा जाएगा। - मायके कुथबर्ट (संगीत 21 निर्माता)

संबंधित मुद्दे