TiXL 音频系统完全指南:时间线音频剪辑、路由混音图与音频反应式视觉 📅 发布时间:2026/9/18 9:14:30 👁 浏览次数: TiXL 音频系统完全指南时间线音频剪辑、路由混音图与音频反应式视觉【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3本篇技术指南围绕 TiXL开源实时动态图形工具的音频子系统展开系统讲解时间线音频剪辑的操作模型、主音轨Main Soundtrack机制、基于算子Operator的音频路由与混音图、效果器与侧链闪避Ducking、音频反应式视觉Audio-Reactive以及导出时音频的确定性混缩行为。阅读后你将掌握 TiXL 中以普通算子搭建整套音频链路的核心思路并能独立完成从多剪辑并行播放、分组混音、添加混响/回声/压缩效果到用节拍驱动参数动画的完整实战方案。自 TiXL 4.3 起整个音频系统不再有独立的音频配置面板而是完全由普通算子构建拖入时间线的音频文件会变成AudioClip算子混音、编组、效果与电平测量都发生在可见、可编辑的算子图中。本文所有操作与原理均可对照仓库源码验证例如音频算子实现位于 Operators/Lib/Symbols/io/audio底层 BASS 引擎架构说明见 Core/Audio/AUDIO_ARCHITECTURE.md。时间线上的音频剪辑AudioClip从资源库Asset Library或系统文件管理器中将音频文件mp3、wav、ogg拖入时间线它就成为一个AudioClip算子 —— 与任何其他时间线剪辑一样可以移动、修剪、拆分、循环、静音和删除。一个项目可以在任意多的层上并行播放多个音频剪辑。从源码结构看AudioClip同时实现了IAudioClipProvider、IContentTimeClip与IStatusProvider接口见 AudioClip.cs它通过TimeSlot获得标准算子剪辑的全部交互能力拖拽/修剪/拆分/吸附/删除并在播放头处于其TimeRange内时通过AudioEngine播放。核心参数AutoPlay默认开启播放头进入剪辑范围内即自动播放无需任何连线。关闭后需要AudioClipPlayer驱动否则算子的状态栏会给出提示Not played — enable AutoPlay or add an [AudioClipPlayer] that collects this clip.。Trimming修剪只播放文件的局部。把剪辑起点拖到文件开头之前多出的部分保持静音。源码中修剪通过SourceOffsetSecs与SourceDurationSecs实现TimeClip.SourceRange是文件时间秒而TimeRange是时间线的节拍bars位置见 AudioClip.cs。Loop循环在剪辑长度内重复已修剪的源窗口。重复边界在剪辑体上以细线显示。Mute静音静音的剪辑在时间线上显示为淡化样式。Style样式选择剪辑体内绘制的内容 —— 频率Spectrum频谱、峰值Waveform波形或平滑的Volume Level音量电平。重命名算子新名字以引号形式显示在剪辑上原始文件名保留在悬浮提示中。在播放头处按ShiftX拆分剪辑两半会无缝衔接播放并且新拆分出的剪辑会自动重连到原剪辑所接入的所有连线。底层播放模型值得注意的实现细节AudioClip本身从不直接启动或停止音频流 —— 注册心跳机制就是引擎的启停信号。当剪辑被接入混音图或由 AutoPlay 注册时AudioClipCollector.RegisterIfActive会在播放头位于剪辑时间范围内时触发由引擎按帧创建、同步位置并回收过期的流见 AudioClip.cs 与 AudioClipCollector.cs。若剪辑从未被评估无连线且关闭 AutoPlay其状态栏会显示 Warning 级别的未播放提示。主音轨Main Soundtrack一个剪辑可以被指定为主音轨Main Soundtrack它承担三项职责渲染为时间线背后的通栏背景图像驱动音频反应式算子FFT 分析源定义导出可执行文件的播放时长。指定方式有两种右键音频剪辑选择Set as Main Soundtrack或在Project Settings → Audio中使用Create Soundtrack。技术上主音轨的指定仅仅是剪辑的Display参数被设为Background Image—— 因此它跟随算子随项目文件保存而不是藏在某个隐藏的项目状态里。这一设计在源码中得到印证_clip.IsMainSoundtrack _clip.Display AudioClipDisplay.BackgroundImage见 AudioClip.csCompositionSettings.TryGetMainSoundtrack也是通过查找 op-clip 联合中的主音轨标志来工作的见 CompositionSettings.cs。主音轨总是横跨其完整源内容其剪辑块在时间线图层中被隐藏 —— 背景图像就是它的表现形式。若要在时间线上重新摆放它或将其变回普通剪辑把算子的Display参数改回Clip即可。Project Settings → Audio → Select and focus Main Soundtrack可以快速跳转到该算子。路由与混音Routing and Mixing默认情况下每个剪辑各自播放你永远看不到一根连线。要做混音、编组和加效果使用音频图每个AudioClip都有一个AudioReference输出。把它接入AudioBus总线就接管该剪辑的播放电平与混音。总线是图的汇聚端sink——它拥有一个主Volume并输出一个可测量的Level。源码中AudioBus的ResultCommand 输出与Levelfloat 输出均为Always触发见 AudioBus.cs。CombineAudio在信号到达总线之前把多个源归入一个共享的编组音量下。编组可以嵌套。效果器 ——AudioReverb、AudioEcho、AudioCompressor—— 是插入式inserts所有流经它们的内容都会被处理。将一个效果器的输出接到下一个效果器的输入即可串联成链。从源码看效果器在总线内部被实现为嵌套子混音nested submixesAudioBus为每个声明了 FX 的节点建立一个独立的 BASS mixer submix父级效果组的 submix 会成为内层效果组的父混音器见 AudioBus.cs 与 AudioReverb.cs。当效果器节点从图中移除时总线会用 400ms 的增益渐隐fade让混响/回声的尾音自然收束而不是被生硬截断见 AudioBus.cs。AudioToneGenerator直接在图中产生测试音与合成持续音drone。源码确认其波形类型包括 Sine / Square / Sawtooth / Triangle / WhiteNoise / PinkNoise频率被限制在 20–20000 Hz并内置采样级精度的 ADSR 包络Envelope 的 XAttack、YDecay、ZSustain、WRelease触发模式支持 Pulse0→1 沿触发播放Duration秒与 Gate保持触发期间持续发声见 AudioToneGenerator.cs 与 AudioToneGenerator.cs。与AudioClip不同它不实现IAudioSource因此未连线时不会自动发声 —— 断开连线会立即静音。PlayAudioSample用于触发一次性采样one-shot samples。AutoCollectClips隐式汇入在总线或编组上开启AutoCollectClips后同一 composition 中未连线的兄弟音频剪辑会隐式加入其中——当你希望整段合成的剪辑共享同一个音量、电平表或效果又不想逐个连线时非常有用。每个 composition 只应使用一个自动汇入算子两个会自动汇入的算子会争抢同一批声道。源码中AudioBus与CombineAudio都通过LooseAudioClipScanner.GetLooseClipOutputs收集这些游离剪辑评估它们的 AudioReference 输出同时充当播放心跳见 AudioBus.cs 与 CombineAudio.cs。总线的求值前提总线必须被求值才会发声——把它接入你的渲染命令链或固定pin到某个输出视图上。源码中总线每帧注册到AudioExportSourceRegistry并以心跳机制维持活跃如果总线停止被求值引擎会暂停其 submix而不是让它保持播放一个冻结的最后状态见 AudioBus.cs。视频音频Video Audio视频会播放自己的声音PlayVideo和时间线上的VideoClip都会解码其文件的音轨并与画面同步播放。Volume参数控制缩放当 Volume 为 0 时音轨完全不会被解码—— 纯粹当作纹理使用的视频不会产生额外开销。与所有音频源一样两个算子都有AudioReference输出把它接入AudioBus或CombineAudio即可为视频声音提供编组音量、效果或闪避保持不连线则直接播放。声音跟随画面具体规则没有被渲染的PlayVideo是静音的VideoClip只在它的 cut 范围内可闻修剪或滑动剪辑会让声音随帧一起移动。音频在正常正向播放时发声。拖拽scrubbing、反向与变速播放是静音的—— 为这些模式提供变调修正pitch-corrected音频已在计划中。预览代理preview proxies不携带音轨所以声音始终来自原始文件无论是否使用代理预览。视频音频目前不会被包含进渲染的视频文件或可执行文件见下文 导出。电平测量与闪避Metering and DuckingAudioLevel是一个电平测量抽头tap测量它所在链路位置的信号。关键要求是串联接入source → tap → bus而不是作为旁路分支这样才能测量时间线剪辑。源码解释了这一原因测量通过effect-less insert实现路由总线会把它落实为独立的 submix——正是这一点让包括引擎自持的AudioClip声道在内的所有源类型都能被可靠测量而旁路分支直接测量叶子声道引擎自持声道不可缓冲会静默读到 0见 AudioLevel.cs。若接成旁路算子会给出 Warning 提示。测量值滞后可闻信号约一帧这对闪避与反应式用途完全足够。其 level 输出可以驱动任何东西灯光亮度、缩放或DuckAudioLevel。闪避的经典场景——人声压音乐voice-over-over-music让音乐通过一个DuckAudioLevel。用AudioLevel测量人声编组把它的 level 接入 duck 的控制输入Level。调整 Threshold 与 Amount直到音乐随人声呼吸。从源码看DuckAudioLevel的核心是把 level 信号转换为平滑的闪避增益当电平超过Threshold时增益以 Attack 斜坡压向1 − Amount低于阈值时以 Release 斜坡恢复。GainAndBiasVector2用于塑形响应曲线kneeAttack/Release通过指数平滑k 1 − exp(−dt/τ)实现且跟随实时音频信号而非时间线见 DuckAudioLevel.cs。将Gain输出接入CombineAudio或AudioBus的 Volume 即可需要与既有音量相乘时可通过数学算子处理。音频反应式视觉Audio-Reactive VisualsAudioReaction对项目的音频分析作出反应——节拍beats、低频bass、高频highs——并输出数值驱动参数。它监听什么取决于项目设置Project Settings → TimingAnimation动画项目分析主音轨逐帧精确——渲染视频时同样生效因此导出的反应式效果与播放时一致。Live / Interactive现场/交互项目分析Project Settings → Audio中配置的音频输入设备并提供Gain调节变化不定的输入电平、Decay塑造反应回落的快慢。AudioReaction的输出包括Level、WasHitbool与HitCountint输入参数包括Threshold触发阈值、MinTimeBetweenHits相邻命中最小间隔、WindowCenter/WindowWidth/WindowEdge频谱窗的选择与边缘衰减均被钳制在 0..1、Amplitude、Bias与Reset。其InputBand可选输入模式包括 RawFft、NormalizedFft、FrequencyBands、FrequencyBandsPeaks、FrequencyBandsAttacksOutput可选输出模式包括 Pulse、TimeSinceHit、Count、Level、AccumulatedLevel见 AudioReaction.cs 与 AudioReaction.cs。只对单一音源作出反应要只对某一个源而不是整个混音作出反应把AudioReaction插入图中把源的AudioReference接入它的Source输入再把它的Result继续接到总线上。这样串联接入时它只分析流经自身的内容——例如在音乐同时播放时只分析某段视频的声音。如果接成死端旁路它无法分析时间线剪辑或视频音频算子会在这种接法下发出 Warning见 AudioReaction.cs。导出Export听到即所得What you hear is what you get时间线剪辑以及所有经过音频图路由的内容——包括编组音量、效果与闪避——都会渲染进导出的视频与可执行文件。主音轨定义可执行文件的播放时长。从底层实现看导出使用一个独立的 BASS export mixerAudioRendering.PrepareRecording会暂停全局混音器、把音轨流从 SoundtrackMixer 临时移入导出混音器由 BASS 自动完成各剪辑原生采样率到混音器频率的重采样GetFullMixDownBuffer逐帧读取混缩缓冲见 Core/Audio/AUDIO_ARCHITECTURE.md 与 AudioRendering.cs。AudioBus还实现了IAudioExportSource导出的算子链被求值时总线会持续注册求值避免渲染期间因心跳中断而静音并在每次导出前通过Bass.FXReset清空效果器内部状态确保同一区间的两次渲染结果一致见 AudioBus.cs。当前唯一的例外是视频音频它在编辑器中实时播放但尚未进入确定性的导出混缩因此渲染出的文件和可执行文件不携带它。相关阅读Timeline —— 剪辑、关键帧与时间扭曲。TiXL for VJ and live performances —— 点按测速、节拍锁定与实时输入。Exporting videos 与 Exporting executables。附深入仓库的线索若想进一步研究音频系统底层仓库提供了完整的架构文档与实现音频系统整体架构混音器层级、信号流、导出路径、陈旧检测机制Core/Audio/AUDIO_ARCHITECTURE.md混音器管理与 BASS 初始化Global/Operator/Soundtrack 三路混音器、设备采样率探测、FLAC 插件AudioMixerManager.cs音频配置低频延迟参数、FFT 缓冲、3D 音频因子、日志开关AudioConfig.cs项目音频相关设置AudioSource 枚举、音频输入设备名、主音轨查询CompositionSettings.cs音频算子全集Bus、Combine、效果器、反应式、闪避、采样触发Operators/Lib/Symbols/io/audio【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考