python - 如何在python中更新画布图形的一部分
问题描述
我想在播放声音时更新 tkinter 中的画布图形以可视化正在播放的声音部分。为此,我使用了 self.figure.canvas.draw() 和随后的 self.figure.canvas.flush_events()。但是,这还不够快,导致声音结结巴巴。
有没有人想更新更快的数字,这样声音就不会断断续续?也许只更新线而不是整个图。
我使用的功能如下所述。我用一个按钮来播放和暂停信号。当单击播放按钮时,while 循环开始,直到再次单击它。
def play(self, offset_seconds=0., duration_seconds=120., loop=False):
if duration_seconds > 0.:
total_chunks = int((duration_seconds * self.sample_frequency_Hz) / self.chunk)
while self.button_play["text"] == 'Pause sound':
self.index = 0
self.wf.rewind()
# skip first x seconds for debugging purposes
self.wf.readframes(int(self.sample_frequency_Hz*offset_seconds))
# Read data in chunks
data = [0,0,0]
# Play the sound by writing the audio data to the stream
while (data != '') and (self.button_play["text"] == 'Pause sound'):
self.movingline_audio[0].set_xdata([offset_seconds + self.index * self.chunk / self.sample_frequency_Hz, offset_seconds + self.index * self.chunk / self.sample_frequency_Hz])
self.stream.write(self.wf.readframes(self.chunk))
self.index = self.index + 1
self.figure_4.canvas.draw()
self.figure_4.canvas.flush_events()
if self.index > total_chunks:
print('einde')
break
if loop == False:
break
self.button_play["text"] = 'Play sound'
解决方案
推荐阅读
- excel - 使用 DataFrames 每天将数据记录到 Excel 中
- python - 期望从视图返回一个 `Response`、`HttpResponse` 或 `HttpStreamingResponse`,但收到了一个`
` - ruby-on-rails - 如何使用 Ruby 将 csv 文件的内容写入电子邮件?
- javascript - 如何在 webdriverio 中编写自定义命令
- jupyter-notebook - 如何在 Jupyter 笔记本中运行命令?
- c++ - 一种避免 pgm_read 访问闪存的方法(avr 微控制器)
- c++ - 我在使用 Code::blocks 上的编译器标志时遇到问题。编程初学者
- arrays - VBA,有没有办法检查一个值是否等于数组中的任何值?
- javascript - 有没有办法处理css、html中的宽度和高度问题?
- javascript - 如何从响应体中获取深度嵌套的数据进入状态