News:

If you have an Android device, check out VoxWav!

Main Menu

Voxcommando Media Player Classic Integration.

Started by xtermin8r, May 18, 2014, 12:28:08 PM

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

xtermin8r

James do i have your permission to fix it ?
it may only take me seconds to fix.
Neural Net Based Artificial Intelligence.

xtermin8r

#16
Sorry James, I fixed it.
Neural Net Based Artificial Intelligence.

jitterjames

it's OK I found it and it's probably better anyway since there may be other things that need to be fixed

xtermin8r

#18
Thanks James.

latest Python script much better than the previous one that got posted earlier, this one does subdirectories also, and gets rid of unwanted characters,  and there is no need to have media player classic running.


#-------------------------------------------------------------------------------
# Name:        VC Payload Xml Generator
# Purpose:     I need it
#
# Author:      xtermin8r
#
# Created:     21/05/2014
# Copyright:   (c) xtermin8r 2014
# Licence:
#-------------------------------------------------------------------------------
import re
import os
from re import findall
from xml.etree import ElementTree as ET

# Set the directories
mvpath = "E:\Videos\Music Vids"
xmlpath = "E:\Appz\Vox\VC_187_Eden\payloads\musicvideos.xml"

#function get rid of unwanted characters
def cfix(zx):
   global x
   f2 = re.sub( '\s+', ' ', zx).strip()
   f2 = f2.replace(" -", "")
   f2 = f2.replace("-", "")
   f2 = f2.replace(":", ".")
   x = f2
   return x

#create the root </PayloadsRoot> <PayloadsRoot>
root_element = ET.Element("PayloadsRoot")

for dirName, subdirList, fileList in os.walk(mvpath):
   for fname in fileList:
       #create the first subelemet <payload> </payload>
       pay_element = ET.SubElement(root_element, "payload")
       #create the first child <value> </value>
       child = ET.SubElement(pay_element, "value")
       child.text = dirName +"\\" + fname
       #create the second child <phrase> </phrase>
       child = ET.Element("phrase")
       #get the filename without the extension
       fname = ('.').join(fname.split('.')[:-1])
       #get rid of unwanted characters
       cfix(fname)
       fileName = x
       child.text = fileName
       #now append
       pay_element.append(child)

def indent(elem, level=0):
   i = "\n" + level*'\t'
   if len(elem):
       if not elem.text or not elem.text.strip():
           elem.text = i + '\t'
       if not elem.tail or not elem.tail.strip():
           elem.tail = i
       for elem in elem:
           indent(elem, level+1)
       if not elem.tail or not elem.tail.strip():
           elem.tail = i
   else:
       if level and (not elem.tail or not elem.tail.strip()):
           elem.tail = i

indent(root_element)
#print ( ET.tostring(root_element) )

output_file = open(xmlpath, 'w' )
output_file.write( '<?xml version="1.0" encoding="utf-8"?>'+'\n' )
output_file.write( '<!--A VoxCommando Payload file-->' +'\n' )
output_file.write( ET.tostring(root_element) )
output_file.close()




Enjoy !
Neural Net Based Artificial Intelligence.

xtermin8r

#19
I must admit this is bloody awesome, just been testing it and its working great, even when I speak to it in arabic, hindi, urdu, punjabi.

Video coming soon.
Neural Net Based Artificial Intelligence.

xtermin8r

#20
get the latest script from here:
http://voxcommando.com/forum/index.php?topic=1577.0
Neural Net Based Artificial Intelligence.

xtermin8r

#21
MPC = MPC-HC = Media Player Classic Home Cinema if you didn't know.

Latest news  on the MPC integration, I managed to write a python program that collects info like artist names  from file names and then create a artist  xml  payload for vc so that I can command vc to play all music videos or all mp3's ,  by Artist name, I also created another Python program that makes a playlist for MPC using the artist xml payload, a vc command executes this script and sends the playlist to MPC using command line arguments.


I'm gonna clean up the code before I decide to release it.

I might upload a video, who knows.





Neural Net Based Artificial Intelligence.

lja

Quote from: xtermin8r on June 09, 2014, 08:33:24 PM
MPC = MPC-HC = Media Player Classic Home Cinema if you didn't know.

Latest news  on the MPC integration, I managed to write a python program that collects info like artist names  from file names and then create a artist  xml  payload for vc so that I can command vc to play all music videos or all mp3's ,  by Artist name, I also created another Python program that makes a playlist for MPC using the artist xml payload, a vc command executes this script and sends the playlist to MPC using command line arguments.


I'm gonna clean up the code before I decide to release it.

I might upload a video, who knows.





Hi xtermin8r

