news 2026/9/7 7:34:41

用Python合成γ波专注声场:双耳节拍与等时音调实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用Python合成γ波专注声场:双耳节拍与等时音调实战

当你在工作、学习或阅读时,是否经常发现注意力难以长时间集中?市面上提到“γ波”“心流”“专注声场”的音频越来越多,很多人直接播放现成音频,却不知道这些声音是怎么“合成”出来的。如果把这类音频当成黑盒,一旦遇到刺耳、音量不稳、效果不持久的情况,往往无从下手。

这篇文章会从音频工程角度,把“γ激活脑力专注声场”拆解为可复现的声学信号生成过程:双耳节拍、等时音调、粉红噪声、淡入淡出、音量归一化,并完成一个可运行的 Python 生成工具。你可以根据自己需要生成指定时长、指定频率的工作/学习/阅读背景声场,也能理解为什么有些人喜欢在 γ 频段(30Hz 以上)做专注音频。

文章适合对声音处理、脑波音频、Python 音频编程感兴趣的开发者,也适合想自己动手定制“心流声场”而不是只找现成音频的使用者。

1. 背景与核心概念

1.1 声场、γ 波与专注到底是什么关系

“专注声场”本质上是一段经过合成或混音处理的环境音频,通常包含恒定频率的载波、规律脉冲信号、噪声底以及可能的自然背景声。设计目标不是“旋律好听”,而是通过声学线索给大脑提供一个稳定的听觉节律。

从脑电研究角度看,γ 波通常指的是频率在 30Hz 到 100Hz(有时到 150Hz)左右的神经振荡,与注意力、记忆编码、跨脑区同步等认知活动存在关联。脑电研究中的“40Hz 刺激实验”在近年讨论也很多,这让很多音频创作者把 40Hz 作为专注声场的常见目标频率。

需要强调一点:听音频不等于直接“控制”脑电,个体差异非常大。媒体喜欢把 γ 波专注声场描述成“一键进入心流”,但从工程角度看,我们能做的是生成频率准确、包络平滑、响度稳定的声学信号,并通过听觉刺激建立一种稳定的节律感。是否对你有效,需要自己实测。

1.2 双耳节拍和等时音调

双耳节拍(Binaural Beats)是专注声场最常见的实现方式:左右声道分别播放两个频率接近的纯音,比如左耳 200Hz、右耳 240Hz,大脑在听觉通路中会感知到一个约 40Hz 的节拍调制效果。这种感知必须在佩戴耳机时才会明显,因为左右耳的声音在脑干层面整合。

等时音调(Isochronic Tones)则更直接:把同一个载波音频用固定频率周期性切断,形成类似“嗒—嗒—嗒”的脉冲感,不需要立体声分离,外放也有效果。很多冥想类 App 都混合使用双耳节拍和等时音调。

除了节拍和脉冲,专注声场通常会加入粉红噪声作为“声学垫底”。粉红噪声的功率谱按频率每倍频程下降约 3dB,比白噪声更柔和,适合长时间播放。

1.3 为什么你要掌握音频合成方法

现成的专注音频虽然方便,但存在几个问题:

  • 不知道目标频率是多少,不知道是 40Hz 还是 50Hz。
  • 音频存在压缩损失、响度不统一,有时刺耳,有时又太轻。
  • 无法按自己的专注时长生成自定义音频。
  • 无法把节拍、噪声、背景自然声按比例混合。

如果掌握基础声场生成方法,你可以随时生成 20 分钟、40 分钟、60 分钟的音频,也可以把 γ 波从 40Hz 调整到 50Hz 再对比效果。这不是玄学,而是可以量化、可复现的声音工程。

2. 环境准备与版本说明

生成声场的核心工具是 Python 和几个常用库。示例环境如下,但版本需要根据你的项目实际情况调整,本文重点演示配置思路。

  • 操作系统:Windows 10/11、macOS、Linux 均可。
  • Python:建议使用 Python 3.9 或更高版本。
  • numpy:用于数组计算。
  • scipy:用于信号滤波和 WAV 文件写入。
  • soundfile(可选):用于读取/写入更多音频格式。
  • pydub(可选):用于导出 MP3,依赖 ffmpeg。

