ΣSigmaStudio English

Примеры скриптов для интерфейса IScripted

На этой странице приведены несколько примеров скриптов, демонстрирующих использование API интерфейса IScripted в окне скриптов SigmaStudio.

Обновление параметров (Control Updates)

Приведенный ниже скрипт можно использовать для обновления различных параметров на показанной схеме. Обновление параметров (Control Updates)

controlupdate.sss
// #LANGUAGE# C#
// ------------------Linear Gain ----------------
// установить коэффициент усиления модуля 'Gain1' равным 0.25
ss.ObjectSetProperties("setControlValue", "Gain1", 0, 0, "Gain", 0.25);
// установить коэффициент усиления модуля 'Gain1_2' равным 0.15
ss.ObjectSetProperties("setControlValue", "Gain1_2", 0, 0, "Gain", 0.15);
 
 
// -------------------Delay ----------------------
// Установить текущую задержку 10 в 'Delay1'
ss.ObjectSetProperties("setControlValue", "Delay1", 0, 0, "DelayValue", 10);
// Установить текущую задержку 10 в 'Delay2'
ss.ObjectSetProperties("setControlValue", "Delay1_2", 0, 0, "DelayValue", 20);
// ------------------ Param EQ ----
// Обновить частоту первого фильтра в 'Param EQ1 до 50
ss.ObjectSetProperties("setControlValue", "Param EQ1", 0, 0, "Frequency10", 50);
// Обновить частоту второго фильтра в 'Param EQ1 до 100
ss.ObjectSetProperties("setControlValue", "Param EQ1", 0, 0, "Frequency11", 100);
// Обновить частоту третьего фильтра в 'Param EQ1 до 200
ss.ObjectSetProperties("setControlValue", "Param EQ1", 0, 0, "Frequency12", 200);
 
 
// Обновить коэффициент усиления первого фильтра в 'Param EQ1 до 0.15
ss.ObjectSetProperties("setControlValue", "Param EQ1", 0, 0, "Gain10", 0.15);
// Обновить коэффициент усиления второго фильтра в 'Param EQ1 до 0.25
ss.ObjectSetProperties("setControlValue", "Param EQ1", 0, 0, "Gain11", 0.25);
// Обновить коэффициент усиления третьего фильтра в 'Param EQ1 до 0.75
ss.ObjectSetProperties("setControlValue", "Param EQ1", 0, 0, "Gain12", 0.75);
 
// Поскольку элементы управления в pramaEQ находятся внутри другой формы, для загрузки изменённых параметров в целевое устройство необходимо вызвать следующие API.
object paramEQ1Object = ss.GetCellObject("Param EQ1");
ss.ObjectGetMethod(paramEQ1Object, "PackDataAllControls").Invoke(paramEQ1Object, new object[]{});

Получение текущего роста (Get Current Growth)

Приведенный ниже скрипт можно использовать для получения текущего роста модулей на показанной схеме. Получение текущего роста (Get Current Growth)

getGrowth.sss
// #LANGUAGE# C#
// ------------------ISIB----------------
// Получить текущий рост 'ISIB1'
object[] output;
ss.ObjectGetProperties("getCurrentGrowth", "ISIB1", out output, 0);
ss.PrintLine(output[0].ToString());
ss.PrintLine(output[1].ToString());
 
// ------------------General Filter----------------
// Получить текущий рост 'Gen Filter1'
ss.ObjectGetProperties("getCurrentGrowth", "Gen Filter1", out output, 0);
ss.PrintLine(output[0].ToString());
ss.PrintLine(output[1].ToString());
 
// ------------------Input----------------
// Получить текущий рост 'Input1'
ss.ObjectGetProperties("getCurrentGrowth", "Input1", out output, 0);
ss.PrintLine(output[0].ToString());
ss.PrintLine(output[1].ToString());
 