Did you upload the video? Was the intergration completed? Would love to be able to try this out.

xtermin8r

#23
Hi lja
I'll try uploading a video tonight, integration is complete, if you want to try it then download what's needed.
Neural Net Based Artificial Intelligence.

xtermin8r

All mpc commands for vc, click on the link below to download them.

Neural Net Based Artificial Intelligence.

xtermin8r

#25
Scan contents of directories and sub directories to xml, click on the link below to download the script.

#-------------------------------------------------------------------------------
# Name:        Scan Music Videos
# Purpose:     I need it
#
# Author:      xtermin8r
#
# Created:     21/05/2014
# Copyright:   (c) xtermin8r 2014
# Licence:
#-------------------------------------------------------------------------------
import re
import os
from re import findall
from xml.etree import ElementTree as ET
import urllib, urllib2

# Set the directories
rootDir = "E:\Videos\Music Vids"
rootDir2 = "F:\Videos\Music Vids"
xmlpath = "E:\\Appz\\Vox\\payloads\\musicvideos.xml"
txtfile = open("E:\\Appz\\Vox\\payloads\\music_videos_list.txt", "wb")

#function: get rid of unwanted characters
def cfix(zx):
   global x
   f2 = re.sub( '\s+', ' ', zx).strip()
   f2 = f2.replace(" -", " ")
   f2 = f2.replace("- ", " ")
   f2 = f2.replace(" - ", " ")
   f2 = f2.replace("-", " ")
   f2 = f2.replace(":", " ")
   f2 = f2.replace("_", " ")
   f2 = f2.replace("5.1", "")
   f2 = f2.replace(".", " ")
   f2 = f2.replace("!", " ")
   f2 = f2.replace("1080p", " ")
   f2 = f2.replace("720p", " ")
   f2 = f2.replace("x264", " ")
   f2 = f2.replace("ac3", " ")
   f2 = f2.replace("AC3", " ")
   f2 = f2.replace("DTS", " ")
   f2 = f2.replace("DVD", " ")
   f2 = f2.replace("DvD", " ")
   f2 = f2.replace("VOB", " ")
   f2 = f2.replace("rip", " ")
   f2 = f2.replace("aac", " ")
   f2 = f2.replace("Rip", " ")
   f2 = f2.replace("hd", " ")
   f2 = f2.replace("HD", " ")
   f2 = f2.replace("Hd", " ")
   f2 = f2.replace("Hq", " ")
   f2 = f2.replace("BluRay", " ")
   f2 = f2.replace("Blu Ray", " ")
   f2 = f2.replace("1080i", " ")
   f2 = f2.replace("H264", " ")
   f2 = f2.replace("h264", " ")
   f2 = f2.replace("(", " ")
   f2 = f2.replace(")", " ")
   f2 = f2.replace("]", " ")
   f2 = f2.replace("[", " ")
   f2 = f2.replace("AlbumArtSmall", " ")
   f2 = f2.replace("folder", " ")
   f2 = f2.replace("AlbumArt", " ")
   f2 = re.sub( '\s+', ' ', f2).strip()
   x = f2
   return x

#create the root </PayloadsRoot> <PayloadsRoot>
root_element = ET.Element("PayloadsRoot")


def Scan(rootDir):
   for dirName, subdirList, fileList in os.walk(rootDir):
       for fname in fileList:
           if not fname.endswith (".jpg") :
               #create the first subelemet <payload> </payload>
               pay_element = ET.SubElement(root_element, "payload")
               #create the first child <value> </value>
               child = ET.SubElement(pay_element, "value")
               child.text = dirName +"\\" + fname
               #create the second child <phrase> </phrase>
               child = ET.Element("phrase")
               #get the filename without the extension
               fname = ('.').join(fname.split('.')[:-1])
               #Call function get rid of unwanted characters
               cfix(fname)
               fileName = x

               #Debug : Display file names
               #print(fileName)

               #Write filename to text file
               txtfile.write(str(fileName) + "\n")

               #now append
               child.text = fileName
               pay_element.append(child)

               child = ET.Element("subsetmatching")
               child.text = "true"

               pay_element.append(child)

def indent(elem, level=0):
   i = "\n" + level*'\t'
   if len(elem):
       if not elem.text or not elem.text.strip():
           elem.text = i + '\t'
       if not elem.tail or not elem.tail.strip():
           elem.tail = i
       for elem in elem:
           indent(elem, level+1)
       if not elem.tail or not elem.tail.strip():
           elem.tail = i
   else:
       if level and (not elem.tail or not elem.tail.strip()):
           elem.tail = i

#Main
#Call function Scan directory
Scan(rootDir)
#Another directory to scan
#Scan(rootDir2)
txtfile.close()