示例项目结构:

gamma-focus-soundscape/ ├── main.py ├── requirements.txt └── output/

如果使用虚拟环境,可以这样创建:

python -m venv venv source venv/bin/activate # Windows 下使用 venv\Scripts\activate

依赖文件 requirements.txt 内容如下:

numpy scipy soundfile pydub

安装命令:

pip install -r requirements.txt

如果只需要生成 WAV,不使用 MP3 导出,pydub 和 ffmpeg 可以跳过。本文核心代码以 WAV 输出为主,MP3 导出作为扩展方案。

3. 核心原理与音频生成技术拆解

3.1 采样率、时长与数组表示

音频在计算机中本质是一个采样点序列。采样率(Sample Rate)表示每秒采样次数,CD 音质通常为 44100Hz,专业音频常用 48000Hz。采样率越高,能还原的频率范围越宽。

假设要生成 10 分钟音频,采样点总数是:

sample_rate = 44100 duration_s = 60 * 10 total_samples = int(sample_rate * duration_s)

这个值会决定数组长度。以 44100Hz、10 分钟为例,total_samples 等于 26,460,000,单声道数组内存约为 200MB 的浮点数,双声道则约 400MB。实际代码里我们可以直接分配大数组,但如果生成 2 小时音频,需要考虑内存和运行时间。

3.2 双耳节拍频率计算

双耳节拍的关键是左右声道频率差。

假设目标脑波节拍频率为 gamma_hz,我们选择一个载波频率 carrier_hz,那么右声道频率为:

right_hz = carrier_hz + gamma_hz

左声道频率为 carrier_hz。

例如 carrier=200Hz、gamma=40Hz 时,右耳是 240Hz,差值为 40Hz。需要说明的是,差值并不等于实际播放出来的“可听见频率”,而是大脑通过双耳整合感知到的节拍频率。

代码实现:

import numpy as np sample_rate = 44100 def generate_binaural_beats(duration_s, carrier_hz=200, gamma_hz=40, volume=0.3): t = np.linspace(0, duration_s, int(sample_rate * duration_s), endpoint=False) left = volume * np.sin(2 * np.pi * carrier_hz * t) right = volume * np.sin(2 * np.pi * (carrier_hz + gamma_hz) * t) return np.stack([left, right], axis=-1)

这里采用两端相同的相位起点,左右声道只是频率不同。

3.3 等时音调生成与包络平滑

单纯的正弦波如果长时间播放,听感会非常单调,也容易被耳朵疲劳。等时音调通过周期性打断声音来制造脉冲节奏。

最简单的方式是方形包络:

def generate_isochronic_tone_square(duration_s, carrier_hz=180, pulse_hz=40, volume=0.3): t = np.linspace(0, duration_s, int(sample_rate * duration_s), endpoint=False) tone = np.sin(2 * np.pi * carrier_hz * t) envelope = 0.5 * (1 + np.sign(np.sin(2 * np.pi * pulse_hz * t))) return tone * envelope * volume

这种方波包络实现简单,但会在声音出现和消失瞬间产生咔哒声(click),长时间听容易让人烦躁。

更平滑的做法是用正弦包络的绝对值:

def generate_isochronic_tone_smooth(duration_s, carrier_hz=180, pulse_hz=40, volume=0.3): t = np.linspace(0, duration_s, int(sample_rate * duration_s), endpoint=False) tone = np.sin(2 * np.pi * carrier_hz * t) envelope = np.abs(np.sin(2 * np.pi * pulse_hz * t)) return tone * envelope * volume

这里 pulse_hz 决定包络的脉冲速率,tone 的载波频率决定音高。使用 |sin| 作为包络,脉冲能量是逐渐升高再降低,听感更自然。

3.4 粉红噪声生成

粉红噪声可以用白噪声通过特定滤波器近似得到。很多开发者会使用 Paul Kellet 设计的 IIR 滤波器系数,它用一组简单的 a、b 系数逼近粉红噪声频谱。