// ------------------Output----------------
// Получить текущий рост 'Output1'
ss.ObjectGetProperties("getCurrentGrowth", "Output1", out output, 0);
ss.PrintLine(output[0].ToString());
ss.PrintLine(output[1].ToString());

ICRegisterWrite и ICRegisterRead

Приведенный ниже скрипт можно использовать для записи и чтения регистра без параметра 'ICName'.

ICRegisterWrite и ICRegisterRead

I2CExample_Register_Read_And_Write.sss
// #LANGUAGE# C#
// --------------- FIR Filter ---------------
byte[] _tableValues = new byte[40] {0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,
                                    0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,
                                    0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,
                                    0x00,0x00,0x00,0x03};
byte[] readValues;    
 
// ---------- API ICRegisterWrite ---------
ss.ICRegisterWrite( 40,_tableValues, 0, 112 ,0x001B, 2, 4, 0, 0);
 
// ---------- API ICRegisterRead ----------
ss.ICRegisterRead( 40, out readValues, 0, 112 ,0x001B, 2, 4, 0, 0);
 
// ---------- цикл for для вывода считанных значений ----------
for(int i = 0; i < readValues.Length; i ++)
{
// Вывести значения побайтово
ss.PrintLine(readValues[i].ToString()); 
}                                
SPIExample_Register_Read_And_Write.sss
// #LANGUAGE# C#
// --------------- FIR Filter ---------------
byte[] _tableValues = new byte[40] {0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,
                                    0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,
                                    0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,
                                    0x00,0x00,0x00,0x03};
byte[] readValues;    
 
// ---------- API ICRegisterWrite ---------
ss.ICRegisterWrite( 40,_tableValues, 1, 0 ,0x0014, 2, 4, 0, 0);
 
// ---------- API ICRegisterRead ----------
ss.ICRegisterRead( 40, out readValues, 1, 0 ,0x0014, 2, 4, 0, 0);
 
// ---------- цикл for для вывода считанных значений ----------
for(int i = 0; i < readValues.Length; i ++)
{
// Вывести значения побайтово
ss.PrintLine(readValues[i].ToString()); 
}                                

Тестирование микшера NxM (линейный)

Следующий скрипт создает схему для ADAU1467 с микшером NxM и проверяет его функциональность для заданной конфигурации входа/выхода.

NxM_Mixertest.sss
// #LANGUAGE# C#
// Измените приведённые ниже переменные, чтобы создать тестовый NxM микшер для конкретной конфигурации входов и выходов.
int inputs = 8;
int outputs = 4; 
 
// *********Локальные переменные*************//
double GainInc = 0.001;
double DCInc = 0.1;
double[] InputDCValues = new double[inputs];
double[] OutputReadBackValues = new double[outputs];
object[] DCModuleObjects = new object[inputs];
object[] RBModuleObjects = new object[outputs];
double[,] GainValues = new double[inputs, outputs];
double[] ActualResults = new double[outputs];
double[] ExpectedResults = new double[outputs];
HResult rest;
ss.EnableLoggingMode(true);
// Создать входные векторы.
ss.ProjectNew();
Object IcObject = ss.ObjectInsert("ADAU1467", 300, 100);
Object USBiObject = ss.ObjectInsert("USBi", 50, 100);
rest =ss.ObjectConnect("USB Interface", 0, "IC 1", 0);
int X = 300; 
int Y = 100; 
 
// Добавить ячейку и алгоритм
object MixerCellObject = ss.ObjectInsert("NxM Mixer (Linear)", X, Y);
rest = ss.ObjectSetProperties("addAlgorithm", MixerCellObject, "IC 1", "NxM Mixer Slew");
ss.PrintLine("Mixer Module Added");
 
// рост входа и выхода
rest = ss.ObjectSetProperties("growAlgorithm", MixerCellObject, 0, inputs - 2, 0); // рост входа
rest = ss.ObjectSetProperties("growAlgorithm", MixerCellObject, 0, outputs - 1, 1); // рост выхода
ss.PrintLine("Mixer Module Grown");
 