indent(root_element)
#Debug : View xml tree
#print ( ET.tostring(root_element) )

output_file = open(xmlpath, 'w' )
output_file.write( '<?xml version="1.0" encoding="utf-8"?>'+'\n' )
output_file.write( '<!--A VoxCommando Payload file-->' +'\n' )
output_file.write( ET.tostring(root_element) )
output_file.close()

#Send tts command to vox over http
url = urllib.URLopener()
url.open('http://127.0.0.1:8081/api/tts.speak&&scan has completed,sir')

Neural Net Based Artificial Intelligence.

xtermin8r

#26
Scan music video artists, this script will extract all artist names to an xml from the musicvideos.xml generated by the above script ScanMusicVideos.py,  make sure there is a hyphen between artist and song name.

#-------------------------------------------------------------------------------
# Name:        Extract elements from XML
# Purpose:
#
# Author:      xtermin8r
#
# Created:     10/06/2014
# Copyright:   (c) xtermin8r 2014
# Licence:     <your licence>
#-------------------------------------------------------------------------------
import urllib, urllib2
import re
import os
from re import findall
from xml.etree import ElementTree as ET

txtfile = open("E:\\Appz\\Vox\\payloads\\artist_videos.txt", "wb")
xmlin = "E:\Appz\Vox\Payloads\musicvideos.xml"
xmlout = "E:\\Appz\\Vox\\payloads\\ArtistVideos.xml"

#function: get rid of unwanted characters
def cfix(zx):

   f2 = re.sub( '\s+', ' ', zx).strip()
   #Remove Digits
   #f2 = re.sub(r"(^|\W)\d+", "", f2)

   f2 = f2.replace('xDR;', ' ')
   f2 = f2.replace(" -", " ")
   f2 = f2.replace("- ", " ")
   f2 = f2.replace(" - ", " ")
   f2 = f2.replace("-", " ")
   f2 = f2.replace(":", " ")
   f2 = f2.replace("_", " ")
   f2 = f2.replace("5.1", "")
   f2 = f2.replace(".", " ")
   f2 = f2.replace("!", " ")
   f2 = f2.replace("?", " ")
   f2 = f2.replace("@", " ")
   f2 = f2.replace("&#150", "-")
   f2 = f2.replace("1080p", " ")
   f2 = f2.replace("720p", " ")
   f2 = f2.replace("720P", " ")
   f2 = f2.replace("x264", " ")
   f2 = f2.replace("ac3", " ")
   f2 = f2.replace("AC3", " ")
   f2 = f2.replace("DTS", " ")
   f2 = f2.replace("DVD", " ")
   f2 = f2.replace("DvD", " ")
   f2 = f2.replace("VOB", " ")
   f2 = f2.replace("rip", " ")
   f2 = f2.replace("aac", " ")
   f2 = f2.replace("Rip", " ")
   f2 = f2.replace("hd", " ")
   f2 = f2.replace("HD", " ")
   f2 = f2.replace("Hd", " ")
   f2 = f2.replace("Hq", " ")
   f2 = f2.replace("BluRay", " ")
   f2 = f2.replace("Blu Ray", " ")
   f2 = f2.replace("1080i", " ")
   f2 = f2.replace("H264", " ")
   f2 = f2.replace("h264", " ")
   f2 = f2.replace("(", " ")
   f2 = f2.replace(")", " ")
   f2 = f2.replace("]", " ")
   f2 = f2.replace("[", " ")
   f2 = f2.replace("AlbumArtSmall", " ")
   f2 = f2.replace("folder", " ")
   f2 = f2.replace("AlbumArt", " ")
   f2 = re.sub( '\s+', ' ', f2).strip()
   global x
   x = f2
   return x

tree = ET.parse(xmlin)
root = tree.getroot()

#create the root </PayloadsRoot> <PayloadsRoot>
root_element = ET.Element("PayloadsRoot")

global t1
t1 = ""
n1 = 1

for data in root.findall('payload'):
   phrase = data.find('phrase').text
   value = data.find('value').text
   head, tail = os.path.split(value)
   value = ('.').join(tail.split('.')[:-1])
   #remove beginning digits
   value = re.sub('^[0-9]+.', '', value)
   #Remove empty lines
   #split before hyphen
   value = value.split('-', 1)[0]
   cfix(value)
   value = x
   if (value.lower() != t1.lower()):
       if t1 != value:
           if (value != ""):
               #remove beginning digits
               artist = re.sub('^[0-9]+.', '', value)

               #create the first subelemet <payload> </payload>
               pay_element = ET.SubElement(root_element, "payload")
               #create the first child <value> </value>
               child = ET.SubElement(pay_element, "value")
               child.text = str(n1)

               #create the second child <phrase> </phrase>
               child = ET.Element("phrase")

               child.text = artist
               #now append
               pay_element.append(child)

               child = ET.Element("subsetmatching")
               child.text = "true"
               #now append
               pay_element.append(child)

               n1 = n1 + 1
               #txtfile.write(str(artist) + "\n")
               txtfile.write(artist + "\n")
               #print(value)
   t1 = artist