from scipy.signal import lfilter def generate_pink_noise(duration_s, volume=0.15): n = int(sample_rate * duration_s) white = np.random.randn(n) b = [0.049922035, -0.095993537, 0.050612699, -0.004408786] a = [1, -2.494956002, 2.017265875, -0.522189400] pink = lfilter(b, a, white) pink = pink / np.max(np.abs(pink)) return pink * volume

这段代码的思路是:先随机生成白噪声,再用 IIR 滤波将高频能量逐渐衰减,让频谱接近粉色噪声特征。最后做一次归一化,避免后续混音时音量过高。

由于 lfilter 对很长的数组处理速度较慢,对于 1 小时以上的音频,推荐对噪声分块生成,或者限制噪声时长,比如只生成 5 分钟噪声循环使用。

3.5 混音、淡入淡出与归一化

多个声音叠加后,最先要处理的是削波。如果各个分轨直接相加,音量会超过 1.0,在写入 WAV 时信号被截断,产生爆音。

建议流程:

  1. 为每个分轨设置较小的音量系数。
  2. 将各分轨相加。
  3. 对总混音做峰值归一化。
  4. 在首尾添加淡入淡出。

归一化代码:

def normalize_audio(data, target_peak=0.7): peak = np.max(np.abs(data)) if peak < 1e-8: return data return data * (target_peak / peak)

淡入淡出可以用线性缓动曲线实现:

def fade_in_out(data, fade_s=3.0, sample_rate=44100): fade_samples = int(fade_s * sample_rate) if fade_samples < 1: return data fade_in = np.linspace(0, 1, fade_samples) fade_out = np.linspace(1, 0, fade_samples) data[:fade_samples] *= fade_in data[-fade_samples:] *= fade_out return data

为什么需要淡入淡出?如果音频开头从第 0 个采样点就是满幅正弦波,播放器瞬间输出非零信号,可能产生爆音,也会让耳朵不适。3 秒到 5 秒的淡入可以让身体慢慢适应声音变化;结尾的淡出则避免音频结束后突然安静造成的注意落差。

4. 完整实战:用 Python 生成 γ 波专注声场

下面我们把以上原理组合成一个可运行的脚本,目标是生成一段包含双耳节拍、等时音调、粉红噪声的“工作/学习/阅读专注声场”。

4.1 创建项目结构

在某个目录下创建工程文件夹:

mkdir gamma-focus-soundscape cd gamma-focus-soundscape mkdir output

最终文件结构:

gamma-focus-soundscape/ ├── main.py ├── requirements.txt └── output/

4.2 安装依赖

确保已安装 Python 3.9+,然后在项目目录执行:

pip install numpy scipy soundfile pydub

如果不需要 MP3,可以不装 pydub。

4.3 编写核心代码

将以下代码保存为 main.py。

