令人难以置信的新的编剧MIDI FX插件的Logic Pro X:免费脚本

An unsung hero in Logic Pro X is the Scripter MIDI FX Plug-in. Using JavaScript you can create your own MIDI FX. Peter Schwartz (Mr Environment to his friends) has created a special one to download.  

随着逻辑Pro X的逻辑,许多用户期待已久的祷告已回答:琶音器的问世,MIDI延迟,和弦存储器,以及其他基于MIDI的效果不再需要精心制造环境中的字面上有线手。 Theyve有效地替换了一系列新的MIDI效果插件插入乐器通道条8每带!

Logic Pro X’s new Instrument Channel Strip, shown here with four MIDI FX.

Logic Pro的XS新仪器通道地带,这里显示四个MIDI FX。


苹果逻辑开发团队已经做了最高级的工作,创造一个非常有用的套件MIDI FX与现代的图形用户界面。

The new Arpeggiator and Chord Trigger plugins

新的琶音和弦触发插件。


钉子在棺材环境吗?

在外汇集合包括一个新的插件,有效地消除95%的环境需要使用MIDI处理。对于我来说,最令人兴奋的的收集,一个让我们写自己的自定义MIDI插件插件!其名为编剧。

Figure 1: The custom appearance of the GUI for the free script linked in this article!

图1:自定义外观的GUI免费的脚本挂在这篇文章中!


编剧插头

为Javascript脚本是指用于指示,语言这个插件如何处理MIDI,以及什么样的交互式菜单,滑块和复选框,您可能要添加的脚本编程GUI(如上图所示)。

插件功能集成的Javascript文本编辑器/棉短绒(见图2)。它的一切都自足和相当方便的小操作!

JavaScript本身是不是非常难学。学习任何编程语言,它都有自己的特质,也许是有点难以把握在第一。但是,一旦你渡过了难关,世界上几乎没有限制,你可以做什么来操纵对你的音乐最终目标的MIDI数据。而内置的棉短绒指出编码错误做得很好。不,我永远做任何[啊哈]。

最好,流程,这将是非常耗时的,如果不是无法想象的艰苦环境中创建,现在可以创建在可能的情况下,短短的几行Javascript的。

Figure 2: some of my custom code for the EXS 24 PolyArticulation Split Script

图2:我的自定义代码的EXS PolyArticulation的分割脚本。


无尽的可能性

要创建一个MIDI延迟输出一个过程,其中每个重复在不同的MIDI通道,创建多音色的延迟?或约的keyswitching设置的dubstep摆动听起来什么键选定范围控制LFO率?算法组合工具,和弦strummers,和Legato处理器等更多先进的理念是在那些建议在引进中的脚本逻辑X效应手册,在此链接下载。

您也可以创建插件,有针对性地加强和扩大特定的插件的功能,而对于这篇文章中我做到了这一点。


关于全字符串

正常情况下,完整的字符串文书只产生一个连奏弦的声音。但隐藏在这个仪器是一个完整的字符串关节,包括连奏,拨奏,断奏,颤音,颤音两种恭维!要访问这些声音,我做了一个微小的修改EXSs前面板设置,这让我的脚本生成的MIDI信息来释放这些隐藏的关节。

Settings for EXS that gave my Script a “hook” to access hidden articulations in Full Strings+

给我一个钩子脚本访问隐藏的关节在全弦乐设置EXS


免费的东西:EXS24的PolyArticulation脚本

此脚本允许您设置了键盘分割,发挥不同的关节两侧的分割。或者,您可以将分割点设置过高或过低的票据在键盘上发挥任何单一(通常隐藏)衔接!

开始下载该项目的例子,这是我现场录制和回放。听低音注意到声音Legato公司,而右手注意到声音思加图,牢记这两种声音都来自一个单一的实例EXS!

现在试试这个:改变下面拆分的声音从Legato颤音和回放例如听到一个更加充满张力的版本。 (你会明白我的意思!),或者选择以下拨弦以上的分裂和颤音。

脚本,像所有其它MIDI FX,非破坏性的插入FX:他们总是生活和拦截后进入仪器通道的MIDI数据,但之前到达仪器插件本身。所以,当你记录的一部分,轨道将只包含原始笔记和控制器,就像在例如记录。事实上,如果你检查事件列表示例项目中你会看到,它仅包含注释。然而,脚本在性能或播放期间,会产生额外的MIDI数据告诉EXS关节触发的注意事项,上面和下面分割。

