用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

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(square,note=d4)
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,注=e2,截止攻击=8,释放=8)
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

http://joearms.github.io/2016/01/29/使用OSC消息控制声音.html

….



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Android上使用BroadcastReceiver从Java报警执行本机代码   解析模板[]时发生java错误,模板可能不存在,或者任何已配置的模板解析程序都无法访问该模板   从命令行创建Java包的正确方法是什么?(与Maven的麻烦)   带有日期参数的java时区和MessageFormat   Java返回一个新数组,其中包含数组参数元素的平方   带有可选右括号的java年正则表达式   writeCharacteristic Android上的java空指针异常   在ScheduledThreadPoolExecutor中重写泛型方法的java问题   java如何在从两个不同的组合框中选择两个元素时生成通知?   java试图在正则表达式中捕获多个组,同时跳过其他组   Jasper报告中的java动态图像大小   JavaFX(带FXML)MVC:模型使用控制器   我们可以用java回滚文件mkdir吗?   java Android,无效双:“空白”字段使程序崩溃   java JSoup解析结构不良的HTML   java Jackson:(反)序列化程序和StdConverter之间有什么区别?   Crudepository(spring boot)中自定义方法的java问题