// Установить коэффициенты усиления для теста
int index = 1;
for (int i = 0; i < inputs; i++)
{
	for (int j = 0; j < outputs; j++)
	{
		GainValues[i, j] = index++ * GainInc;
		rest = ss.ObjectSetProperties("setControlValue","NxM Linear1", j, i , "Gain" + j +"_" + i, GainValues[i, j]);
	}
}
 
// Добавить DC для входов
for (int i = 0; i < inputs; i++)
{
	object DCCellObject = ss.ObjectInsert("DC Input Entry", X - 100, Y + i * 100);	
	rest =ss.ObjectConnect(DCCellObject, 0, MixerCellObject, i);
	// ss.PrintLine("DC Module " + i + " Added");
	DCModuleObjects[i] = DCCellObject;
	InputDCValues[i] = (i + 1) * DCInc;	
	rest = ss.ObjectSetProperties("setControlValue", DCCellObject, 0, 0 , "DC", InputDCValues[i]);
}
 
// Добавить Readback для выходов
for (int i = 0; i < outputs; i++)
{
	object RBCellObject = ss.ObjectInsert("DSP Readback", X + 100, Y + i * 100);	
	rest =ss.ObjectConnect(MixerCellObject, i, RBCellObject, 0);
	// ss.PrintLine("ReadBack Module " + i + " Added");
	RBModuleObjects[i] = RBCellObject;
}
 
// Загрузить
ss.ProjectLinkCompileDownload();
System.Threading.Thread.Sleep(3000);
 
ss.PrintLine("*****************************************");
bool isFailed = false;
for (int outIndx = 0; outIndx < outputs; outIndx++)
{
	// Найти адрес параметров readback
	string[] names;
	int[] addresses;
	ss.ICGetParamNamesAndAddresses("IC 1", RBModuleObjects[outIndx], out names, out addresses);
	int RBModuleAddresse = addresses[0];
 
	// Вычислить ожидаемый результат и сравнить с фактическим результатом.
	ExpectedResults[outIndx] = 0; 
	for (int inIndx = 0; inIndx < inputs; inIndx++)
	{
		ExpectedResults[outIndx] += GainValues[inIndx, outIndx] * InputDCValues[inIndx];
	}
 
	// Считать фактический результат
	float valRead;
	ss.ICParameterRead("IC 1", RBModuleAddresse, 8, 24, out valRead);
	ActualResults[outIndx] = valRead;
	double error = System.Math.Abs(ExpectedResults[outIndx] - ActualResults[outIndx]);
	ss.PrintLine(System.String.Format("Out{0}: Expected = {1:0.00000000000000f}  Actual = {2:0.00000000000000f} Error = {3:0.00000000000000f}", outIndx, ExpectedResults[outIndx], ActualResults[outIndx],error ));
	if (error > 0.00001)
	{
		isFailed = true;
	}
}
ss.PrintLine("*****************************************");
if (isFailed)
{
	ss.PrintLine("Test failed");
}
else
{
	ss.PrintLine("Test Pass");
}

Обновление параметров для AutoEQ

Приведенный ниже скрипт можно использовать для автоматизации модуля Auto EQ.

AutoEQScript.sss
// #LANGUAGE# C#
 
ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "RespType_0", "Impulse");
ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "RespType_1", "Impulse");
ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "RespType_2", "Impulse");
ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "ResponseFile_0", "C:\\SSExampleSchematics\\S300\\AutoEQ\\Woofer.txt");
ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "ResponseFile_1", "C:\\SSExampleSchematics\\S300\\AutoEQ\\Mid 1.txt");
ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "ResponseFile_2", "C:\\SSExampleSchematics\\S300\\AutoEQ\\Tweeter.txt");
 
ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "TargetResponseCsv_0", "C:\\SSExampleSchematics\\S300\\AutoEQ\\TargetResponse.csv");
 
ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "DesignAll", true);