# 文件路径:main.py import os import numpy as np from scipy.io import wavfile from scipy.signal import lfilter SAMPLE_RATE = 44100 def generate_binaural_beats(duration_s, carrier_hz=200, gamma_hz=40, volume=0.3): """ 生成双耳节拍:左右声道频率差为 gamma_hz。 需要佩戴耳机才能体验到双耳整合效果。 """ t = np.linspace(0, duration_s, int(SAMPLE_RATE * duration_s), endpoint=False) left = volume * np.sin(2 * np.pi * carrier_hz * t) right = volume * np.sin(2 * np.pi * (carrier_hz + gamma_hz) * t) return np.stack([left, right], axis=-1) def generate_isochronic_tone(duration_s, carrier_hz=180, pulse_hz=40, volume=0.25): """ 生成等时音调:载波不变,用正弦包络形成稳定的脉冲节律。 """ t = np.linspace(0, duration_s, int(SAMPLE_RATE * duration_s), endpoint=False) tone = np.sin(2 * np.pi * carrier_hz * t) envelope = np.abs(np.sin(2 * np.pi * pulse_hz * t)) return tone * envelope * volume def generate_pink_noise(duration_s, volume=0.12): """ 生成粉红噪声:用 IIR 滤波器近似白噪声的粉红频谱衰减。 """ n = int(SAMPLE_RATE * duration_s) white = np.random.randn(n) b = [0.049922035, -0.095993537, 0.050612699, -0.004408786] a = [1, -2.494956002, 2.017265875, -0.522189400] pink = lfilter(b, a, white) pink = pink / np.max(np.abs(pink)) return pink * volume def normalize_to_peak(data, target_peak=0.7): peak = np.max(np.abs(data)) if peak < 1e-8: return data return data * (target_peak / peak) def apply_fade_in_out(data, fade_s=3.0): fade_samples = int(fade_s * SAMPLE_RATE) if fade_samples < 1 or data.shape[0] < 2 * fade_samples: return data fade_in = np.linspace(0, 1, fade_samples) fade_out = np.linspace(1, 0, fade_samples) data[:fade_samples] *= fade_in data[-fade_samples:] *= fade_out return data def build_gamma_focus_soundscape( duration_min=20, carrier_hz=200, gamma_hz=40, isochronic_hz=180, binaural_volume=0.3, isochronic_volume=0.2, noise_volume=0.12, ): duration_s = duration_min * 60 print("正在生成双耳节拍...") binaural = generate_binaural_beats( duration_s, carrier_hz=carrier_hz, gamma_hz=gamma_hz, volume=binaural_volume ) print("正在生成等时音调...") isochronic = generate_isochronic_tone( duration_s, carrier_hz=isochronic_hz, pulse_hz=gamma_hz, volume=isochronic_volume ) print("正在生成粉红噪声...") pink = generate_pink_noise(duration_s, volume=noise_volume) print("正在混音...") mix = np.copy(binaural) mix[:, 0] += isochronic mix[:, 1] += isochronic mix[:, 0] += pink mix[:, 1] += pink mix = normalize_to_peak(mix, target_peak=0.7) mix = apply_fade_in_out(mix, fade_s=3.0) return mix def save_mix_to_wav(mix, output_path): os.makedirs(os.path.dirname(output_path), exist_ok=True) pcm_16 = (mix * 32767).astype(np.int16) wavfile.write(output_path, SAMPLE_RATE, pcm_16) print(f"音频已保存到: {output_path}") if __name__ == "__main__": mix = build_gamma_focus_soundscape( duration_min=20, carrier_hz=200, gamma_hz=40, isochronic_hz=180, binaural_volume=0.3, isochronic_volume=0.2, noise_volume=0.12, ) save_mix_to_wav(mix, "output/gamma_focus_40hz_20min.wav")

这段代码的关键点:

  • generate_binaural_beats 生成立体声双耳节拍。
  • generate_isochronic_tone 生成单声道等时音调,混音时同时加到左右声道。
  • generate_pink_noise 生成背景噪声。
  • normalize_to_peak 防止最终混音削波。
  • apply_fade_in_out 避免首尾爆音。

4.4 运行与验证

在项目目录执行:

python main.py

预期输出:

正在生成双耳节拍... 正在生成等时音调... 正在生成粉红噪声... 正在混音... 音频已保存到: output/gamma_focus_40hz_20min.wav

生成的文件路径是output/gamma_focus_40hz_20min.wav。如果系统安装了 ffmpeg,可以用播放器直接打开。没有播放器时,可以用 Python 快速读取并打印音频信息:

from scipy.io import wavfile sample_rate, data = wavfile.read("output/gamma_focus_40hz_20min.wav") print("采样率:", sample_rate) print("数组形状:", data.shape) print("数据类型:", data.dtype) print("最大幅度:", data.max())

预期输出类似:

采样率: 44100 数组形状: (52800000, 2) 数据类型: int16 最大幅度: 22937

数组形状表示音频总采样点数和声道数。最大幅度取决于归一化后的峰值,不同随机噪声底会略有不同,但不会接近 int16 上限 32767,因此没有削波风险。

4.5 进阶:导出为 MP3 或其他格式

WAV 文件占用空间较大。20 分钟双声道 44100Hz 的 WAV 约为 400MB,虽然可在电脑播放,但不适合上传到手机或音乐平台。如果需要导出 MP3,可以使用 pydub 配合 ffmpeg:

