Music21で作成した音楽からリアルタイムオーディオ出力を作成するにはどうすればよいですか?それで、Music21で作った音楽のオーディオ出力は、どのようにしてオープンソースソフトウェアで作ることができますか?助けてくれてありがとう。Music21で作成された音楽からリアルタイムオーディオ出力を作成するにはどうすればよいですか?
5
A
答えて
6
ここに私が知ったことがあります。ここにWindows XPで動作するPythonスクリプトがあります。 music21に加えて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は、音楽再生システムになるように設計されていないが、それは他の再生システム内に埋め込まれるように設計されてか、システム内からそれらを呼び出すこと。私たちは再生システムに多すぎる仕事をするつもりはありません(ハードウェアのサポート、小さな研究室なので、音楽分析などには依然として作業が必要です)が、あなたのソリューションは非常にエレガントですmusic21.midi.realtimeモジュールとしてmusic21(post v1.1)のすべてのバージョンに含まれています。
# 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()関数でもできます。ここでは、動的にmicrotonal再生(ほとんどのMIDI再生のための大きな問題を)をシミュレートするために、異なるピッチベンドオブジェクトとMIDIチャンネルを割り当てるmusic21の能力を取る例です。 busyFunctionとbusyArgsとbusyWaitMillisecondsの引数をとります。ほとんどの場合busyWaitMillisecondsごとに引数を指定して呼び出す関数を指定します(システムの速度が遅い場合はさらに多くなる可能性があります)。何らかの種類のスレッド再生を設定したい場合に備えて、最後に呼び出されるendFunctionとendArgsもあります。 - Myke Cuthbert(音楽21作成者)
関連する問題
- 1. ActionScript3では、XML音楽プレーヤーを作成するにはどうすればよいですか?
- 2. アンドロイドの音楽プレーヤーのサムネイル再生リストを作成するにはどうすればよいですか?
- 3. 動的に作成された 'el'でバックボーンビューを作成するにはどうすればよいですか?
- 4. フィールドセットなしでformtasticネストされた入力を作成するにはどうすればよいですか?
- 5. スクラッチで作成されたリストからアイテムを選択するにはどうすればよいですか?
- 6. このようなJSON出力を作成するにはどうすればよいですか?
- 7. 別のクラスで作成されたNSMutableArrayを呼び出すにはどうすればよいですか?
- 8. ウェブサービスアプリの作成にはどうすればよいですか?
- 9. 音楽ウィジェットでfacebookにgrooveshark音楽URLを共有するにはどうすればいいですか?
- 10. 計算されたフィルタリングされたプロパティを作成するにはどうすればよいですか?
- 11. C#で単純な音波を合成して出力するにはどうすればよいですか?
- 12. 生成された地形図のカラーマップを作成するにはどうすればよいですか?
- 13. webpack出力ディレクトリの内容でtar.gzファイルを作成するにはどうすればよいですか?
- 14. WPFで中心から外れたPerspectiveCameraを作成するにはどうすればよいですか?
- 15. 親フラグメントからネストされたフラグメントのビューを作成するにはどうすればいいですか?
- 16. 出力ファイルに行を作成するにはどうすればよいですか?
- 17. ラベルと交差するときにボタンが押された後に作成されたピクチャボックスを作成するにはどうすればよいですか?
- 18. Javaサーブレットでasp.netで作成されたCookieを取得するにはどうすればよいですか?
- 19. マップビューで入力ダイアログまたは日付ピッカーを作成するにはどうすればよいですか?
- 20. JQueryでserializeArrayで作成された値にアクセスするにはどうすればよいですか?
- 21. Interface Builderで作成されたNSTableViewにプログラムでアクセスするにはどうすればよいですか?
- 22. 合成WMを作成するにはどうすればいいですか?
- 23. bash出力のリダイレクトの省略形を作成するにはどうすればよいですか?
- 24. シンプルなJScript入出力プログラムを作成するにはどうすればよいですか?
- 25. Powershell:system.objectの出力用の関数を作成するにはどうすればよいですか?
- 26. Javaでハッシュテーブルを作成するにはどうすればよいですか?
- 27. Androidでカスタムコントロールを作成するにはどうすればよいですか?
- 28. Webでスピナーを作成するにはどうすればよいですか?
- 29. Deviseでユーザープロファイルを作成するにはどうすればよいですか?
- 30. Androidでカスタムコンテナビューを作成するにはどうすればよいですか?
あなたの質問はむしろあいまいです。何が問題なのですか?また、[docs](http://mit.edu/music21/doc/html/contents.html)を持っていますか? –