die ein oder anderen haben es ja schon mitbekommen.
Aktuell wird an einem Stream Deck Plugin für Ultraschall gearbeitet.
Diesbezüglich würde mich eure Meinung zu folgenden Punkten interessieren:
Wann würdet ihr das Stream Deck verwenden? (z.B. während des Setups / der Aufnahme / des Editings)
In welcher Phase wäre das Stream Deck für euch am wichtigsten?
Würde mich über eure Teilnahme freuen. Aktuell lag meine intuitive Priorität auf dem Bereich der Aufnahme (Soundboard, Tracks, Transport, Räuspertaste, Routing, On Air, …).
Hierzu ein aktueller Feature-Auszug (aus einer aktuell nicht öffentlichen Alpha):
Transport (Start / Pause / Stop / Begin / End / Repeat / Record) mit Status- und Timecode-Anzeige
Routing (Magic Routing (de)aktivieren, Routing Presets umschalten und Statusanzeige, On Air (de)aktivieren)
Track (Anzeige des Pegels, Räuspertastenfunktion)
Marker (Kapitelmarke, Kapitel vor 2 Min, Edit-Marke einfügen)
Soundboard (Triggern des Soundboard mit verschiedenem Verhalten, Definition eines Icons, Anzeige des Fortschritts grafisch und als gespielte / verbleibende Zeit)
Als nächstes arbeite ich an den folgenden Features:
ich bin zwar schon etwas mit @fernsehmuell in Kontakt, trotzdem hier meine Infos:
TLDR: Alle Phasen, besonders Live.
Prinzipiell in allen Phasen des Projekts. Beim Setup profitiere ich (noch) nicht soviel davon, da ich für Podcasts zumeist „einmal“ das Projekt baue - da habe ich aber Zeit und Muse.
In der Post-Produktion/Schnitt ist es praktisch, aber auch hier: Hier hätte ich Zeit, wenn aber auch praktische Workflows möglich sind (z.B. Kapitelmarken per Knopfdruck einfügen)
Live profitiere ich am meisten davon: Sounds abfahren, Verschiedene Kapitelmarken live einfügen, Muten, etc.
Ich halte es da wie Tim: Alles ist toll, was mir Zeit beim Schnitt/Postproduktion spart, dann bleibt mehr Zeit tolle neue Podcasts zu machen.
Paar Ideen, die (afaik) noch nicht umgesetzt sind:
Marker für „Ab hier löschen“ (für Pause Anfang), Marker für „bis hier löschen“ (für Pause Ende). Nach der Produktion dann ein „Apply“ Knopf, der die Löschvormerkungen dann auch ausführt.
Selbstdefinierbare Kapitelmarken-Namen, so dass man in einem Interface-Ordner (gibts ja schon) sich seine üblichsten Kapitelmarken vordefinieren kann und auf Knopfdruck einfügen
Button zum Annehmen von Studio-Link Anrufen (wobei: Ich hätte gerne ein automatisches/permanentes Annehmen)
Ein Knopfgestützter Workflow zum Einlesen von Texten. Hier müsste man mal ausprobieren, „was funktioniert“ für einen. Idee: z.B. Button A: Solange dieser gedrückt wird, wird aufgenommen. Sobald man loslässt, hält die Aufnahme an. Drückt man A erneut, beginnt die Aufnahme (in einem neuen Take) wieder von der gleichen Stelle. Drückt man dagegen B, wird der Take als „gut“ bewertet und die nächste Aufnahme (wieder mit A) beginnt nun NACH dem letzten Take.
War für Standalone, Plug-in ist ~/.studio-link-plugin/webapp.conf, je nach Version kann es auch auto_answer sein und beim Update verloren gehen. Aber das siehst du in der Datei dann.
Sieht echt interessant aus. Mein Stream Deck schreit danach. Ich würde gerne verschiedene Dinge wie Soundboard nutzen, Recording überwachen aber auch Maker damit setzen wollen. Das wäre wirklich eine Erleichterung.
Für mich ist eigentlich nur während der Aufnahme wichtig. Ich hätte gerne Steuerung für Soundboard und Edit- und Kapitelmarken. In meinen Workflow läuft an sich alles geradeaus ab, d.h. komplexe Steuerungen brauche ich nicht.
In meiner Wunschvorstellung kann ich einmal ein Soundboard mit den Standardsounds vollladen und dann vielleicht noch vor jeder Aufnahme 2 besondere Sounds hinzufügen, die nur für diese Folge relevant sind.
Bei den Editmarken würde ich gerne zwischen mehreren Labels unterscheiden können, z.B. Kraftausdrücke (müssen gepiept werden), Cut (hier muss ein Bereich geschnitten werden), und Störgeräusche (hier muss ein Track gemutet werden). Dann könnte ich im Schnitt noch viel schneller durch sein.
@worka, @Joram Im Prinzip ist mit dem Stand der Alpha genau das schon möglich, da ich mich genau darauf fokusiert habe.
Das Laden des Soundboards löst diverse OSC Kommandos aus, die das Plugin mitbekommt und somit auch deine beiden oder mehr individuellen Player mit Namen anzeigen. Du müsstest dazu dann nur so viele Buttons ins Stream Deck legen, dass du alle Player abdeckst.
Dazu müsstest du so vorgehen:
Dupliziere dir die Action (Mac: Alt+,) mit dem Namen „Script: ULTRASCHALL: Insert edit marker*“.
Hier steckt der komplette Code dahinter, der eine rote Edit-Marke einfügt.
Den Code kannst du dir dann als neue eigene Action anlegen und z.B. so abändern:
--[[
################################################################################
#
# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm)
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
################################################################################
]]
dofile(reaper.GetResourcePath().."/UserPlugins/ultraschall_api.lua")
A=ultraschall.GetUSExternalState("ultraschall_follow", "state")
if reaper.GetPlayState() == 0 or reaper.GetPlayState() == 2 then -- 0 = Stop, 2 = Pause
current_position = reaper.GetCursorPosition() -- Position of edit-cursor
else
if A=="1" or A=="-1" then -- follow mode is active
current_position = reaper.GetPlayPosition() -- Position of play-cursor
-- elseif reaper.GetPlayState()~=0 then
-- current_position = reaper.GetPlayPosition() -- Position of play-cursor
else
current_position = reaper.GetCursorPosition() -- Position of edit-cursor
end
end
runcommand("_Ultraschall_Center_Arrangeview_To_Cursor") -- scroll to cursor if not visible
color = ultraschall.ConvertColor(255,255,0) -- set color of mute marker to yellow
reaper.AddProjectMarker2(0, false, current_position, 0, "_Mute", 0, color) -- set yellow mute marker
oder
[...]
color = ultraschall.ConvertColor(0,0,255) -- set color of censor marker to blue
reaper.AddProjectMarker2(0, false, current_position, 0, "_Censor", 0, color) -- set blue censor marker
Farbwerte sind als normale dezimale Zahlen angegeben (RGB-Format = Rot, Grün, Blau) jweils im Wertebereich von 0-255
0,0,0 = Schwarz,
255,0,0 = volles Rot
128,0,0 = mittleres Rot
etc.
Diese Aktionen könntest du dann jetzt schon an Tastenkombinationen oder Midis koppeln.
Das Stream Deck Plugin wird „Custom Actions“ unterstützen, bei dem du dann die Command ID, die ausgelöst werden soll mit definierst. Die kannst du ganz einfach mit Rechtsklick → „Copy selected action command id“ in die Zwischenablage hinterlegen.
Im Auslieferungszustand wird wohl weder Ultraschall noch das Stream Deck Plugin solche Bedürfnisse ohne Anpassungen / Konfiguration abdecken können, da sich dann jeder andere Labels und Farben wünschen wird
Würde sich aktuell wohl bereits durch ein Lua-Script abdecken lassen. Custom Commands wird es im Stream Deck Plugin geben. Hier muss dann der Name des Commands wie im obigen Beispiel beschrieben aus Ultraschall in die Konfiguration kopiert werden.
Stellst du dir vor, dass du die Namen der Kapitel bereits vorab definierst also z.B. Intro, Thema 1, Thema 2 etc. und dann nach Knopfdruck der jeweilig an oberster Stelle stehende Marker an der Position eingefügt wird?
Vordefinierte Kapitelmarken kamen mit Ultraschall 3.1 (Video von der Subscribe 9 ab Minute 14)
Oder eine weitere Alternative wäre, dass du dir wie auch oben (dann allerdings mit der Action „Script: ULTRASCHALL: Insert chapter marker*“ als Basis) eine eigene Action für jede Kapitelmarke, die du gerne verwenden würdest, anlegst. Hier stelle ich mir nur vor, dass es eventuell schneller mal unübersichtlich wird. Wenn sich die Anzahl im Rahmen hält sicherlich auch nützlich.
Mit Studio-Link zu experimentieren habe ich mir auch vorgenommen. Zum Beispiel Annahme-Button oder eine Art Telefonbuch. Steht aber in der Priorität aktuell weiter hinten an.
Klingt für mich nach einem interessanten Workflow, der sich aktuell wohl auch mit Lua umsetzen lassen würde. Ist daher nur indirekt durch die Custom Actions ein Feature Request an das Stream Deck Plugin.
Ja und Nein: Für genau den beschriebenen Fall ist das ganz großartig - aber in meinem Fall ist die Reihenfolge unterschiedlich. (Konkret: „Hinweis 1“ bis „Hinweis n“, „Lösung“, bzw. „Auflösung“, je nachdem zwischen welchen Hinweisen erraten wurden bzw. ob am Ende aufgelöst wurde.) Daher funktioniert es leider nicht komplett statisch. Zudem mache ich die Aufnahmen manchmal nicht selbst, daher bekomme ich dann die Folge mit einem anderen Template (in dem diese Kapitelmarken nicht drin wären). Aber an sich wäre das ja sicherlich kein Hexenwerk.
Oder eine weitere Alternative wäre, dass du dir wie auch oben (dann allerdings mit der Action „Script: ULTRASCHALL: Insert chapter marker*“ als Basis) eine eigene Action für jede Kapitelmarke, die du gerne verwenden würdest, anlegst. Hier stelle ich mir nur vor, dass es eventuell schneller mal unübersichtlich wird. Wenn sich die Anzahl im Rahmen hält sicherlich auch nützlich.
Genau - es wären in diesem Fall immer nur die gleichen 14 (Auf der Sicheren Seite) Kapitelmarken. Die könnte man Problemlos auf dem Streamdeck ablegen für genau den Fall (eben in einen Actions Ordner). Ist aber schon ein eher exotischer Fall
Wenn auch exotisch, was sich über Lua abbilden lässt, wird sich auch auf dem Stream Deck abbilden lassen. Über Details wie Action States muss ich bei der Custom action noch nachdenken.
Theoretisch kann sich eine Action einen Status merken, den man dann per API (allerdings nur Web, nicht OSC) abrufen kann und somit auch wieder einen Zustand wie bei der Routing Matrix, On Air etc. darstellen könnte.
Aber wie du schon selbst siehst wird das dann immer spezifischer und mehr Spezialfall und daher eine niedrigere Prio. Mit der Version 1 wirst du auf alle Fälle solche Actions ausführen können.
Aktuell ist die Lösung noch sehr instabil und daher nicht öffentlich.
Sobald ich weiter bin werde ichs gerne öffentlich machen, aktuell ist das GIT auf privat gestellt.
Feste Portkonfiguration in Ultraschall für OSC und Web Interface wird aktuell benötigt
Die Einstellungen der Action Buttons werden nicht immer sofort gespeichert, kann aber durch Drag and Drop auf der gleichen Taste getriggert werden.
Das Plugin nutzt den identischen Namespace zu Udos Alpha. Daher nicht beide gleichzeitig verwenden
Funktionsumfang aktuell:
Transport Aktionen
Kapitel- / Edit-Marken setzen
Mute auf Track Ebene mit möglicher Anzeige des Pegels
Steuerung der Anzeige (Setup / Record / Edit / Storyboard)
Steuerung von OnAir
Routing Matrix ändern auf Preshow / Record / Edit
Alles ohne Funktionsgewähr. Ich möchte mir im September auch alternativ noch die Implementierung über Rust anschauen, da ich aktuell mit der CPU Last für das Plugin nicht zufrieden bin.
Das könnte noch sparsamer gehen…
Noch ein paar Hinweise:
Warum OSC und WebInterface? Über OSC bekomme ich fast alle Events per UDP mit und muss nicht aktiv im WebInterface einen Pull der Zustände machen (wie die Abspielposition im Soundboard etc.) Leider wird über OSC keine Information zur aktuell aktiven Routing Matrix, der View oder dem OnAir Zustand gesendet, dafür brauche ich dann leider doch das HTTP Pull am Web Interface.
Warum nochmal in Rust neu machen? Weil ich mir davon eine bessere Performance erhoffe und es für Rust auch schon eine Library für Reaper gibt. Es könnte sein, dass sich das Plugin daher nochmal von der Architektur komplett dreht und in ein Reaper Plugin wandelt, das dann alle Infos über ein Websocket an das StreckDeck bereitstellt. Vorteil dabei wäre, dass das StreamDeck Plugin dann wie von Udo bevorzugt in reinem JavaScript implementieren lassen könnte.
Solltet ihr irgendwelche Probleme damit haben oder Verbesserungsvorschläge, dann bitte gerne auf mich zukommen.