from pydub import AudioSegment pcm_16 = (mix * 32767).astype(np.int16) stereo_bytes = pcm_16.tobytes() audio_segment = AudioSegment( data=stereo_bytes, sample_width=2, frame_rate=SAMPLE_RATE, channels=2 ) audio_segment.export("output/gamma_focus_40hz_20min.mp3", format="mp3", bitrate="192k")

使用这段代码前,需要确保系统已经安装 ffmpeg,并且在 PATH 中。

5. 常见问题与排查思路

5.1 生成的声音极其沉闷,听不出节拍感

如果只有双耳节拍和等时音调,低频载波会让人感觉沉闷。可以优先检查:

  • 是否佩戴耳机?双耳节拍在扬声器外放时效果会明显减弱。
  • 载波频率是否太低?200Hz 比较“浑厚”,如果想要更明亮,可以提升到 300Hz 或 400Hz。
  • 等时音调音量是否太低?在混音时把 isochronic_volume 从 0.2 提升到 0.3。

参数调整示例:

build_gamma_focus_soundscape( duration_min=20, carrier_hz=300, gamma_hz=40, isochronic_hz=240, isochronic_volume=0.3, )

5.2 输出音频有爆音或杂音

爆音通常来自削波,也就是混音后信号超出 [-1, 1] 范围。本文代码已经通过 normalize_to_peak 做归一化,但如果某个分轨音量设置太高,仍然可能在归一化前局部过冲,甚至出现 NaN。排查顺序:

  1. 检查音量参数是否大于 1.0。
  2. 检查生成粉红噪声时是否有除零或空数组。
  3. 用绘图脚本查看波形:
import matplotlib.pyplot as plt duration_s = 10 mix_sample = mix[: SAMPLE_RATE * duration_s] plt.plot(mix_sample[:, 0]) plt.show()

如果波形满幅被截断,说明归一化失败或者写入时乘了错误的系数。

5.3 文件太大,生成时间长

20 分钟双声道 WAV 约 400MB,生成过程中还会申请大量内存。如果觉得卡顿,可以采用分段生成方案。

分段生成思路:

  • 双耳节拍和等时音调都是确定性信号,可以按 60 秒一段生成,逐段写入临时文件。
  • 粉红噪声具有随机性,如果不追求整段独立随机,可以生成 60 秒噪声片段后循环拼接到剩余时长。
  • 混音时不需要一次把所有分轨加载进内存,可以采用视频渲染中常见的“分段渲染、最后拼接”方式。

5.4 导出 MP3 报错

常见报错是 FileNotFoundError 或 ffmpeg 无法找到。解决方式:

# Ubuntu/Debian sudo apt install ffmpeg # macOS brew install ffmpeg # Windows choco install ffmpeg

安装后重新打开终端再运行脚本。

5.5 声音听起来像“耳鸣”,耳朵有疲劳感

长时间播放单纯的高频正弦波,听觉容易疲劳。建议:

  • 降低 binaural_volume 和 isochronic_volume。
  • 增加粉红噪声比例,用噪声掩盖正弦波的“金属感”。
  • 每 25 分钟暂停 5 分钟,不要长时间连续播放。
  • 不要用过高音量驱动耳机,建议音量控制在舒适范围的一半以下。

6. 最佳实践与工程建议

6.1 安全与合规边界

γ 波专注音频不是医疗器械,不能替代医学诊断或治疗。如果使用者有癫痫病史、听觉过敏、耳鸣或佩戴人工耳蜗等听觉植入设备,不建议持续使用脉冲音。生成工具也应在 README 中注明风险提示,避免用户盲目长时间高音量使用。

6.2 参数化设计

不要把载波频率、γ 频率、各分轨音量写死在代码里。将这些参数抽取为命令行参数或配置文件,方便做多组对比实验。

可以扩展为命令行工具:

python main.py --duration 30 --carrier 220 --gamma 40 --alpha 0.3

这样你可以快速生成不同频率组合,再实际试听选择适合自己的方案。

6.3 响度与目标平台

不同播放设备对响度的处理不一样。手机外放、耳机、电脑音箱对低频的还原能力不同,生成的 WAV 在电脑上正常,在手机上可能听起来声音很小。导出 MP3 前,可以先用 ffmpeg 的 loudnorm 滤镜做一次响度标准化:

