vMix Forums
	 » 
	General
	 » 
	General Discussion
	 » 
	Fetch Name and author of song via script
	 
	
        
            
            
    
        
	Rank: Newbie
  Groups: Registered
 Joined: 9/2/2022(UTC) Posts: 7  Location: metn Thanks: 3 times
  
	 
	
     | 
    
        
            
		      
                Hello guys, 
  I am new here and was looking for help with something,
  I have a list input with multiple videos that are looping,
  I have a lower third that has two text inputs lets say (Title, Subtitle)
  is there a way to automatically trigger this lower third and have it load the name and author of the video automatically via scripting on each new video ?
  any help would be appreciated,
  Thank you in advance 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Rank: Advanced Member
  Groups: Registered
 Joined: 12/27/2012(UTC) Posts: 5,451  Location: Belgium Thanks: 311 times Was thanked: 1008 time(s) in 830 post(s)
  
	 
	
     | 
    
        
            
		      
                Originally Posted by: jhak15  Hello guys, 
  I am new here and was looking for help with something,
  I have a list input with multiple videos that are looping,
  I have a lower third that has two text inputs lets say (Title, Subtitle)
  is there a way to automatically trigger this lower third and have it load the name and author of the video automatically via scripting on each new video ?
  any help would be appreciated,
  Thank you in advance  If the title and subtitle are part of the videoname sure it could be done by extracting the current details from the API XML (http://127.0.0.1:8088/api) Have you checked this forum regarding the subject scripting ?  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Rank: Newbie
  Groups: Registered
 Joined: 9/2/2022(UTC) Posts: 7  Location: metn Thanks: 3 times
  
	 
	
     | 
    
        
            
		      
                Thank you for the quick reply, no i did not see it, can u please show me where? 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Rank: Advanced Member
  Groups: Registered
 Joined: 12/27/2012(UTC) Posts: 5,451  Location: Belgium Thanks: 311 times Was thanked: 1008 time(s) in 830 post(s)
  
	 
	
     | 
    
        
            
		      
                Originally Posted by: jhak15  Thank you for the quick reply, no i did not see it, can u please show me where?   https://forums.vmix.com/...86-Scripting-for-Dummies  and other posts or Search on keywords top of this page The followig code  wil get you the currently playing ;ist item name Some vb.net coding will allow you to extract parts of the name to send to a title or whatever response you program within Code:'Get title of currently playing list item 
do while true
   dim xml as string = API.XML()
   dim x as new system.xml.xmldocument
   x.loadxml(xml)
dim Title as string  = (x.SelectSingleNode("//input[5]/@title").InnerText)
console.writeline(Title)  'or API to send to title
sleep(500)
loop 
  
            
	  
         
     | 
    
        
              1 user thanked doggy for this useful post.  
     | 
    
        
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Rank: Advanced Member
  Groups: Registered
 Joined: 1/25/2019(UTC) Posts: 318  Thanks: 22 times Was thanked: 81 time(s) in 62 post(s)
  
	 
	
     | 
    
        
            
		      
                I have this script published here before, but have not found it in a hurry.   it should work like this, with some work of your own to adapt this to your title and naming of your files. This script reads the current title of a playlist and writes it formatted into a field of a vMix GT-Title. In this example I use the title “Title 33- On the shelf- Peach.gtzip”, contained in vMix and write the text into the field “Headline.Text”. My list input is Input2. Please adapt this (title, field and list input number) for your project. I use a list of MP3 audio files. These are named as follows: Anni Piper - Two's Company - 01 - Blues Before Sunrise.mp3 Anni Piper - Two's Company - 02 - Live To Play.mp3 Anni Piper - Two's Company - 03 - Man's Woman.mp3 The goal is to extract a usable name from this string. this line gets the active title name from your playlist Code:dim word as string = (x.SelectSingleNode("//input[@number=2]/@title").InnerText) 
 this line removes ".mp3" Code:word = word.remove(word.Length - 4) 
 this line defines the separator, in this case  the - Code:Dim parts() As String = word.Split(New Char() {"-"c}, StringSplitOptions.RemoveEmptyEntries 
 the variables parts(i) are holding the individual parts, parts(1) = Anni Piper etc. the script shows you individual variables(part(1) , part(2) ..) for 1 second in the title “Title 33- On the shelf- Peach.gtzip” The finished script looks like this: Code:'script playing now
do
dim xml as string = API.XML()
dim x as new system.xml.xmldocument
x.loadxml(xml)
dim word as string = (x.SelectSingleNode("//input[@number=2]/@title").InnerText)
word = word.remove(word.Length - 4)
' Split the string by "-"
Dim parts() As String = word.Split(New Char() {"-"c}, StringSplitOptions.RemoveEmptyEntries)
' Trim each part to remove leading and trailing spaces
For i As Integer = 0 To parts.Length - 1
    parts(i) = parts(i).Trim()
Next
'gets number of parts
Dim number As Integer = parts.Length -1
'shows each part of the tile for a second
for ii as integer = 1 to number
API.Function("SetText",Input:="Title 33- On the shelf- Peach.gtzip",SelectedName:="Headline.Text",Value:=parts(ii))
sleep(1000)
next
loop
 
  
            
	  
         
     | 
    
        
              2 users thanked Peter1000 for this useful post.  
     | 
    
        
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Rank: Newbie
  Groups: Registered
 Joined: 9/2/2022(UTC) Posts: 7  Location: metn Thanks: 3 times
  
	 
	
     | 
    
        
            
		      
                This is great, thank you very much, it works, if i want to split the part of the file name and put the first part as a title in my gtzip file and the second as subtitle, make the gtzip overlay in and then fade out after a certain amount of time and loop every certain amount of minutes can you help out with the code ?
  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Rank: Newbie
  Groups: Registered
 Joined: 9/2/2022(UTC) Posts: 7  Location: metn Thanks: 3 times
  
	 
	
     | 
    
        
            
		      
                i think i got it, 
  'script playing now
  do dim xml as string = API.XML() dim x as new system.xml.xmldocument x.loadxml(xml) dim word as string = (x.SelectSingleNode("//input[@number=1]/@title").InnerText) word = word.remove(word.Length - 4)
  ' Split the string by "-" Dim parts() As String = word.Split(New Char() {"-"c}, StringSplitOptions.RemoveEmptyEntries)
  ' Trim each part to remove leading and trailing spaces For i As Integer = 0 To parts.Length - 1     parts(i) = parts(i).Trim() Next
  'gets number of parts Dim number As Integer = parts.Length -1
  'shows each part of the tile for a second for ii as integer = 1 to number API.Function("SetText",Input:="Title 7- Horizontal Red.gtzip",SelectedName:="Headline.Text",Value:=parts(1)) API.Function("SetText",Input:="Title 7- Horizontal Red.gtzip",SelectedName:="Description.Text",Value:=parts(2)) Overlay.Find(1).In("Title 7- Horizontal Red.gtzip") sleep(5000) Overlay.Find(1).Out next sleep(10000) loop
 
  Thank you so much guys, does this method work on as many lists i have or should i do a script for each one ? with triggers on overlay in? what do u suggest,
  EDIT: i also noted that if the video in the list is over, and the above graphic is still on air it will not change the value because it is still in the loop which makes sense, so is there a way to trigger this script in a way to show the details every time a new video plays ? 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Rank: Advanced Member
  Groups: Registered
 Joined: 1/25/2019(UTC) Posts: 318  Thanks: 22 times Was thanked: 81 time(s) in 62 post(s)
  
	 
	
     | 
    
        
            
		      
                there are several options. one could be 4 triggers on your list input.   trigger.PNG  (13kb) downloaded 4 time(s).the 1st trigger starts a script, if yout List input goes online(OnTransitionIn), in this example the Script is named "overlay", this script starts also your "playing now" script" and fades overlay1 IN and OUT for your defined amount of time, loops if needed the 2nd trigger takes the overlay1 out, if your list input is taken off the program (OnTransitionOut) the 3rd trigger stops your script "overlay", if your list input is taken off the program (OnTransitionOut) the 4th trigger stops your script "playing now", if your list input is taken off the program (OnTransitionOut) overlay Code:'script overlay
'this script starts the other script "playing now" and shows your title for 2 seconds, every 10 seconds
API.Function("ScriptStart", Value:="playing now")
do
API.Function("OverlayInput1In", Input:="Title 7- Horizontal Red.gtzip")
sleep(2000)
API.Function("OverlayInput1Out", Input:="Title 7- Horizontal Red.gtzip")
sleep(10000)
loop
 
 and modify your script playing now. you can remove some unneeded parts and make the script faster, to change the title name imediate, if your list input changes. modified script playing now Code:'script playing now
do
dim xml as string = API.XML()
dim x as new system.xml.xmldocument
x.loadxml(xml)
dim word as string = (x.SelectSingleNode("//input[@number=1]/@title").InnerText)
word = word.remove(word.Length - 4)
' Split the string by "-"
Dim parts() As String = word.Split(New Char() {"-"c}, StringSplitOptions.RemoveEmptyEntries)
' Trim each part to remove leading and trailing spaces
For i As Integer = 0 To parts.Length - 1
parts(i) = parts(i).Trim()
Next
'adjusts the two text fields to the currently running title 
API.Function("SetText",Input:="Title 7- Horizontal Red.gtzip",SelectedName:="Headline.Text",Value:=parts(1))
API.Function("SetText",Input:="Title 7- Horizontal Red.gtzip",SelectedName:="Description.Text",Value:=parts(4))
sleep(200)
loop
 
 This should give you enough information to try to solve future problems yourself. The best training is still in doing it on your own. :-)  
            
	  
         
     | 
    
        
              1 user thanked Peter1000 for this useful post.  
     | 
    
        
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Rank: Newbie
  Groups: Registered
 Joined: 9/2/2022(UTC) Posts: 7  Location: metn Thanks: 3 times
  
	 
	
     | 
    
        
            
		      
                great, can u provide me with a code that can switch a millisecond value into hh:mm:ss and set it in a counter ? 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Rank: Advanced Member
  Groups: Registered
 Joined: 12/27/2012(UTC) Posts: 5,451  Location: Belgium Thanks: 311 times Was thanked: 1008 time(s) in 830 post(s)
  
	 
	
     | 
    
        
            
		      
                Originally Posted by: jhak15  great, can u provide me with a code that can switch a millisecond value into hh:mm:ss and set it in a counter ?  With all due respect a little bit of search effort would not hurt and help you learn (or hire a programmer) https://www.syncfusion.c...t-milliseconds-into-timeAlso check out the available shortcuts that also are usefull as scripting functions  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Rank: Newbie
  Groups: Registered
 Joined: 9/2/2022(UTC) Posts: 7  Location: metn Thanks: 3 times
  
	 
	
     | 
    
        
            
		      
                i wrote the code to get the duration of each video from the list,
  i created a text input in vmix and added the xml in the data source manager, i then chose the duration column to always display in the text input and then accessed this information via script to trigger everything
  Do     ' Extract the duration value from the Message attribute in input 3     Dim xmlDoc As New System.Xml.XmlDocument()     xmlDoc.Load("http://localhost:8088/api")     Dim durationValue As String = xmlDoc.SelectSingleNode("/vmix/inputs/input[@number='3']/text[@name='Message']").InnerText
      ' Convert the duration value to the milliseconds     Dim durationMilliseconds As Long = Long.Parse(durationValue)
      ' Calculate the hours, minutes, and seconds     Dim hours As Integer = CInt((durationMilliseconds \ (1000 * 60 * 60)) Mod 24)     Dim minutes As Integer = CInt((durationMilliseconds \ (1000 * 60)) Mod 60)     Dim seconds As Integer = CInt((durationMilliseconds \ 1000) Mod 60)
      ' Construct the query string with the calculated values     Dim apiUrl As String = "http://localhost:8088/api"     Dim queryString As String = "Function=SetCountdown&Input=2&Title=txtClock&Value=" & hours.ToString("D2") & ":" & minutes.ToString("D2") & ":" & seconds.ToString("D2")     Dim requestUrl As String = apiUrl & "?" & queryString
      ' Send the request to the desired endpoint     Dim client As New System.Net.WebClient()     Dim response As String = client.DownloadString(requestUrl)
      ' Process the response as needed     Console.WriteLine(response)
      ' Wait for a certain interval before repeating the loop     Threading.Thread.Sleep(5000) ' 5 seconds Loop While True 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
                           
	vMix Forums
	 » 
	General
	 » 
	General Discussion
	 » 
	Fetch Name and author of song via script
	 
	
    
        Forum Jump
         
	
    
    You cannot post new topics in this forum.
	
	You cannot reply to topics in this forum.
	
	You cannot delete your posts in this forum.
	
	You cannot edit your posts in this forum.
	
	You cannot create polls in this forum.
	
	You cannot vote in polls in this forum.
	
	
    
    
        Important Information:
        The vMix Forums uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close