我希望你找到这个设置很有用素描部分字符串,以及为脚本的力量,激起你的食欲!

点击这里免费下载我的逻辑X项目包括EXS24的PolyArticulation的MIDI FX脚本文件。

Peter Schwartz, composer, orchestrator, arranger, pianist, synthesist, and musical director, began piano studies at age 5 and went on to earn a degree in piano performance from Manhattan School of Music. It wasn't long afterward that he began working as a product specialist for New England Digital (Synclavier) and also as a sound progr... Read More

Discussion

Matt
Peter Schwartz thank you for the gift. Incredible.
shiftjam
Great stuff! Thank you for that. Give us more scripts, I think there is a lot of power in the scripter plugin.

Best regards,
Leonard
Chris
More of this, please!

Amazing!

This was one of my favorite updates off of the bat on Logic Pro X
tin_ears
Amazing! Thanks so much!
Magic Fingers
Wow!!! are you kidding me? Logic Pro X is taking away the need to learn several 3rd party apps and become exhausted with learning environment tricks (stuff that I am doing daily in LP9), and it's all under one hood now. I can't wait to upgrade my operating system so I can take advantage of all these new features. Way to go Logic Pro!!!
Magic Fingers
Wow!!! are you kidding me? Logic Pro X is taking away the need to learn several 3rd party apps and become exhausted with learning environment tricks (stuff that I am doing daily in LP9), and it's all under one hood now. I can't wait to upgrade my operating system so I can take advantage of all these new features. Way to go Logic Pro!!!
Peter Schwartz
I'm really glad you guys are digging this, and getting insight and inspiration as to what Scripting can do.
Cyril Blanc
Hello
I was looking to access Meta data to handle score accidents
Did you find the trick ?

Best
Cyril
Peter Schwartz
It does not seem possible to generate Meta or Fader events from a script.

Even if it was possible, you can't use Scripts to process data before it enters Logic (at the Sequencer Input object in the Environment), and that is the ONLY place where Meta events can be passed into Logic for the purpose of recording them on a track. Since you can't insert a Script in any object in the Environment, and since Scripts can't generate Meta events anyway, it's just not possible.

Now, you can still attempt to use Environment objects to generate Meta events (for score symbols or whatever) and feed them into the Sequencer Input. However, it will be an exercise in futility. Or, I should say, in Logic 9 and prior it was futile, because something in the code prevented that from working. I haven't tried it in Logic X tho. If I get a chance I will and post back here if I get a positive result.
Cyril Blanc
Hello Sky

Thanks for your answer.

I do not want to generate meta, but read Meta that are in the score to send changes of articulation in Vienna Symphonic Library first, I may also extend it to Play and .......

It will look like this :

If Meta = "Legato" then send "C0"
If Meta = "Staccato" then send "C#0
if Meta = "pppp" then send "ctrl 7 with value 20"
if Meta = "ppp" then send "ctrl 7 with value 30"
if Meta = "pp" then send "ctrl 7 with value 40"
if Meta = "p" then send "ctrl 7 with value 50"
if Meta = "f" then send "ctrl 7 with value "64"
.......


So how can you read Meta ?
Do you have the list of the Meta with there code ?

Thanks in advance

Best

Cyril
Peter Schwartz
Scripts cannot read Meta Events, so you're out of luck there.

I believe it's possible to do this directly in the environment. However, I'd like to suggest that the idea of associating dynamic markings with specific values sounds good in theory but isn't a practical approach. First, just adjusting the volume (CC#7) won't give your parts a natural sound. Second, if you had a sudden (subito) jump from "p" to "f" and any of the "p" notes overlapped even slightly into the "f" part, the transition is going to sound unnatural.

While riding volume alone won't give you an very natural sound, it's better than nothing, and in that case I'd suggest riding automation on your parts to match the dynamics you want.

If you want natural dynamics from Vienna stuff, you have to use a combination of riding the values of velocity xfade, the filter, and volume. But that's a whole other subject. :)
Cyril Blanc
Hi Ski

Thanks for your mail


