PPROLint
Built-in rules

Audio gaps

Reports ranges of the work area where no audio clip is audible.

PropertyValue
Idno-audio-gaps
CategoryStatic
Default severityinfo
Scopeaudio-gaps (computed scope)

Options

OptionTypeDefaultDescription
minSecondsnumber1Silences shorter than this are not reported.
silenceDbnumber-60Clips whose static volume is at or below this do not count as audio.
leadingbooleantrueReport silence at the start of the work area.
trailingbooleantrueReport silence at the end of the work area.

Customize it

Turn the rule on or off in the panel's Rules settings. To change its options, severity or wording, open it with its cogwheel in the rule editor and save: your copy replaces the built-in rule until you revert it. You can also copy the file below into your rules folder as no-audio-gaps.rule.json and edit it. See Change a built-in rule.

Rule file

no-audio-gaps.rule.json
{
  "formatVersion": 1,
  "id": "no-audio-gaps",
  "name": {
    "en_US": "Audio gaps",
    "de_DE": "Audiolücken",
    "es_ES": "Huecos de audio",
    "fr_FR": "Blancs audio",
    "it_IT": "Vuoti audio",
    "ja_JP": "オーディオの欠落",
    "ko_KR": "오디오 간격",
    "pt_BR": "Lacunas de áudio",
    "ru_RU": "Пропуски звука",
    "zh_CN": "音频间隙"
  },
  "description": {
    "en_US": "Reports ranges of the work area where no audio clip is audible.",
    "de_DE": "Meldet Bereiche des Arbeitsbereichs, in denen kein Audioclip hörbar ist.",
    "es_ES": "Detecta intervalos del área de trabajo en los que no se oye ningún clip de audio.",
    "fr_FR": "Signale les plages de la zone de travail où aucun élément audio n'est audible.",
    "it_IT": "Segnala gli intervalli dell'area di lavoro in cui nessuna clip audio è udibile.",
    "ja_JP": "ワークエリア内で、聞こえるオーディオクリップがない範囲を報告します。",
    "ko_KR": "작업 영역에서 들리는 오디오 클립이 없는 구간을 보고합니다.",
    "pt_BR": "Relata intervalos da área de trabalho em que nenhum clipe de áudio é audível.",
    "ru_RU": "Сообщает об участках рабочей области, где не слышно ни одного аудиоклипа.",
    "zh_CN": "报告工作区域中没有可听见的音频剪辑的范围。"
  },
  "category": "static",
  "scope": "audio-gaps",
  "severity": "info",
  "options": {
    "minSeconds": {
      "type": "number",
      "default": 1,
      "description": "Silences shorter than this are not reported."
    },
    "silenceDb": {
      "type": "number",
      "default": -60,
      "description": "Clips whose static volume is at or below this do not count as audio."
    },
    "leading": {
      "type": "boolean",
      "default": true,
      "description": "Report silence at the start of the work area."
    },
    "trailing": {
      "type": "boolean",
      "default": true,
      "description": "Report silence at the end of the work area."
    }
  },
  "checks": [
    {
      "condition": {
        "all": [
          {
            "field": "gap.durationSeconds",
            "operator": "greaterThanOrEqual",
            "value": {
              "field": "options.minSeconds"
            }
          },
          {
            "any": [
              {
                "field": "gap.kind",
                "operator": "equals",
                "value": "inner"
              },
              {
                "all": [
                  {
                    "field": "gap.kind",
                    "operator": "equals",
                    "value": "leading"
                  },
                  {
                    "field": "options.leading",
                    "operator": "equals",
                    "value": true
                  }
                ]
              },
              {
                "all": [
                  {
                    "field": "gap.kind",
                    "operator": "equals",
                    "value": "trailing"
                  },
                  {
                    "field": "options.trailing",
                    "operator": "equals",
                    "value": true
                  }
                ]
              }
            ]
          },
          {
            "all": [
              {
                "field": "gap.hasBefore",
                "operator": "equals",
                "value": true
              },
              {
                "field": "gap.hasAfter",
                "operator": "equals",
                "value": true
              }
            ]
          }
        ]
      },
      "message": {
        "en_US": "No audio for {gap.durationSeconds} s ({gap.startTimecode} to {gap.endTimecode}) between \"{gap.beforeName}\" on {gap.beforeTrack} and \"{gap.afterName}\" on {gap.afterTrack}.",
        "de_DE": "Kein Audio für {gap.durationSeconds} s ({gap.startTimecode} bis {gap.endTimecode}) zwischen „{gap.beforeName}“ auf {gap.beforeTrack} und „{gap.afterName}“ auf {gap.afterTrack}.",
        "es_ES": "Sin audio durante {gap.durationSeconds} s (de {gap.startTimecode} a {gap.endTimecode}) entre \"{gap.beforeName}\" en {gap.beforeTrack} y \"{gap.afterName}\" en {gap.afterTrack}.",
        "fr_FR": "Aucun audio pendant {gap.durationSeconds} s ({gap.startTimecode} à {gap.endTimecode}) entre « {gap.beforeName} » sur {gap.beforeTrack} et « {gap.afterName} » sur {gap.afterTrack}.",
        "it_IT": "Nessun audio per {gap.durationSeconds} s (da {gap.startTimecode} a {gap.endTimecode}) tra \"{gap.beforeName}\" su {gap.beforeTrack} e \"{gap.afterName}\" su {gap.afterTrack}.",
        "ja_JP": "「{gap.beforeName}」({gap.beforeTrack})と「{gap.afterName}」({gap.afterTrack})の間に{gap.durationSeconds} sのオーディオの欠落があります({gap.startTimecode}~{gap.endTimecode})。",
        "ko_KR": "{gap.durationSeconds} s 동안 오디오 없음({gap.startTimecode}~{gap.endTimecode}): {gap.beforeTrack}의 \"{gap.beforeName}\" 뒤, {gap.afterTrack}의 \"{gap.afterName}\" 앞.",
        "pt_BR": "Sem áudio por {gap.durationSeconds} s ({gap.startTimecode} a {gap.endTimecode}) entre \"{gap.beforeName}\" em {gap.beforeTrack} e \"{gap.afterName}\" em {gap.afterTrack}.",
        "ru_RU": "Нет звука в течение {gap.durationSeconds} с (с {gap.startTimecode} по {gap.endTimecode}) между «{gap.beforeName}» на {gap.beforeTrack} и «{gap.afterName}» на {gap.afterTrack}.",
        "zh_CN": "{gap.durationSeconds} s 无音频({gap.startTimecode} 至 {gap.endTimecode}),位于 {gap.beforeTrack} 上的“{gap.beforeName}” 和 {gap.afterTrack} 上的“{gap.afterName}” 之间。"
      }
    },
    {
      "condition": {
        "all": [
          {
            "field": "gap.durationSeconds",
            "operator": "greaterThanOrEqual",
            "value": {
              "field": "options.minSeconds"
            }
          },
          {
            "any": [
              {
                "field": "gap.kind",
                "operator": "equals",
                "value": "inner"
              },
              {
                "all": [
                  {
                    "field": "gap.kind",
                    "operator": "equals",
                    "value": "leading"
                  },
                  {
                    "field": "options.leading",
                    "operator": "equals",
                    "value": true
                  }
                ]
              },
              {
                "all": [
                  {
                    "field": "gap.kind",
                    "operator": "equals",
                    "value": "trailing"
                  },
                  {
                    "field": "options.trailing",
                    "operator": "equals",
                    "value": true
                  }
                ]
              }
            ]
          },
          {
            "all": [
              {
                "field": "gap.hasBefore",
                "operator": "equals",
                "value": false
              },
              {
                "field": "gap.hasAfter",
                "operator": "equals",
                "value": true
              }
            ]
          }
        ]
      },
      "message": {
        "en_US": "No audio for {gap.durationSeconds} s ({gap.startTimecode} to {gap.endTimecode}) before \"{gap.afterName}\" on {gap.afterTrack}.",
        "de_DE": "Kein Audio für {gap.durationSeconds} s ({gap.startTimecode} bis {gap.endTimecode}) vor „{gap.afterName}“ auf {gap.afterTrack}.",
        "es_ES": "Sin audio durante {gap.durationSeconds} s (de {gap.startTimecode} a {gap.endTimecode}) antes de \"{gap.afterName}\" en {gap.afterTrack}.",
        "fr_FR": "Aucun audio pendant {gap.durationSeconds} s ({gap.startTimecode} à {gap.endTimecode}) avant « {gap.afterName} » sur {gap.afterTrack}.",
        "it_IT": "Nessun audio per {gap.durationSeconds} s (da {gap.startTimecode} a {gap.endTimecode}) prima di \"{gap.afterName}\" su {gap.afterTrack}.",
        "ja_JP": "「{gap.afterName}」({gap.afterTrack})の前に{gap.durationSeconds} sのオーディオの欠落があります({gap.startTimecode}~{gap.endTimecode})。",
        "ko_KR": "{gap.durationSeconds} s 동안 오디오 없음({gap.startTimecode}~{gap.endTimecode}): {gap.afterTrack}의 \"{gap.afterName}\" 앞.",
        "pt_BR": "Sem áudio por {gap.durationSeconds} s ({gap.startTimecode} a {gap.endTimecode}) antes de \"{gap.afterName}\" em {gap.afterTrack}.",
        "ru_RU": "Нет звука в течение {gap.durationSeconds} с (с {gap.startTimecode} по {gap.endTimecode}) перед «{gap.afterName}» на {gap.afterTrack}.",
        "zh_CN": "{gap.durationSeconds} s 无音频({gap.startTimecode} 至 {gap.endTimecode}),位于 {gap.afterTrack} 上的“{gap.afterName}” 之前。"
      }
    },
    {
      "condition": {
        "all": [
          {
            "field": "gap.durationSeconds",
            "operator": "greaterThanOrEqual",
            "value": {
              "field": "options.minSeconds"
            }
          },
          {
            "any": [
              {
                "field": "gap.kind",
                "operator": "equals",
                "value": "inner"
              },
              {
                "all": [
                  {
                    "field": "gap.kind",
                    "operator": "equals",
                    "value": "leading"
                  },
                  {
                    "field": "options.leading",
                    "operator": "equals",
                    "value": true
                  }
                ]
              },
              {
                "all": [
                  {
                    "field": "gap.kind",
                    "operator": "equals",
                    "value": "trailing"
                  },
                  {
                    "field": "options.trailing",
                    "operator": "equals",
                    "value": true
                  }
                ]
              }
            ]
          },
          {
            "all": [
              {
                "field": "gap.hasBefore",
                "operator": "equals",
                "value": true
              },
              {
                "field": "gap.hasAfter",
                "operator": "equals",
                "value": false
              }
            ]
          }
        ]
      },
      "message": {
        "en_US": "No audio for {gap.durationSeconds} s ({gap.startTimecode} to {gap.endTimecode}) after \"{gap.beforeName}\" on {gap.beforeTrack}.",
        "de_DE": "Kein Audio für {gap.durationSeconds} s ({gap.startTimecode} bis {gap.endTimecode}) nach „{gap.beforeName}“ auf {gap.beforeTrack}.",
        "es_ES": "Sin audio durante {gap.durationSeconds} s (de {gap.startTimecode} a {gap.endTimecode}) después de \"{gap.beforeName}\" en {gap.beforeTrack}.",
        "fr_FR": "Aucun audio pendant {gap.durationSeconds} s ({gap.startTimecode} à {gap.endTimecode}) après « {gap.beforeName} » sur {gap.beforeTrack}.",
        "it_IT": "Nessun audio per {gap.durationSeconds} s (da {gap.startTimecode} a {gap.endTimecode}) dopo \"{gap.beforeName}\" su {gap.beforeTrack}.",
        "ja_JP": "「{gap.beforeName}」({gap.beforeTrack})の後に{gap.durationSeconds} sのオーディオの欠落があります({gap.startTimecode}~{gap.endTimecode})。",
        "ko_KR": "{gap.durationSeconds} s 동안 오디오 없음({gap.startTimecode}~{gap.endTimecode}): {gap.beforeTrack}의 \"{gap.beforeName}\" 뒤.",
        "pt_BR": "Sem áudio por {gap.durationSeconds} s ({gap.startTimecode} a {gap.endTimecode}) depois de \"{gap.beforeName}\" em {gap.beforeTrack}.",
        "ru_RU": "Нет звука в течение {gap.durationSeconds} с (с {gap.startTimecode} по {gap.endTimecode}) после «{gap.beforeName}» на {gap.beforeTrack}.",
        "zh_CN": "{gap.durationSeconds} s 无音频({gap.startTimecode} 至 {gap.endTimecode}),位于 {gap.beforeTrack} 上的“{gap.beforeName}” 之后。"
      }
    },
    {
      "condition": {
        "all": [
          {
            "field": "gap.durationSeconds",
            "operator": "greaterThanOrEqual",
            "value": {
              "field": "options.minSeconds"
            }
          },
          {
            "any": [
              {
                "field": "gap.kind",
                "operator": "equals",
                "value": "inner"
              },
              {
                "all": [
                  {
                    "field": "gap.kind",
                    "operator": "equals",
                    "value": "leading"
                  },
                  {
                    "field": "options.leading",
                    "operator": "equals",
                    "value": true
                  }
                ]
              },
              {
                "all": [
                  {
                    "field": "gap.kind",
                    "operator": "equals",
                    "value": "trailing"
                  },
                  {
                    "field": "options.trailing",
                    "operator": "equals",
                    "value": true
                  }
                ]
              }
            ]
          },
          {
            "all": [
              {
                "field": "gap.hasBefore",
                "operator": "equals",
                "value": false
              },
              {
                "field": "gap.hasAfter",
                "operator": "equals",
                "value": false
              }
            ]
          }
        ]
      },
      "message": {
        "en_US": "No audio for {gap.durationSeconds} s ({gap.startTimecode} to {gap.endTimecode}).",
        "de_DE": "Kein Audio für {gap.durationSeconds} s ({gap.startTimecode} bis {gap.endTimecode}).",
        "es_ES": "Sin audio durante {gap.durationSeconds} s (de {gap.startTimecode} a {gap.endTimecode}).",
        "fr_FR": "Aucun audio pendant {gap.durationSeconds} s ({gap.startTimecode} à {gap.endTimecode}).",
        "it_IT": "Nessun audio per {gap.durationSeconds} s (da {gap.startTimecode} a {gap.endTimecode}).",
        "ja_JP": "{gap.durationSeconds} sのオーディオの欠落があります({gap.startTimecode}~{gap.endTimecode})。",
        "ko_KR": "{gap.durationSeconds} s 동안 오디오 없음({gap.startTimecode}~{gap.endTimecode}).",
        "pt_BR": "Sem áudio por {gap.durationSeconds} s ({gap.startTimecode} a {gap.endTimecode}).",
        "ru_RU": "Нет звука в течение {gap.durationSeconds} с (с {gap.startTimecode} по {gap.endTimecode}).",
        "zh_CN": "{gap.durationSeconds} s 无音频({gap.startTimecode} 至 {gap.endTimecode})。"
      }
    }
  ],
  "data": {
    "gapStart": "gap.start",
    "gapEnd": "gap.end",
    "gapTicks": "gap.durationTicks",
    "kind": "gap.kind",
    "gapSeconds": "gap.durationSeconds",
    "minSeconds": "options.minSeconds"
  }
}

On this page