Skip to content

Latest commit

 

History

History
90 lines (65 loc) · 3.42 KB

File metadata and controls

90 lines (65 loc) · 3.42 KB

Schema —— 原子怎么命名、怎么标属性

核心:采集侧和用途侧分开

录的时候你知道的是物件、手法、力度、位置;你还不知道这声音要用在哪——那是听完才决定的,而且可以一对多。

采集侧(录的时候就知道,进文件名)
  source      耳机塑料壳 / 带垫子的木桌面 / 大菜板
  technique   指甲敲 / 握拳敲 / 软槌
  axis        force 档位、落点半径、幅度……
  variant     同一坐标的第 N 次

用途侧(听完再配,可一对多,不进文件名)
  used_as     [piece_place, block_impact, ...]

按用途命名(piece_place__...)看着直观,但它把"这批素材是为某个音效录的"焊死了,复用只能靠碰巧。按采集命名,素材库就是一个声音资源库——一个 source 天然服务多个音效。

文件名

<source>__<technique>__<轴键_轴值>...__<轴字母+档号>__<variant>.wav

例:

desk_padded__fingernail__r_center__f1__01.wav
             │           │         │    └ 档内第 1 次(每档从 01 重新数)
             │           │         └ 力度档 1
             │           └ 落点 = 中心
             └ 手法 = 指甲

两种轴写法都支持:

  • 键_值 —— 离散值,如 r_center / r_edge / pos_mid
  • 字母+数字 —— 有序档位,如 f1 f2 f3(marker 分出来的档直接用这个)

variant档内编号,不是整组连续——每档从 01 重新数。这样池子按档取变体时不用再算偏移。

map JSON

atom-split --map 吃的属性表,一次录音一份。属性来自你的口报(转写后人读一遍写下来,ASR 错字不影响,因为是人在理解不是字符串匹配)。

{
  "source": "desk_padded",
  "technique": "fingernail",
  "tierAxis": "f",
  "note": "带垫子的木桌面,指甲敲击;木质回响、沉闷。每组轻/中/重各三下",
  "groups": [
    { "axis": { "r": "center" } },
    { "axis": { "r": "mid" } },
    { "axis": { "r": "edge" } }
  ]
}
  • groups 按顺序对应切分出来的口报段(说话换气被切碎的会自动合并,一段口报 = 一组)
  • tierAxis 是 marker 分出来的档位用哪个字母
  • note 存你的口报大意,将来用自然语言搜素材比结构化标签好使

组数对不上时工具拒绝写文件。

分析出来的物理量

切分时顺带算的,进 split-report.json

字段 怎么来 用途
attackMs onset → 峰值 分类 take/语音;也是"闷不闷"的指标
durMs 超阈值区间长度 衰减长度
peakDb 5ms 窗 RMS 的峰值 力度轴的实际验证

peakDbRMS 包络峰值,不是采样峰值——瞬态的采样峰会比它高 5dB 左右(crest factor)。要看采样峰用 ffmpeg -af volumedetect,别用 astatsMax level(那个字段口径不一样,会读出矛盾的数)。

混层时的角色

atom-mix --mode layered 把两族拼成一个声音,靠频段分工避免糊:

role 主频段 几层
transient 主导仅 1
material 主导仅 1
body 主导仅 1
ambience 可多层

规则是同 role 只准一层占主导,第二层起自动衰减。不做这条,多层叠起来会出现"每层单听都对、合起来不带劲"那种最难 debug 的糊。