> Scripts cannot read Meta Events, so you're out of luck there.

So this Scripter IS A PIECE OF S.....


I AM SO DISAPPOINTED, IF I HAVE KNOW THAT I WILL NOT HAVE BUY LOGIC X

I AM FEDUP OF LOGIC DEVELOPMENT TEAM THAT DOES NOT DEVELOP WHAT USERS NEED AND DEVELOPING THINGS WE DONT NEED

WE ARE Thousands USERS USING VSL, QLSO ... and that are needing to drive articulation changes from score
Nev
Cyril is right... the Scriptor is Totally Useless.... First i thought... yeah great ... then i began to script articulation switches.... everything is just recordable into the Automation ... I dont need something like this ... i need the midi data or the Meta Events, recorded into the file... not into the Automation....
Cyril Blanc
Cubase, Notation, Sibelius, Finale has listen to there user. They are totally interfaced with VSL, Play .....

Cubase has the VST Expression Map since more than a year !

Logic is behind ! shame !!!!!!!!!
Dave
Hi,

I am still downloading Logic X on a very slow connection so as of yet I cannot tell for myself but I have a question:

Can I, for example, make a script that SOMETIMES plays one chord and sometimes another given a single note AND actually 'use' that data?

From the article:

Scripts, like all other MIDI FX, are non-destructive insert FX: they are always “live” and intercept MIDI data after it enters the instrument channel but before it arrives the instrument plug-in itself. So when you record a part, the track will contain only your original notes and controllers, just as in the example recording. In fact, if you examine the Event List in the example project you’ll see that it only contains notes. During performance or playback, however, the Script generates additional MIDI data that tells EXS which articulations to trigger for notes above and below the split.


My question is: Can I record or save somehow the additional MIDI data for later use? eg editing?

I hope this makes sense
Cyril Blanc
you can do this with the environment already
Peter Schwartz
Hi Dave, what you said totally makes sense, and you've got it exactly right. Scripting and other MIDI FX are "non-destructive" and therefore only process MIDI data entering the software instrument's channel strip. What you'll see in a region is the data as it originally came into the software instrument's channel strip. But within the channel strip, the MIDI is processed on its way to the plugin instrument.

Recording the output of the process (i.e., the output of the Script) is proving problematic. In fact, I've been working hard trying to find a foolproof way to record the output of a Script without any kind of "gotchas". I think I'm making progress, so "please stand by". :)
Peter Schwartz
Cyril, can you explain how you do this in the environment? Are you talking about using IAC?
Cyril Blanc
You do that with "chord memorizer "

You can add "transformers" that will select different "chord memorizer " depending of either a CC change or a specific note range

Have one in Minor, another one in Major, another in Major 7 ........

If you want to record the result you send the end of the chain to another midi instrument and record it
Peter Schwartz
Just read your reply. I don't believe your idea will work, because you can't record the output of an instrument. So if you cabled your environment process to another MIDI instrument, it would play that instrument but it wouldn't be recorded.
Cyril Blanc
to record if it does not work connect to sequencer input
Chris
Hi Peter,

Thanks for the awesome little script, however for some reason I cannot get it to work properly.

I am literally copying and pasting the script from the file in your article into the scripter in a new project in Logic Pro x (I have even saved it as a preset in the script window).

Basically when I run the script, the GUI/front end loads up the two boxes to select the play methods (legato, pizzicato etc) and the Split note (e.g. C3) but it doesnt seem to actually split the keyboard - or change the sound according to the play methods I select. When I looked in the script, it says the following
Pluginparemeter[0] missing unit
Pluginparemeter[3] missing unit

Which I assume is the above split and below split paremeters not working properly.

I am a bit of a code newb so not sure how, in the process of my copy and paste, I am getting this wrong haha

Any info appreciated.

Thanks in advance
Chris

P.S do you know of anywhere we can get more scripts like this - been looking around and not much available.

Peter Schwartz
Hi Chris, sorry you're having trouble with it. The messages you see about the missing unit in the Plugin Parameter are benign. However, I've gone and changed the code so that it no longer reports that message. It's working 100% as far as I can tell at 3:30 in the morning.

I'm going to post a new message after this one with the new code. You can copy and paste it into the Scripter. Then, hit "Run Script". It should work 100% fine. If not, post back.

