饲料流。写入()提前

2024-04-24 23:49:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将我为Android编写的节拍器翻译成Python,用于经典的桌面机器。你知道吗

在Android系统下,缓冲区是2s长的,并且总是充满的,这意味着它是2s防滞后的。 在Python和Pyaudio中,我做了一些类似的事情(4拍条):

bar = 0
while self.isRunning:
    stream.write(beat[bar])
    print("beat {} was read".format(bar)
    bar += 1
    bar %= 4

请看:

*sound of beat[0] is played*
beat 0 was read
*sound of beat[1] is played*
beat 1 was read
...

PyAudio正在等待其缓冲区变空,然后才能恢复。我所理解的“封锁”方式。你知道吗

相反,我希望看到(在Android中)

*sound of beat[0] is played*
beat 0 was read
beat 1 was read
beat 2 was read
*sound of beat[1] is played*
beat 3 was read
*sound of beat[2] is played*
beat 3 was read

BPM为120意味着流总是有一个2秒的缓冲区可以读取。你知道吗

我的问题是:在读取的同时,是否有任何方法来馈送缓冲区? 当我在一个虚拟机上用蹩脚的硬件主机试用节拍器时,第一个节拍器的节拍就慢了,这让我很担心。。。你知道吗

我不确定回调方法是否允许这样做,因为我需要根据我在结构(我的节拍器处理复杂结构)和条中的位置来播放特定的声音,所以实现起来会很痛苦。你知道吗


Tags: of方法readisbar结构桌面android
1条回答
网友
1楼 · 发布于 2024-04-24 23:49:58

您可以使用Python线程(来自threading模块)来实现这一点,但是只使用回调API(它将为您创建一个单独的音频线程)更有意义。你知道吗

可以使用Queue实现缓冲。你知道吗

我刚刚为sounddevice模块创建了一个example program,它展示了如何做到这一点。你知道吗

相关问题 更多 >