2013-10-29 34 views
5

我正在研究将吉他和弦转换为班卓琴和弦的应用程序,并且在构建对象时,我还想制作一种音频“打印语句“这很快发挥了我选中/书写的和弦。在蟒蛇中从频率,和弦播放流式音效

我发现自己非常困惑于如何在没有某种混合工作的情况下使用Python同时播放多个声音,或者包含所有pygame或写入文件。

我正在寻找的东西,可以...

  1. 采取频率 - 就像440产生A,880来产生的,一个八度---作为一个迭代
  2. 无需写入磁盘即可播放,也可以通过MIDI设备播放。

我已经制定功能,可以从烦恼到的频率,给仪器调弦转换,并在这些基础,我想说:

fretboard.play([440, 880]) 

,听到提示音。或者如果我可以指定时间...

fretboard.play([(440,1), (880,1)]) 

要同时听到每一秒钟。

简单地得到这种声音的最佳方法是什么,并希望如果我想创建一些原始旋律,让我可以对其中的几个进行排序?

此外,如果这仅仅是一种完全不同的编程,并且如果它看起来像我的问题是天真的(“嘿mittenchops,你需要了解更多关于渠道!”),请让我知道,特别是如果你可以指导我获得良好的学习资源。

回答

1

在早期寻找Python的声音分析的同时,我偶然发现了这个网站PythonInMusic,它有很多Python的音乐软件链接。

回过头来看,我认为我会尝试用来实时输出midi音符的第一件事叫做PyFluidSynth。这是一个Python的midi合成器。以下是他们网站的一些示例代码:

import time 
import fluidsynth 

fs = fluidsynth.Synth() 
fs.start() 

sfid = fs.sfload("example.sf2") 
fs.program_select(0, sfid, 0, 0) 

fs.noteon(0, 60, 30) 
fs.noteon(0, 67, 30) 
fs.noteon(0, 76, 30) 

time.sleep(1.0) 

fs.noteoff(0, 60) 
fs.noteoff(0, 67) 
fs.noteoff(0, 76) 

time.sleep(1.0) 

fs.delete() 

希望能帮助您指出正确的方向!

+1

酷,谢谢!这是一个死了的项目还是什么?我成功下载并安装了它,然而,即使按照从https://code.google复制的示例进行操作。COM/P/pyfluidsynth /,我得到 ''' 进口时间 进口fluidsynth FS = fluidsynth.Synth(): 回溯(最近通话最后一个): 文件 “”,1号线,在 AttributeError的:“模块”对象有没有属性“合成器” ''' – Mittenchops

+1

你需要确保你已经安装FluidSynth太(不只是PyFluidSynth) 下面是一篇文章的链接如何做到这一点在Windows :http://stackoverflow.com/questions/5783913/python-synthesize-midi-with-fluidsynth 一个d在Linux/OSX上更新它的链接(因为在“需求”部分下列出了一个:http://sourceforge.net/apps/trac/fluidsynth/ – user1475777

+0

这些是MIDI音符,但不是频率。尝试将任意频率转换为MIDI音符数字会产生'ArgumentError:参数3::错误类型' – endolith

1

如果你在窗户上,你可以使用旧控制台上使用的方法来同时播放多个音符 - 而不是同时播放例如C,E和G, C然后E然后G非常快,可能会保持在最后的音符(最好是补品)。这给出了和弦的效果,但如果你想演示吉他或班卓琴上不同的和弦声音(包括不同方式演奏相同和弦之间的差异),它可能不够好。但是,这种方法是可行的(至少在Windows上),而不使用标准库之外的任何东西。

示例代码:

import winsound 
import time 

def chord(root_frequency): 
winsound.Beep(int(root_frequency), 60) 
winsound.Beep(int(root_frequency*1.25), 60) 
winsound.Beep(int(root_frequency*1.5), 60) 
winsound.Beep(int(root_frequency*2), 100) 

while True: 
    chord(261.626) 
    time.sleep(0.35) 
    chord(261.626) 
    time.sleep(0.05) 
    chord(233.082) 
    time.sleep(0.35) 
    chord(233.082) 
    time.sleep(0.05) 
    chord(207.652) 
    time.sleep(0.35) 
    chord(207.652) 
    time.sleep(0.05) 
    chord(195.998) 
    time.sleep(0.35) 
    chord(195.998) 
    time.sleep(0.05)