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

Jupyter Notebook中实时播放自定义音符的Python实现需求问询

解决方案:Jupyter Notebook中实时播放动态生成的音符

步骤1:安装依赖库

你用的是Anaconda环境,直接打开Anaconda Prompt执行以下命令即可完成安装,无需复杂配置:

conda install numpy sounddevice -y

这两个库都是Anaconda官方维护的,不会出现第三方库常见的依赖冲突问题,适合命令行操作不熟悉的场景。

步骤2:核心实现代码

在Jupyter Notebook中运行以下代码,定义满足你需求的playNote函数:

import numpy as np
import sounddevice as sd

# 音名到频率的映射(基于十二平均律,A4=440Hz)
note_freq_map = {
    'C': 261.63, 'C#': 277.18, 'Db': 277.18,
    'D': 293.66, 'D#': 311.13, 'Eb': 311.13,
    'E': 329.63, 'F': 349.23, 'F#': 369.99, 'Gb': 369.99,
    'G': 392.00, 'G#': 415.30, 'Ab': 415.30,
    'A': 440.00, 'A#': 466.16, 'Bb': 466.16,
    'B': 493.88
}

def playNote(pitch, duration_ms, volume=0.5):
    sample_rate = 44100  # 标准音频采样率
    duration_s = duration_ms / 1000.0  # 将毫秒转为秒
    
    # 处理音高输入:支持MIDI编号或音名字符串
    if isinstance(pitch, int):
        # MIDI转频率公式:f = 440 * 2^((pitch - 69)/12)
        freq = 440 * (2 ** ((pitch - 69) / 12))
    elif isinstance(pitch, str):
        pitch_upper = pitch.strip().upper()
        if pitch_upper not in note_freq_map:
            raise ValueError(f"不支持该音名:{pitch},请使用'F#'、'Db'这类格式")
        freq = note_freq_map[pitch_upper]
    else:
        raise TypeError("音高参数需为MIDI整数或音名字符串")
    
    # 动态生成正弦波音频
    t = np.linspace(0, duration_s, int(sample_rate * duration_s), endpoint=False)
    audio = volume * np.sin(2 * np.pi * freq * t)
    
    # 即时播放,后台自动处理无需生成文件
    sd.play(audio, sample_rate)
    sd.wait()  # 等待播放完成,连续播放可注释此行

步骤3:使用示例

  • 按音名播放:
playNote('F#', 1000, 0.2)  # F#音,时长1000毫秒,音量0.2
  • 按MIDI编号播放(你提到的中音F#对应MIDI 46,和上面的音名频率一致):
playNote(46, 1000, 0.2)
  • 随机生成音高和时长:
import random
random_note = random.choice(list(note_freq_map.keys()))
playNote(random_note, random.randint(500, 2000), 0.2)

补充说明

  1. 所有音频都是动态生成,无需预存文件,完全符合即时播放需求。
  2. 音量参数建议设置在0-1之间,避免出现爆音;你之前示例中的2可调整为0.2这类合理值。
  3. 若要连续播放多个音符且不阻塞Jupyter运行,可去掉sd.wait(),但需注意音符间的间隔控制。
  4. 正弦波是最基础的波形,满足你最低需求;之后若想更换音色(如方波、三角波),只需修改audio = ...行的波形生成逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:27:30