ffmpeg -i input.wav -af loudnorm=I=-16:TP=-1.5:LRA=11 output.mp3

这个命令会把整体响度统一到常见音乐平台标准附近。

6.4 音频素材版权

如果要在背景层加入雨声、溪流声、咖啡馆环境声,需要确认素材版权。可以使用免费音效库或自己录制,不要直接截取商业音乐片段。自己生成的粉红噪声和正弦波不存在版权问题。

6.5 命名与日志规范

建议输出文件名包含关键参数,例如:

gamma_focus_40hz_c200_20min_v1.wav

其中 40hz 表示 γ 频率,c200 表示载波频率 200Hz,v1 表示版本号。这样可以避免同一目录下多组参数文件互相覆盖。

6.6 从“生成音频”升级到“播放工具”

生成一次性 WAV 文件只是第一步。如果想把该项目做成工具,可以进一步考虑:

  • 使用 pygame 或 sounddevice 做实时播放。
  • 通过 GUI 界面调整频率和音量。
  • 增加计时器,在 25 分钟、45 分钟时自动淡出。
  • 配合番茄钟使用,让声场随专注阶段动态变化。

7. 总结与学习路线

通过这篇文章,你已经掌握了一个“γ 波专注声场”的基础生成链路:双耳节拍负责立体声节律感知,等时音调负责单声道的脉冲提示,粉红噪声负责平滑声场,最后通过归一化和淡入淡出输出成 WAV 文件。

如果方向是音频工程,下一步可以学习频谱分析,用 scipy.fft 检查生成音频的实际频率是否准确;如果方向是产品化,可以研究实时播放、响度标准化和跨平台导出的细节;如果对脑电原理感兴趣,则需要阅读更严谨的神经科学文献,而不是只看宣传文案。

实际项目中优先关注两点:一是音量与安全边界,不要让使用者长时间高音量暴露;二是参数化设计,不要把所有参数硬编码,否则以后想换频率组合就要反复改代码。

你可以先运行上面的脚本,生成一段 20 分钟的 40Hz 声场,在专注阅读或编码时实际试听。如果觉得节拍太强,可以把等时音调音量调低;如果觉得太沉闷,可以提高载波频率到 300Hz。多试几组参数,你会找到最适合自己的“心流声场”。

如果这篇文章对你有帮助,可以收藏备用。接下来你也可以尝试生成不同频率组合的声场版本,做一个自己的专注音频工具集。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 7:33:08

VLC 3.0.11 原生支持 AVS+ 与 DRA:国产音视频标准播放不再难

简介&#xff1a;VLC 3.0.11 增强版播放器是一份面向 Windows 7 及以上系统的特殊构建&#xff0c;核心价值在于内置了对国产 AVS 与 DRA 编码格式的原生支持。AVS 是中国自主研发的高效视频标准&#xff0c;常应用于高清广播电视与 IPTV 传输&#xff1b;DRA 是国产高保真数字…

作者头像 李华
网站建设 2026/9/7 7:32:37

软考高级系统架构设计师备考全攻略:从刷题到论文的完整方法论

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 7:32:12

Java接入讯飞语音转文字:WebSocket实时流式接口全解析

简介&#xff1a;这是一份面向Java开发者与后端工程师的讯飞语音转文字集成示例&#xff0c;核心解决了在Java后端中快速接入讯飞ASR音频识别能力的问题&#xff0c;适合有基础API调用经验、正为智能设备或AI交互功能寻找语音方案的程序员。资源包为zip格式&#xff0c;共八个文…

作者头像 李华
网站建设 2026/9/7 7:31:19

用manim动画讲透极大似然估计:从似然函数到参数求解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 7:31:01

FanControl 风扇控制完整指南:三步配好温度曲线

FanControl 风扇控制完整指南&#xff1a;三步配好温度曲线 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanCo…

作者头像 李华
网站建设 2026/9/7 7:29:56

ComfyUI+MiniMax H3实战:搭建AI影视剧创作工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华