Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将HoloViews VLine与PyViz Panel audio.time同步_Python_Audio_Holoviews_Pyviz_Panel Pyviz - Fatal编程技术网

Python 将HoloViews VLine与PyViz Panel audio.time同步

Python 将HoloViews VLine与PyViz Panel audio.time同步,python,audio,holoviews,pyviz,panel-pyviz,Python,Audio,Holoviews,Pyviz,Panel Pyviz,我想在HoloViews图中显示当前音频在图形中的位置。当PyViz的pn.pane.Audio.time值更改时(当播放音频或Audio.time更改时),此行应自动更新 我的尝试: JupyterLab中的Python 3.7 将numpy作为np导入 将全息视图导入为hv#交互式绘图 高压笔记本_扩展(“bokeh”) 作为pn导入面板 请注意:扩展部分() 从holoviews.streams导入流,参数 #创造声音 sps=每秒44100个样本 持续时间=10#持续时间(秒) 调制器_

我想在HoloViews图中显示当前音频在图形中的位置。当PyViz的
pn.pane.Audio.time
值更改时(当播放音频或
Audio.time
更改时),此行应自动更新

我的尝试: JupyterLab中的Python 3.7 将numpy作为np导入 将全息视图导入为hv#交互式绘图 高压笔记本_扩展(“bokeh”) 作为pn导入面板 请注意:扩展部分() 从holoviews.streams导入流,参数 #创造声音 sps=每秒44100个样本 持续时间=10#持续时间(秒) 调制器_频率=2.0 载波频率=120.0 调制指数=2.0 时间=np.arange(sps*持续时间)/sps 调制器=np.sin(2.0*np.pi*调制器频率*时间)*调制指数 载波=np.sin(2.0*np.pi*载波频率*时间) 波形=np.sin(2.*np.pi*(载波频率*时间+调制器)) 波形=波形*0.3 波形int=np.int16(波形int*32767) #PyViz面板的音频小部件,用于播放声音 音频=pn.pane.audio(波形整数,采样率=sps)
#生成的绘图数据
x=np.arange(11.0)
y=np.arange(11.0,0.0,-1)/10
y[0::2]*=-1#交替正负
#全息线图
线图=高压曲线((x,y)).opts(宽度=500)
#应记录音频、时间;不起作用
Time=Stream.define('Time',t=param.Number(默认值=0.0,doc='A Time参数'))
时间=时间(t=音频时间)
#时间值更改时绘制线的回调
def交互式_播放(t):
返回hv.VLine(t.opts)(颜色为绿色)
#当前音频时间线的动态地图绘制
dmap\u time=hv.DynamicMap(交互式播放,流=[time])
#显示音频窗格
显示器(音频)
#将绘图与音频流相结合。时间
测线图*dmap\U时间
为什么这不起作用? 由于时间被设置为
参数号()
,我希望它能跟踪
音频.time
。因此,在播放音频时,应不断调用对
interactive_play()
的回调,从而导致一条线在绘图上移动。 这不会发生,并且该行仅保持默认值0.0(或任何其他值
audio.time
在代码执行时的值)

如何更新
VLine
以保持跟踪
音频.time

绿线应与音频窗格的时间相匹配

由于time被设置为param.Number(),我希望它能够跟踪audio.time

在您的示例中,您没有以任何方式将Panel Audio对象链接到流。当你这样做时,你所做的一切:

time = Time(t=audio.time)
时间
流的初始值设置为音频窗格的当前值
audio.time
不是对参数的引用,它只是该参数的当前值

HoloViews DynamicMaps支持侦听其他对象上的参数已有相当一段时间了。有两种主要的方法来实现这一点,或者通过这样做:

@pn.depends(t=audio.param.time)
def interactive_play(t):
    return hv.VLine(t).opts(color='green')

dmap_time = hv.DynamicMap(interactive_play)
在这里,您将使用对
audio.time
参数的依赖性来装饰
interactive_play
函数,因此每当它更改DynamicMap时,就会更新它。更明确的方法是这样做,以及内部实际发生的情况是:

from holoviews.streams import Params

def interactive_play(t):
    return hv.VLine(t).opts(color='green')

stream = Params(parameters=[audio.param.time], rename={'time': 't'})
dmap_time = hv.DynamicMap(interactive_play, streams=[stream])

如果您需要使用新文件更新音频窗格,我强烈建议您使用回调,而不是使用交互或反应式API不断创建新的音频窗格。这样,您也不必将流更新为不断变化的音频窗格。

它可以工作,谢谢!更新现有的音频窗格确实听起来更好。如何更新此窗格中的音频?类似于
audio.object=waveform\u int)
(如果更改某些值以生成
waveform\u int
)的内容不起作用。