You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter Notebook中如何连续播放实时生成的numpy音频数组?

问题解决方案:Jupyter Notebook循环播放numpy格式音频数组

原代码失效原因

原代码仅在循环内创建了IPython.display.Audio实例,没有主动触发Jupyter Notebook的输出渲染流程,因此不会产生任何播放行为。

可行解决方案

方案1:修正IPython原生调用(无需额外安装依赖)

在循环内主动调用display方法渲染音频对象即可生效,代码示例:

import numpy as np
import IPython.display as ipd
from IPython.display import display

sr = 22000
three_songs = np.array([[0,1,0,1,1,1,1,0,0,0,],[1,0,0,0,1,0,1,0,1,0,],[0,0,0,0,0,1,0,0,0,0,]])

for song in three_songs:
    display(ipd.Audio(song, rate=sr, autoplay=True))

注意:当前多数浏览器会阻止无用户交互的自动音频播放,运行代码前点击一次Notebook空白区域触发交互即可正常播放


方案2:底层系统音频调用(更适合动态生成音频的场景)

使用sounddevice库直接调用系统音频接口播放,完全绕过Jupyter前端限制,延迟更低,适配你每隔5-10秒生成新音频数组的场景:

  • 首先安装依赖:pip install sounddevice
  • 播放代码示例:
import numpy as np
import sounddevice as sd

sr = 22000
three_songs = np.array([[0,1,0,1,1,1,1,0,0,0,],[1,0,0,0,1,0,1,0,1,0,],[0,0,0,0,0,1,0,0,0,0,]])

for song in three_songs:
    sd.play(song, samplerate=sr)
    sd.wait() # 等待当前音频播放完成再执行后续逻辑,避免多段音频重叠

如果是异步生成音频的场景,不需要等前一段播完再生成下一段,可以单独维护一个播放队列,生成新数组后直接加入队列即可连续播放。


方案3:预合并数组播放(适合所有音频数组已提前生成的场景)

如果所有音频片段都已经生成完成,直接拼接成完整数组后一次播放即可:

import numpy as np
import IPython.display as ipd

sr = 22000
three_songs = np.array([[0,1,0,1,1,1,1,0,0,0,],[1,0,0,0,1,0,1,0,1,0,],[0,0,0,0,0,1,0,0,0,0,]])

full_audio = np.concatenate(three_songs)
ipd.Audio(full_audio, rate=sr)

内容的提问来源于stack exchange,提问作者Michael Korn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 11:06:02