ReaScript нужны бета-тестеры на OSX (1 онлайн

Viente

New Member
16 Мар 2012
47
59
0
40
Сделал скрипт который быстро экспортирует выбранный айтем из проекта в предустановленную пользователем папку (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)
 
Последнее редактирование:
  • Like
Реакции: spred

Viente

New Member
16 Мар 2012
47
59
0
40
Лучше создать папку Scripts в папке где Рипер хранит все свои ресурсы (не знаю где это на Маке)

в ней создать суб-папку "Export Sample to Library" и в ней cоздать файл например export_sample_to_library.py (обязательно чтобы это был plain text) и скопировать туда содержимое выше

Далее в Рипере : Actions -> ReaScript: New/load...
 

Viente

New Member
16 Мар 2012
47
59
0
40
Уже вижу первый косяк на маке

Путь не просто будет ввести руками, как вообще на маке задать путь к конкретной папке? я бы мог сделать что при определении оси как OSX она бы прописала путь сама например до папки User Folder

К сожалению API функции ReaScript не позволяют задать папку через GUI :(

Я в принципе бывший пользователь Mac OS, так что ориентируюсь в среде
 

spred

Соус и жизнь
28 Дек 2011
998
290
0
Самара
папка рипера
<username>/Library/Application Support/REAPER
внутри есть и папка скриптов (пустая) и ini файл

reaper.jpg

Пока что у меня вообще не получилось запустить ReaScript – рипер вылетает при любой попытке обращения к скриптам – вызов через run или open/add script
Рипер 64 битный
 

spred

Соус и жизнь
28 Дек 2011
998
290
0
Самара
Version 2.7.3 (2.7.3)
Ставлю 3.2.3, сейчас отпишусь апдейтом

установил Version 3.2.3 (3.2.3), ситуация не изменилась – рипер закрывается при попытке открытия скриптов
 

spred

Соус и жизнь
28 Дек 2011
998
290
0
Самара
Никакие скрипты не запускаются, ваш пока убран из риперовских ресурсов для проверки.
 

Viente

New Member
16 Мар 2012
47
59
0
40
Ну что больше никто? жаль, придется оставить это дело
 

Сейчас онлайн (Пользователей: 0, Гостей: 1)