Regarding other Scripts, it's early days yet. Presently there are problems associated with having too many scripts in a project which apparently Apple is aware of. But I'm pressing on all the same, and have a variety of plugins that I'm developing to do all kinds of neat stuff.
Peter Schwartz

function HandleMIDI(e) {

var sus = new ControlChange;

if (e instanceof NoteOn > 0) {
if (e.pitch < GetParameter("Split Point")) {
sus.number = 1;
sus.value = (GetParameter("Below Split")*25);
sus.send();
} else {
sus.number = 1;
sus.value = (GetParameter("Above Split")*25);
sus.send();
}}
e.send();
e.trace();
}

var PluginParameters = [

{name:"MacProVideo", type:"menu",unit:"blobs",minValue:0,maxValue:1,numberOfSteps:2,defaultValue:1,
valueStrings:["Off","On"]},

{name:"Above Split", type:"menu", unit:"blobs",minValue:0,maxValue:5,numberOfSteps:6,defaultValue:1 ,
valueStrings:["Legato","Staccato", "Pizzicato","Tremolo","H.Trill","W.Trill"]},

{name:"Split Point", type:"menu", unit:"blobs",minValue:0,maxValue:127,numberOfSteps:128,defaultValue:60,
valueStrings:MIDI._noteNames},

{name:"Below Split", type:"menu",unit:"blobs", minValue:0, maxValue:5, numberOfSteps:6, defaultValue:0,
valueStrings:["Legato","Staccato", "Pizzicato","Tremolo","H.Trill","W.Trill"]}];
Chris
Thanks for this. I tried the new code and alas still no love.

Perhaps its something to do with the setup of my instrumentation - I am going into EXS24 > Orchestral > Strings > FullStings+ right?

I have tried Stereo and Multi output versions - but still get the same result.

Basically, the scripter says it works (so no more missing plugins) but seems to be sticking to the default sound that loads up when the sampleter starts (i.e. doesnt change when I change the selections in the scripter)

not sure how the flipping flip I am going wrong with this...

Cheers for your help
Chris


Peter Schwartz
Gonna suggest that you download the project from the link above (it's been updated with the new code) and save the Channel Strip as a new Channel Strip Setting.

Note that the script won't work unless Full Strings+ is modified as shown in the picture above, so the easiest move would be to save this as a Channel Strip Setting. No need to copy and paste code to make it work.

Also, just for the record (wink) there weren't any missing plugins. The original code worked fine. I just didn't specify a few non-critical parameters that resulted in what appeared to be error messages but had no bearing on how well the script worked.
Chris
Boom. That did it. Nice one, thanks.

Is this script limited to just FullStrings+ in EXS or are there other ways it can be tweaked?

Awesome job though, sounds great with the two 'multis' at the same time.

Chris

Peter Schwartz
Hi Chris,

Glad it's working for you.

Yes, this script can be used with any EXS-24 instrument that has multiple samples (articulations) where each one is programmed within the EXS instrument itself to have a unique Articulation ID. Critical to the operation is setting the EXS's modulation matrix as shown above.

Full Strings+ has 6 articulations, and the value of 25 you see in the code specifically addresses having six Articulation ID's. If an instrument had a greater or lesser number of articulations, that value would have to be adjusted (and so would the labels in the menus).
Itay
Hi
Thanks all
Trying to write a script to filter the channel strip incoming midi channel (like environment's channel splitter.any ideas?
thanks again
Jackodrums
I've followed Ski's method laid out in another forum thread to allow for more expressive playing of stock EXS strings using the modwheel (thanks!). But does anyone know if you can program a script that approximates this with non-Logic EXS instruments like Garritan or Sonatina Symphonic Orchestra? Some of these free or cheap libraries could work much better I feel if we could impose the same filter cutoff and volume tweaks using the mod wheel for better expression. Thanks in advance!
vewilya
Thanks Peter for these insights. I have to say though, it would be nice to have a MacProVideo tutorial about the Logic Scripter. For someone who comes from the musicians side it's quite difficult to get into coding JS/Midi... But this looks really promising I think. Enormous potential this scripture has! (Greetings from Yoda) U

Want to join the discussion?

Create an account or login to get started!