Сделал скрипт который быстро экспортирует выбранный айтем из проекта в предустановленную пользователем папку (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)
	
			
				Последнее редактирование: 
				
		
	
										
										
											
	
										
									
								
	
	