Сделал скрипт который быстро экспортирует выбранный айтем из проекта в предустановленную пользователем папку (Samples Library, задается при первом запуске один раз). Позволяет выбрать имя, категорию, темп и тональность для имени файла. Если выбран MIDI айтем, сначала конвертирует его в Audio, затем экспортирует
Удобно для быстрого сохранения собственных лупов, кусков трека, прочих понравившихся звуков для дальнейшего использования.
Удобно для быстрого сохранения собственных лупов, кусков трека, прочих понравившихся звуков для дальнейшего использования.
Код:
# ------------------------------------------
# Export Sample to Library
# Author : VIENTE
# ------------------------------------------
### Import modules ########################################################################################################################################
import re # Import Regular Expressions module
import os # Import OS module
import shutil # Import SHUTIL module
import subprocess # Import Sub Process module
from reaper_python import RPR_ShowConsoleMsg as log
### Define variables and functions ########################################################################################################################
def getPreferences():
global userLibrary
preferencesPath = os.path.join(sys.path[0], "Preferences.ini")
if not os.path.exists(preferencesPath):
RPR_ShowMessageBox("Can't find your Library path. New Library path will be created", "Warning", 0) # 0=OK
getPreferencesPath = RPR_GetUserInputs('Library Path', 1, 'Enter your Library path', "", 1024);
if getPreferencesPath[0]:
userPathRaw = str(getPreferencesPath[4])
userPath = "[Library Path]=" + userPathRaw
createPreferencesFile = open(preferencesPath, "w")
createPreferencesFile.write(userPath)
userLibrary = userPathRaw
fetch1 = 1
return fetch1
else:
fetch1 = 0
return fetch1
for line in open(preferencesPath):
if "=" in line:
userLibrary = line.split("=")[1]
fetch1 = 1
return fetch1
def checkConditions(): return RPR_CountSelectedMediaItems(0)
def checkSourceType():
selItem = RPR_GetSelectedMediaItem(0, 0)
selTake = RPR_GetActiveTake(selItem)
sourceFile = RPR_GetMediaItemTake_Source(selTake)
sourceType = RPR_GetMediaSourceSampleRate(sourceFile) # 0 = MIDI
if sourceType == 0:
typeMIDI = RPR_ShowMessageBox("MIDI item selected. Do you want to convert it?", "Warning", 4)
if typeMIDI == 6:
RPR_Main_OnCommand(40290,0) # Set time selection to item
RPR_Main_OnCommand(40209,0) # Glue item
selItem = RPR_GetSelectedMediaItem(0, 0)
selTake = RPR_GetActiveTake(selItem)
sourceFile = RPR_GetMediaItemTake_Source(selTake)
fetch2 = 1
return fetch2, selItem, selTake, sourceFile
else:
fetch2 = 0
return fetch2, selItem, selTake, sourceFile
fetch2 = 1
return fetch2, selItem, selTake, sourceFile
def setParameters():
masterTempo = int(RPR_Master_GetTempo())
userInputs = "Name,Category,Key,Tempo"
defaultValues = ",,C,%d" % masterTempo
getRawData = RPR_GetUserInputs('Export to Sample Library', 4, userInputs, defaultValues, 1024);
if getRawData[0]:
getUserData = getRawData[4].split(',')
sampleName = getUserData[0]
sampleCategory = getUserData[1]
sampleKey = getUserData[2]
sampleTempo = getUserData[3]
fetch3 = 1
return fetch3, sampleName, sampleCategory, sampleKey, sampleTempo
else :
sampleName = ""
sampleCategory = ""
sampleKey = ""
sampleTempo = ""
fetch3 = 0
return fetch3, sampleName, sampleCategory, sampleKey, sampleTempo
def exportSample():
sourceArray = RPR_GetMediaSourceFileName(sourceFile, "", 512)
filePath = sourceArray[1]
fileExt = os.path.splitext(filePath)[1]
newFile = sampleName +"_" + sampleKey + "_" + sampleTempo + fileExt
categoryPath = os.path.join(userLibrary, sampleCategory)
if not os.path.exists(categoryPath):
os.makedirs(categoryPath)
destPath = os.path.join(categoryPath, newFile)
shutil.copy2(filePath, destPath)
getOpenFolder = RPR_ShowMessageBox("Sample exported successfuly. Do you want to open folder?", "Caption", 4)
if getOpenFolder == 6:
if sys.platform == "darwin":
def openFolder(path):
subprocess.check_call(["open", "--", path])
elif sys.platform == "win32":
def openFolder(path):
subprocess.check_call(["explorer", path])
openFolder(categoryPath)
else: RPR_Main_OnCommand(65535,0) # Do nothing
### Calling actions & functions ###########################################################################################################################
if checkConditions() == 1:
fetch1 = getPreferences()
if fetch1 == 1:
fetch2, selItem, selTake, sourceFile = checkSourceType()
if fetch2 == 1:
fetch3, sampleName, sampleCategory, sampleKey, sampleTempo = setParameters()
if fetch3 == 1:
exportSample()
else: RPR_Main_OnCommand(65535,0) # Do nothing
else: RPR_Main_OnCommand(65535,0) # Do nothing
else: RPR_Main_OnCommand(65535,0) # Do nothing
elif checkConditions() == 0: RPR_ShowMessageBox("No item selected.", "Error", 0)
else: RPR_ShowMessageBox("Please select only one item to export.", "Error", 0)
Последнее редактирование: