我对Pyhton世界很陌生。我实际上在做音乐,我用了一个叫Ableton的软件。
我所做的是为这个软件编写两个脚本。
事实上,它们在Ableton GUI中是可选择的。每个脚本都链接到一个硬件接口。这些脚本所做的是允许我定制硬件接口控制软件的方式(Ableton)。我的2脚本很好,但是我希望能够从一个脚本发送订单到另一个脚本(允许在第二个控制器的按钮被按下时在第一个控制器上执行一个操作)。
所以我有2个独立的文件夹和2个脚本(我不能同时使用一个文件夹,因为Ableton必须独立运行和压缩这两个脚本)。让我们称它们为文件夹A、和文件夹B。
在这两个文件夹中,我都有一个__init__.py和一个main_code.py文件。
main_code.py文件如下所示:
from __future__ import with_statement
from _Framework.ControlSurface import ControlSurface
import Live
import time
class main_code(ControlSurface):
def __init__(self, c_instance):
ControlSurface.__init__(self, c_instance)
with self.component_guard():
self._suppress_send_midi = True
self.clip = self.selected_scene.clip_slots[self.selected_track_idx].clip
self._suppress_send_midi = False
@property
def selected_track(self):
return self.song().view.selected_track
@property
def selected_track_idx(self):
return self.tuple_idx(self.song().tracks, self.song().view.selected_track)
@property
def selected_scene(self):
return self.song().view.selected_scene
def tuple_idx(self, tuple, obj):
for i in xrange(0, len(tuple)):
if (tuple[i] == obj):
return i
return(False)如您所见,我使用了一些框架(ControlSurface)和ableton (导入Live)。我想要做的是“发送”变量self.clip从一个脚本到另一个脚本,以便他们都有相同的“值”对不起,但我现在不再是一个方法或任何事情。我的第一个想法是在一个文件中使用泡菜来哑self.clip,然后在另一个文件中加载它,但是当我这样做时,我得到了ableton报告崩溃中的错误:
文件"/Users/versonator/Jenkins/live/Projects/AppWebConnector/Resources/third_party/lib/pickle.py",第1362行,转储
9250 ms。文件"/Users/versonator/Jenkins/live/Projects/AppWebConnector/Resources/third_party/lib/pickle.py",RemoteScriptError第224行,在转储中
9250 ms。"/Users/versonator/Jenkins/live/Projects/AppWebConnector/Resources/third_party/lib/pickle.py",RemoteScriptError:文件RemoteScriptError行306号,保存
9251 ms.RemoteScriptError: RuntimeError 9251 ms.RemoteScriptError::9251 ms。RemoteScriptError:未启用(http://www.boost.org/libs/python/doc/v2/pickle.html) 9251 ms对"Clip.Clip“实例进行筛选。RemoteScriptError:
实际上我用的是像这样的泡菜:
clip = self.clip
f = open('/Users/Louis/Desktop/test.pickle', 'wb')
pickle.dump(clip, f, -1)
f.close() 甚至我根本不是一个程序员,这看起来像一个真正的混乱,我希望有人能帮助我找到另一种方式来做我想做的,或解决我的泡菜方式!
发布于 2015-11-11 16:59:16
让我们假设您使用Ableton调用脚本B.py,它需要从脚本A.py的脚本A.py到脚本B.py的顶部,后者需要self.clip编写:
import sys
sys.path.append('\path\to\script\A\')
# You should now be able to import every class from script A
# and use its methods and functions. 例如:
B.py
from A import main_code
mc = main_code(c_instance) # Don't know what c_instance is or where it comes from,
# but i guess you will :)
mc.selected_track()..。诸若此类
您可能需要在脚本A所在的目录中创建一个名为__init__.py的文件,以便使该文件夹成为可由其他脚本导入的python包。
如果您需要来自self.clip的A.py,您可以执行如下操作:
mc = main_code(c_instance)
clip = mc.clip或者您可以在A.py中创建一个函数,该函数返回self.clip:
A.py
class main__code(ControlSurface):
def __init__(self, c_instance):
ControlSurface.__init__(self, c_instance)
with self.component_guard():
self._suppress_send_midi = True
self.clip = self.selected_scene.clip_slots[self.selected_track_idx].clip
self._suppress_send_midi = False
...
def getClip(self):
return self.clip注意:您需要检查self.clip是否在A.py中更改,如果更改了,则在B.py中更新剪辑。
希望这能有所帮助
https://stackoverflow.com/questions/33652099
复制相似问题