txtfile.close()
def indent(elem, level=0):
   i = "\n" + level*'\t'
   if len(elem):
       if not elem.text or not elem.text.strip():
           elem.text = i + '\t'
       if not elem.tail or not elem.tail.strip():
           elem.tail = i
       for elem in elem:
           indent(elem, level+1)
       if not elem.tail or not elem.tail.strip():
           elem.tail = i
   else:
       if level and (not elem.tail or not elem.tail.strip()):
           elem.tail = i

indent(root_element)
#View xml tree
print ( ET.tostring(root_element) )

output_file = open(xmlout, 'w' )
output_file.write( '<?xml version="1.0" encoding="utf-8"?>'+'\n' )
output_file.write( '<!--A VoxCommando Payload file-->' +'\n' )
output_file.write( ET.tostring(root_element) )
output_file.close()


Neural Net Based Artificial Intelligence.

xtermin8r

Neural Net Based Artificial Intelligence.

xtermin8r

#28
artist to m3u playlist, this script scans the musicvideos.xml file created by the 1st script ScanMusicVideos.py and extracts all entries containing artist name and creates a m3u playlist file for mpc.


#-------------------------------------------------------------------------------
# Name:        Scan Music VidcArtists to m3u
# Purpose:
#
# Author:      xtermin8r
#
# Created:     18/07/2014
# Copyright:   (c) xtermin8r 2014
# Licence:     To Kill
#-------------------------------------------------------------------------------
from itertools import groupby
import urllib, urllib2
import re
import os
from re import findall
from xml.etree import ElementTree as ET
import sys
import subprocess
import urllib

pathmpc = "E:\Appz\Media Players\MPC-HC.1.7.3.x86\mpc-hc.exe"
pathvc = "E:\Appz\Vox\VoxCommando_1.951\VoxCommando.exe"
m3ufile = open("E:\\Appz\\Vox\\payloads\\Artist_list.m3u", "wb")

xml = "E:\Appz\Vox\Payloads\musicvideos.xml"

#-------------------------------------------------------------------------------
# get comamnd line arguments
#-------------------------------------------------------------------------------
if(len(sys.argv) > 1):
   string1 = (sys.argv)
   # join list as a string
   string1 = ' '.join(string1)
   # regex commandline argument from vc
   string1 = (re.findall('.py (.*)',string1))
   #store match 0
   string1 = string1[0]
#-------------------------------------------------------------------------------
# vc stuff
#-------------------------------------------------------------------------------
#DEBUG
#string1 = 'andain'
url = urllib.URLopener()
url.open('http://127.0.0.1:8081/api/tts.speak&&playing music videos by  ' + string1)
#-------------------------------------------------------------------------------

value = []
phrase = []

def ReadXml():
   for child in root:
       global nodup
       c1 = (child.find('value').text)
       if c1 is not None:
           if string1.lower() in c1.lower():
               value = (c1.encode("UTF-8"))
               m3ufile.write(str(value) + "\n")
               #print value
               phrase.append(value)
   return

#MAIN
tree = ET.parse(xml)
root = tree.getroot()
m3ufile.write("#EXTM3U" + "\n")
ReadXml()
m3ufile.close()
subprocess.call([pathmpc, "E:\Appz\Vox\Payloads\Artist_list.m3u"])


vc command to execute the script:

<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 1.9.5.6-->
<command id="890" name="Play videos by Artist" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
 <action>
   <cmdType>Launch.Hidden</cmdType>
   <params>
     <param>E:\Appz\Programming\Python26\python</param>
     <param>E:\Appz\Vox\PY\Artist2m3u.py {PF.1}</param>
   </params>
   <cmdRepeat>1</cmdRepeat>
 </action>
 <action>
   <cmdType>OSD.ShowText</cmdType>
   <params>
     <param>{PF.1}</param>
     <param />
     <param>30</param>
   </params>
   <cmdRepeat>1</cmdRepeat>
 </action>
 <phrase>play music videos by</phrase>
 <payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">E:\Appz\Vox\Payloads\ArtistVideos.xml</payloadFromXML>
</command>
Neural Net Based Artificial Intelligence.

xtermin8r

Neural Net Based Artificial Intelligence.