用sonic-pi或超级准直器编程音乐
python-sonic的Python项目详细描述
python sonic-使用python、sonic pi或supercallider编程音乐
================================================
python sonic目前与sonic pi一起工作。按照计划,它也会和超级对焦器一起工作。如果你喜欢,就用它。如果您有什么建议,请告诉我
(gkvoelkl@nelson games.de)。
安装
----
-首先您需要python 3(https://www.python.org,)-python 3.5
应该可以工作,因为这是一个开发环境
-然后是sonic pi(https://sonic-pi.net)-这个makes the sound
-modul python osc(https://pypi.python.org/pypi/python-osc)-
python和sonic pi服务器之间的连接
-和这个modul python sonic-简单地复制源代码
,或者尝试
$pip install python sonic
这应该有效。
——
-在与
python sonic一起使用之前,必须先启动*sonic pi*——只有c2到c6的注释
——
+—————————————————————————————————————————————————————————————————————————————||
+==+==+==+===+===+================================+
0.2.0 Sonic Pi 2.11的一些变化。更简单的多线程,在"线程"中使用
decorator*@使用*提示*和*同步*发送信息。|
+—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————这些例子的灵感来自于*sonic pi*
中的帮助菜单。代码::ipython3
来自psonic导入*
代码:ipython3
play(70)播放MIDI音符70
代码:ipython3
play(72)
sleep(1)
play(75)
sleep(1)
play(79)
代码:ipython3
play(c5)
sleep(0.5)
play(d5)
sleep(0.5)
play(g5)
play sharp notes like*f*or dimitshed notes like*eb*
代码:ipython3
play(fs5)
sleep(0.5)
play(eb5)
play louder(参数amp)或从不同方向(参数
pan)
代码:ipython3
play(72,amp=2)
sleep(0.5)
play(74,pan=-1)left
代码:ipython3
use_synth(saw)
play(38)
sleep(0.25)
play(50)
sleep(0.5)
use_synth(prophet)
play(57)
sleep(0.25)
代码:ipython3
播放(60,攻击=0.5,衰减=1,维持等级=0.4,维持=2,释放=0.5)
睡眠(4)
代码:ipython3
样本(Ambi_Lunar_Land,amp=0.5)
…代码:ipython3
代码:ipython3
代码::ipython3
代码:ipython3
sample(loop-amen,rate=-1)back
代码:ipython3
示例(鼓钹打开,攻击=0.01,持续=0.3,释放=0.1)
代码:ipython3
sample(loop_Amen,start=0.5,finish=0.8,rate=-0.2,attack=0.3,release=1)
代码::ipython3
范围内(5):
播放(随机。randrange(50,100))
睡眠(0.5)
代码::ipython3
代码:ipython3
来自psonic导入的*
u个数=8
对于范围(16)内的i:
s=随机。randrange(0,u个数)/u个数;样本从0.0开始,在1.0结束
f=s+(1.0/u个数)
样本(loop廑amen,beat廑stretch=2,start=s,finish=f)
睡眠(2.0/件数)
无限循环,如果
……代码::ipython3
while true:
如果一个键盘在(2)中:
采样(鼓槌重击)
睡眠(0.5)
否则:
采样(鼓槌关上)
睡眠(0.25)
:
回溯(最近一次通话时间)
<;ipython-input-18-d8759ac2d27e>;in<;module>;)
5其他:
6示例(鼓钹关闭)
----gt;7睡眠(0.25)
/mnt/jupyter/python sonic/psonic.py睡眠(持续时间)
587:返回:
588"
-->;589时间。睡眠(持续时间)
590_debug('sleep',持续时间)
591
>键盘中断:
如果一次要听到多个声音,请使用线程。
……代码::ipython3
import random
from psonic import*
from threading import thread
def bass_sound():
c=chord(e3,major7)
如果为真:
use_synth(prophet)
play(random.choice(c),release=0.6)
sleep(0.5)
def snare_sound():
当为真时:
采样(电子陷阱)
睡眠(1)
低音线程=线程(目标=低音声音)
陷阱线程=线程(目标=响弦声音)
低音线程.start()
陷阱线程.start()
当为真时:
通过
它自己的线程。
您可以听到它们在运行。
…代码::ipython3
psonic import*
threading import thread,condition
random import choice
def random riff(condition):
use_synth(prophet)
sc=scale(e3,minor)
为true:
s=random.choice([0.125,0.25,0.5])
条件:
条件.wait();等待消息
范围(8)内的i:
r=随机。选择([0.125,0.25,1,2])
n=随机。选择(sc)
co=随机。randint(30100)
播放(n,释放=r,截止=co)
休眠
def鼓(条件):
为真时:
条件:
条件:
条件.notifyAll();发送给线程的消息
对于范围(16)内的i:
r=随机。randrange(1,10)
样本(鼓低音硬,rate=r)
睡眠(0.125)
condition=condition()
随机线程=线程(name='consumer1',target=随机线程,args=(condition,))
鼓线程=线程(name='producer',target=鼓,args=(condition,))
random_riff_thread.start()
trums_thread.start()
输入("按回车键继续…")
……解析文本:
按回车键继续…
…解析文本:
'
同步线程,以便它们同时播放音符,
您可以使用*条件*。一个函数发送带有
*条件的消息。notifyall*另一个wai直到消息出现
*条件。等待*
代码::ipython3
来自psonic导入*
来自随机导入选项
@in_thread
def random_riff():
使用_synth(Prophet)
sc=scale(e3,minor)
而true:
s=random.choice([0.125,0.25,0.5])
tick.sync()
对于范围(8)内的i:
r=随机。选择([0.125,0.25,1,2])
n=随机。选择(sc)
co=随机。randint(30100)
play(n,release=r,截止=co)
睡眠
@in_thread
def drum s():
当为真时:
tick.cue()
对于i in range(16):
r=random.randrange(1,10)
样本(鼓声低音硬,rate=r)
睡眠(0.125)
解析文本:
按回车键继续…
…解析文本:
'
…代码::ipython3
来自psonic导入*
@in_thread
def metronom():
为真时:
tick.cue()
睡眠(1)
@in_thread
def instrument():
为真时:
tick.sync()
示例(鼓槌重击)
metronom()
instrument()
while true:
pass
play a list of notes
代码:ipython3
来自psonic导入*
play([64,67,71],amp=0.3)
sleep(1)
play([e4,g4,b4])
sleep(1)
play chords
代码:ipython3
play(和弦(E4,小调))
sleep(1)
play(和弦(E4,大调))
sleep(1)
play(和弦(E4,小调7))
sleep(1)
play(和弦(E4,小调7))
sleep(1)
play arpegios
代码:ipython3
播放模式(和弦(e4,'m7'))
播放模式(和弦(e4,'m7'),0.25)
播放模式(和弦(e4,'dim'),[0.25,0.5])
代码::ipython3
play_pattern_timed(音阶(c3,大调),0.125,release=0.1)
play_pattern_timed(音阶(c3,大调,num_octaves=2),0.125,release=0.1)
所以您可以使用列表方法或函数。例如,演奏琶音。代码:ipython3
import random
from psonic import*
解析文本:
[48、50、52、53、55、57、59、60]
……代码::ipython3
…代码:ipython3
play_pattern_timed(s,0.125,release=0.1)
random.shuffle
play_pattern_timed(s,0.125,release=0.1)
live loop
~当循环播放音乐时,您可以更改它并听到更改。让我们在python中试试,
也是。
…代码::ipython3
来自psonic导入*
来自线程导入线程目标=活套)
looper_thread.start()
输入("按回车键继续…")
……解析文本:
解析文本:
'y'
我的回路你能听到。代码::ipython3
def my_loop():
使用_synth(tb303)
播放(60,释放=0.3)
睡眠(0.25)
代码::ipython3
def my_loop():
使用_synth(tb303)
播放(和弦(e3,小调),释放=0.3)
睡眠(0.5)
代码::ipython3
def my_loop():
使用_synth(tb303)
采样(鼓低音硬,速率=随机。均匀(0.5,2))
播放(随机。选择(和弦(e3,小调)),释放=0.2,截止=随机。随机范围(60,130))
睡眠(0.25)
结束内核。在带内核的ipython中-->;
现在重新启动
代码::ipython3
psonic import*
threading import thread,condition
random import choice
def loop-foo():
play(e4,release=0.5)
sleep(0.5)
def loop-bar():
sample(drum-snare-soft)
sleep(1)
def live_loop_1(condition):
为真时:
有条件:
条件。notifyAll()向线程发送消息
loop_foo()
def live_loop_2(condition):
为真时:
有条件:
/>condition.wait()等待消息
loop_bar()
condition=condition()
live_thread_1=线程(name='producer',target=live_loop_1,args=(condition,))
live_thread_2=线程(name='consumer1',target=live_loop_2,args=(condition,)
live_thread_1.start()
live_thread_2.start()
输入("按回车键继续…")
……解析文本:
解析文本:
'y'
…代码::ipython3
def loop_foo():
play(a4,release=0.5)
sleep(0.5)
代码::ipython3
def loop_bar():
sample(鼓重踢)
sleep(0.125)
有了
停止事件,它就工作了。
…代码::ipython3
psonic import*
threading import thread,condition,event
def loop_foo():
play(e4,release=0.5)
sleep(0.5)
def loop_bar():
sample(drum_snare_soft)
sleep(1)
ef live_loop_1(condition,stop_event):
while not stop_event.is_set():
条件:
condition.notifyall()发送给线程的消息
loop_foo()
def live_loop_2(condition,stop_event):
while not stop_event.is_set():
条件:
condition.wait()等待消息
loop_bar()
condition=condition()
stop_event=event()
live_thread_1=thread(name='producer',target=live_loop_1,args=(condition,stop_event))
livehread_2=thread(name='consumer1',target=live_loop_2,args=(condition,stop_event))
live_thread_1.start()
live_thread_2.start()
input("按回车继续…")
解析文本:
解析文本:
'y'
…代码::ipython3
stop_event.set()
代码::ipython3
def loop\u foo():
play(下一个(sc),release=0.1)
sleep(0.125)
def loop\u bar():
使用六音合成器(dsaw)
play(next(sc2),release=0.25)
sleep(0.25)
操作
…代码::ipython3
import random
from psonic import*
from threading import thread,condition,event
def live-1():
pass
def live-3():
pass
def live-4():
pass
def live_loop_1(condition,stop_event):
非stop_event.is_set():
条件:
condition.notifyall();发送给线程的消息
live_1()
def live_loop_2(condition,stop_event):
非stop_event.is_set():
具有条件:
condition.wait();wait for message
live_2()
def live_loop_3(condition,stop_event):
while not stop_event.is_set():
具有条件:
condition.wait();wait消息
live_3()
def live_loop_4(condition,stop_event):
while not stop_event.is_set():
条件:
condition.wait();wait for message
live_4()
condition=condition()
stop_event=event()
live_thread_1=线程(name='producer',target=live_loop_1,args=(condition,stop_event))
live_thread_2=线程(name='consumer1',target=live_loop_2,args=(condition,stop_event))
live_thread_3=线程(name='consumer2',target=live_loop_3,args=(condition,stop_event))
live_thread_4=thread(name='consumer3',target=live_loop_3,args=(condition,stop_event))
live_thread_1.start()
live_thread_2.start()
live_thread_3.start()
live_thread_4.start()
input("按回车继续…")
解析文本:
解析文本:
'y'
启动循环后,您可以更改它们
…代码::ipython3
def live_1():
样本(bd_haus,amp=2)
睡眠(0.5)
通过
…代码::ipython3
def live嫒2():
示例(Ambi嫒u choir,rate=0.4)
睡眠(1)
通过
代码::ipython3
def live_3():
使用_synth(tb303)
播放(e2,释放=4,切断=120,切断攻击=1)
睡眠(4)
代码::ipython3
def live_4():
音符=音阶(e3,小调五音,数字八度=2)
对于音域(8)中的i:
播放(随机选择(音符),释放=0.1,amp=1.5)
睡眠(0.125)
然后停止。
代码::ipython3
stop\u event.set()
代码:ipython3
来自psonic导入*
synth(tri,note=d4,amp=0.4)
代码:ipython3
detune=0.7
synth(正方形,注释=e4)
synth(正方形,注释=e4+detune)
代码:ipython3
detune=0.1振幅整形
synth(正方形,注释=e2,释放=2)
synth(正方形,注释=e2+detune,amp=2,释放=2)
synth(gnoise,释放=2,amp=1,截止=60)
synth(gnoise,释放=0.5,amp=1,截止=100)
synth(噪声,释放=0.2,amp=1,截止=90)
下一步
~~~~~~~~~~
使用fx*尚未实施*
代码:ipython3
来自psonic import*
with fx(切片器):
synth(prophet,note=e2,release=8,cutoff=80)
synth(prophet,note=e2+4,release=8,cutoff=80)
代码:ipython3
synth(tb303,注=e3,截止攻击=4,释放=8)
synth(tb303,注=e4,截止攻击=2,释放=8)
osc com通信(声波3.x或更高版本)在Sonic PI版本3或更高版本中,您可以使用消息。代码::ipython3
代码::ipython3
run(""live_loop:foo do
使用实时
a,b,c=sync"/osc/trigger/prophet"
synth:prophet,注意:a,截止:b,sustain:c
结束"")
现在向sonic pi发送消息。
代码::ipython3
发送消息('/trigger/prophet',70,100,8)
…代码::ipython3
stop()
更多示例代码::ipython3
来自psonic导入*
…编码::ipython3
br/>地址:样品(鼓槌重击,pan=0.5)
sleep(0.25)
pi
http://joearms.github.io/2015/01/05/将erlang连接到sonic pi.html
….