2009-12-27 4 views
7

मैं उलझन में हूं क्योंकि बहुत सारे कार्यक्रम हैं। लेकिन मैं ऐसा कुछ देख रहा हूं। मैं "ए 4 सी 3 एच 3 ए 2" इत्यादि की तरह एक संगीत टाइप करूंगा और फिर मैं इसे सुनना चाहता हूं। क्या कोई जानता है कि मैं क्या देख रहा हूं? पहले से धन्यवादमैं एक संगीत कैसे बना सकता हूं? क्या कोई ध्वनि-मॉड्यूल है?

+0

"एच 3"? एच 3 के अलावा, आपका नोटेशन लिलीपॉन्ड द्वारा उपयोग की गई नोटेशन जैसा दिखता है। लिलीपॉन्ड-टू-ऑडियो या लिलीपॉन्ड-टू-मिडी ऐप की तलाश करें। –

+3

आह, स्थान: बर्लिन। जैसा कि मुझे संदेह था। @Ewan: जर्मन संगीत नोटेशन में, यह "cdefgah" है। "एच" के बजाय (अंग्रेजी/अंतर्राष्ट्रीय) "बी"। –

+1

नाइटपिक: जैसा कि मैं इसे समझता हूं, "एच" वास्तव में हम बी फ्लैट कहते हैं - बी (प्राकृतिक) अभी भी बी है। संगीतकार बाच अपने नामों में से एक में अपने नाम को एन्कोड करने के लिए इसका उपयोग करने में सक्षम था। –

उत्तर

7

नोट नाम से कंप्यूटिंग आवृत्तियों आसान है। प्रत्येक अर्ध-नोट पिछले नोट से 2^(1/12) दूर है, 440 हर्ट्ज ए 4 है।

यदि कोई संयोग से आप खिड़कियों पर कर रहे हैं, तो आप कोड के इस टुकड़े, जो पीसी स्पीकर के माध्यम से एक गाना निभाता कोशिश कर सकते हैं:

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 पर इसका इस्तेमाल करने)

हो वैसे में कोड का कुछ हिस्सा अनुकूल करने के लिए आवश्यकता हो सकती है, मैं पैमाने के रूप में abcdefg इस्तेमाल किया है, लेकिन आप निश्चित रूप से जिस तरह से करने के बजाय h उपयोग करने के लिए मिल जाएगा b

+0

नाम त्रुटि: वैश्विक नाम 'नाम' परिभाषित नहीं किया गया है – kame

+0

ओओप्स, क्षमा करें। ऐसा तब होता है जब आप अपना नहीं साफ़ करते परीक्षण से पहले पायथन सत्र। अब सही! –

2

आप किसी भी पुस्तकालय है कि मिडी उत्पादन का उत्पादन, .net के मामले में इस्तेमाल कर सकते हैं मैं Microsoft से स्टीफन Toub द्वारा बनाई गई एक सलाह देते हैं (जहां मैं यह मिल गया नहीं मिल सकता है, लेकिन के लिए गूगल यह।)

1

इसे देखें: http://www.algorithm.co.il/blogs/index.php/pytuner/ यह एक बहुत ही समान प्रोजेक्ट है और यह एक बहुत ही सभ्य संदर्भ जैसा दिखता है।

+0

मुझे पाइमेडिया स्थापित करने में परेशानी है :( – kame

3

एक बाहरी विकल्प JFugueshown here (ग्रोवी के साथ) के रूप में है। ध्यान दें कि आप पाइथन के बजाय Jython का उपयोग करेंगे, जो उम्मीद है कि उत्तर के रूप में सीमा के भीतर है।

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