Ultraschall / ultraschall-portable

Portable ULTRASCHALL Podcasting Extensions including the REAPER DAW
MIT License
55 stars 7 forks source link

[ENHANCEMENT] Tracks automatisch anlegen anhand des Input-Levels des Interfaces #441

Open mespotine opened 1 year ago

mespotine commented 1 year ago

Mit hilfe eines Assistants die zu verwendenden Tracks im Projekt automatisch anlegen.

Grundlage hierfür ist die Aktivität der verwendeten Inputs. Sprich: wenn an Input 1 und 3 ein Mikrofon hängt, so wird die Lautstärke höchstwahrscheinlich nicht 0 sein, weil immer irgendwelche Hintergrundgeräusche existieren. Man definiert also einen Treshhold, ab dem der Input als "den nehmen wir" genommen werden soll und legt entsprechend Tracks an.

Beispiel könnte ein Assistent sein, bei dem alle Beteiligten mal kurz was in ihr Mikrofon sprechen müssen und wenn der Assistent Pegel erkennt, wird der Input als grün markiert angezeigt, während alle anderen Inputs als rot markiert werden. So sieht man auch sofort, ob die Mikrofone korrekt angeschlossen sind.

Man könnte sowas auch in den Soundcheck einbauen: man checkt(wenn keine Aufnahme läuft), ob die Inputs, die im Projekt verwendet werden, Pegel haben und warnt, wenn irgendein Input auf -144dB liegt(sprich leise ist) um so sofort technische Problemen zu erkennen mit nicht funktionierenden Mikrofonen.

mespotine commented 1 year ago

Reaper hat dafür die Funktion GetInputActivityLevel, die für den ausgewählten Input des Interfaces die derzeitige Lautstärke zurück gibt.

Hier ist Democode, der anzeigt, wie die Inputlevel von input 1 und 2 aussehen:

gfx.init()
gfx.setfont(1, "Arial", 20, 0)
Atab={} -- levels of input 1
Atab2={} -- levels of input 2
i=0
i2=0

function main()
  if i<100 then i=i+1 else table.remove(Atab, 1) end

  --[[ Input 1 ]]

  -- Get Input Activity-Level of input 1
  Atab[i]=reaper.GetInputActivityLevel(0)

  -- draw input activity level input 1
  for a=1, #Atab do
    gfx.set((Atab[a]/100)+1, (Atab[a]/70)+1, (Atab[a]/30)+5)
    gfx.line(a,(-Atab[a]), a, 150)
    gfx.set(1)
    gfx.line(1, 150, a, 150)
    if a==#Atab then
      gfx.line(a,(-Atab[a]), a+40, (-Atab[a]))
      gfx.x=a+9
      gfx.y=-Atab[a]+9
      gfx.set(1)
      gfx.drawstr(math.floor(Atab[a]).." dB - Input 1 Activity")
    end
  end

  if i2<100 then i2=i2+1 else table.remove(Atab2, 1) end

  --[[ Input 2 ]]

  -- Get Input Activity-Level of input 2
  Atab2[i2]=reaper.GetInputActivityLevel(1)

  -- draw input activity level input 2
  for a=1, #Atab2 do
    gfx.set((Atab2[a]/100)+1, (Atab2[a]/70)+1, (Atab2[a]/30)+5)
    gfx.line(a,(-Atab2[a]+160), a, 150+160)
    gfx.set(1)
    gfx.line(1, 150+160, a, 150+160)
    if a==#Atab2 then
      gfx.line(a,(-Atab2[a])+160, a+40, (-Atab2[a])+160)
      gfx.x=a+9
      gfx.y=-Atab2[a]+160
      gfx.drawstr(math.floor(Atab2[a]).." dB - Input 2 Activity")
    end
  end
  reaper.defer(main)
end

main()