Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
wiki:hosting_atom_2_in_ns2 [2021/05/03 00:43] – MisplacedDevelopment | wiki:hosting_atom_2_in_ns2 [2021/05/14 22:55] (current) – MisplacedDevelopment | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | =====Atom 2 and NS2===== | + | Atom 2 and NS2 |
- | ====Why use Atom 2 and NS2?==== | + | =====Why use Atom 2 and NS2?===== |
NS2 already provides one of the best interfaces for arranging a song. Using a high level zoomable view of your song you can easily manipulate clips of MIDI on a timeline. | NS2 already provides one of the best interfaces for arranging a song. Using a high level zoomable view of your song you can easily manipulate clips of MIDI on a timeline. | ||
Line 7: | Line 7: | ||
* Reuse of musical phrases in your timeline. Your musical phrases are stored as patterns and your song is built by starting these patterns. | * Reuse of musical phrases in your timeline. Your musical phrases are stored as patterns and your song is built by starting these patterns. | ||
- | * Ability to quickly try different | + | * Ability to quickly try different |
The utility provided by NS2 clips means you can store whole named sections of clip launch instructions together logically and move them around the timeline. You also benefit from the ability to alias clips so you can have one clip that can be repeated throughout your song yet you only need to change one of the clips to change them all. This way you really are repeating the minimal amount of data to arrange your song. | The utility provided by NS2 clips means you can store whole named sections of clip launch instructions together logically and move them around the timeline. You also benefit from the ability to alias clips so you can have one clip that can be repeated throughout your song yet you only need to change one of the clips to change them all. This way you really are repeating the minimal amount of data to arrange your song. | ||
- | ==== Adding Atom 2 ==== | + | ===== Adding Atom 2 ===== |
You should add Atom 2 as an External MIDI FX plugin: | You should add Atom 2 as an External MIDI FX plugin: | ||
Line 17: | Line 17: | ||
{{ : | {{ : | ||
- | If you intend on recording MIDI rather than manually adding notes in Atom then I recommend that you create a second instance of Atom 2 for each track. | + | If you intend on recording MIDI rather than manually adding notes in Atom then I recommend that you create a second instance of Atom 2 for each track. This will be explained in more detail later on but you will use the second instance for recording and the first for triggering: |
{{ : | {{ : | ||
- | ==== Initial setup ==== | + | **Edit/ |
+ | |||
+ | ===== Initial setup ===== | ||
You can trigger Atom 2 patterns in a number of ways. NS2 limits the usable trigger methods to velocity and note since program change and continuous controller MIDI are blocked by NS2. For the purposes of this tutorial we will use note triggering as it is not easy to accurately set velocity in NS2. | You can trigger Atom 2 patterns in a number of ways. NS2 limits the usable trigger methods to velocity and note since program change and continuous controller MIDI are blocked by NS2. For the purposes of this tutorial we will use note triggering as it is not easy to accurately set velocity in NS2. | ||
- | Open the first Atom 2 instance and set it up so that it looks like this: | + | Open the first Atom 2 instance and set it up so that it looks like this (click to zoom): |
{{ : | {{ : | ||
Line 36: | Line 38: | ||
If you typically use fewer patterns per track then use your own defaults but be aware that if you run out of pattern slots then you will need to edit all existing trigger MIDI notes on that track to move the controller note to its new home. This tutorial assumes you have used the suggested defaults. | If you typically use fewer patterns per track then use your own defaults but be aware that if you run out of pattern slots then you will need to edit all existing trigger MIDI notes on that track to move the controller note to its new home. This tutorial assumes you have used the suggested defaults. | ||
+ | |||
+ | **Important** If the first Atom 2 plugin (the “controller” plugin) is active then you will not hear any sound when you play the in-built keyboard or if you send MIDI in to the track. | ||
==== Save initial setup ==== | ==== Save initial setup ==== | ||
- | Before creating any music it would be a good idea at this point to save the MIDI FX chain. | + | Before creating any music, and to speed things up when creating new tracks, |
{{ : | {{ : | ||
- | You can now load this initial setup to a new track. | + | **Note** The loaded plugins will inherit all settings, including the track number. |
- | ==== Testing the configuration ==== | + | ===== Testing the configuration |
- | === Creating the control notes === | + | ==== Creating the control notes ==== |
Draw a new MIDI block for the track hosting your Atom 2 plugin: | Draw a new MIDI block for the track hosting your Atom 2 plugin: | ||
Line 66: | Line 70: | ||
The second pattern switch note added is C#2 (49). This will cause “Pattern 2” to be switched to for the second instance of the trigger note C4 (72). Having the second trigger note C4 (72) forces the playhead to return to the start after switching to “Pattern 2”. | The second pattern switch note added is C#2 (49). This will cause “Pattern 2” to be switched to for the second instance of the trigger note C4 (72). Having the second trigger note C4 (72) forces the playhead to return to the start after switching to “Pattern 2”. | ||
+ | |||
+ | **Important** If a pattern change is not happening as expected then try removing the pattern change note and re-add it, or move it forward one step and then back to its original point in the timeline. | ||
**Note** The pattern switch notes mark state changes and so the length of those notes is not significant. | **Note** The pattern switch notes mark state changes and so the length of those notes is not significant. | ||
- | === Creating the patterns === | + | ==== Creating the patterns |
We want to create two patterns, each of which are a half bar in length. | We want to create two patterns, each of which are a half bar in length. | ||
Line 85: | Line 91: | ||
{{ : | {{ : | ||
- | ===Playing the music=== | + | ==== Playing the music ==== |
We have now defined two patterns and some controller notes to trigger those patterns. | We have now defined two patterns and some controller notes to trigger those patterns. | ||
Line 91: | Line 97: | ||
Try opening the Atom 2 plugin and watch the patterns change as each trigger is hit. | Try opening the Atom 2 plugin and watch the patterns change as each trigger is hit. | ||
- | ===Repeating the music=== | + | ==== Repeating the music ==== |
Let’s extend the usefulness of this clip by giving it a name and repeating it a few times. | Let’s extend the usefulness of this clip by giving it a name and repeating it a few times. | ||
Line 107: | Line 113: | ||
We now have a four bar intro made up from clips, each containing two half bar patterns. | We now have a four bar intro made up from clips, each containing two half bar patterns. | ||
- | ===Changing the music=== | + | ==== Changing the music ==== |
We decide that we do not like the order of the patterns within the bar. If all of our song data was stored on the timeline then we would need to move multiple notes around and hope that we do not make mistakes. | We decide that we do not like the order of the patterns within the bar. If all of our song data was stored on the timeline then we would need to move multiple notes around and hope that we do not make mistakes. | ||
Line 119: | Line 125: | ||
If you play the song now then you will hear that the order of the patterns has changed each time the linked clip is played. | If you play the song now then you will hear that the order of the patterns has changed each time the linked clip is played. | ||
- | ====Adding a second track==== | + | ===== Adding a second track ===== |
The work we did with the first track to save the Atom configuration in a MIDI FX chain preset means that it is quick to set up a new track. | The work we did with the first track to save the Atom configuration in a MIDI FX chain preset means that it is quick to set up a new track. | ||
Line 159: | Line 165: | ||
Now if you play the song through then you will hear your beat appear in the second and fourth bars. | Now if you play the song through then you will hear your beat appear in the second and fourth bars. | ||
- | ====Creating patterns over a loop==== | + | ===== Creating patterns over a loop ===== |
You are likely to want to create patterns with other tracks looping underneath the one you are working on. You should first understand that there is a bug in NS2 where it does not cope with a perfect loop if your control note is the first thing in the loop, as it would typically be. Try looping bar two for example by double clicking on the timeline to enable looping and then dragging the start and end of the loop so that it is exactly one bar: | You are likely to want to create patterns with other tracks looping underneath the one you are working on. You should first understand that there is a bug in NS2 where it does not cope with a perfect loop if your control note is the first thing in the loop, as it would typically be. Try looping bar two for example by double clicking on the timeline to enable looping and then dragging the start and end of the loop so that it is exactly one bar: | ||
Line 171: | Line 177: | ||
{{ : | {{ : | ||
- | Now that we know how to correctly | + | Now that we know how to reliably |
+ | |||
+ | * Create an Obsidian track with a bass sound | ||
+ | * Add our default Atom MIDI FX chain, remembering to change the track number. | ||
+ | * Loop the whole of bar four, remembering to start the loop just before the start of bar four | ||
+ | |||
+ | **Important** Hold off creating the controller data for the new track because we want to get the notes down in Atom 2 first and do not want the controller data bleeding into our recording. | ||
+ | |||
+ | Rather than opening the controller Atom 2 plugin, open the second instance of the Atom plugin that we will use only for recording. The controller plugin is set to not pass through notes so in order to record anything to the recording plugin then we will need to disable the controller plugin otherwise it will eat the incoming notes: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Start the NS2 transport and open your recording plugin. | ||
+ | |||
+ | * Hit the “return to start” NS2 transport control to position the playhead at the start of your loop. If it takes you back to the start of the song then hit it again and you should find it takes you to the start of the selected loop. | ||
+ | * Make a note of where the playhead is in your recorder Atom 2 plugin. | ||
+ | * When you add bars to Atom 2 then you will see that the playhead moves so that it starts at some multiple of the current song position in the main host timeline. | ||
+ | |||
+ | {{ : | ||
+ | * If you find that at any point the Atom 2 playhead seems to have got stuck at the start of the Atom timeline rather than correctly following the loop then do the following: | ||
+ | * Disable the loop in NS2 by double tapping it | ||
+ | * Play the song in NS2 from the start, just for a second or two | ||
+ | * Re-enable the loop | ||
+ | * You should now find that the playhead in Atom returns to the correct place | ||
+ | |||
+ | In the scenario created here the Atom 2 timeline happens to match the NS2 one since we are only at bar four but if we were looping at some much larger bar value then the same process will apply, just keep adding bars until you have enough clear bars either side of the one you are about to record to. | ||
+ | |||
+ | Hit play in NS2 and you will see the playhead loop around your recording area in the Atom 2 timeline. | ||
+ | |||
+ | When you are ready to record, simply hit “RECORD” in Atom 2 and then hit play in NS2. Any incoming notes will now be recorded to the Atom 2 timeline. | ||
+ | |||
+ | If you want to manually enter MIDI then zoom in on the loop area and simply paint and move notes until you have something you like the sound of with the other tracks playing underneath. | ||
+ | |||
+ | **TIP:** If you are recording a piece with notes that fall near the end of the bar(s) being recorded then it is a good idea to extend the NS2 loop to some point just after the section being recorded. | ||
+ | |||
+ | ==== Transferring recorded patterns ==== | ||
+ | |||
+ | When you are happy with your new bar of notes then we need to move them to the controller plugin. | ||
+ | |||
+ | The first thing to do is double-tap the Atom 2 plugin timeline between the bar we just recorded. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | If you have recorded more than a bar of music then drag the loop to the correct length. | ||
+ | |||
+ | Now you need to use the PROCESS -> CROP TO LOOP function which will take the looped section and remove everything else in the Atom 2 timeline: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | The notes are now ready to transfer to the controller plugin. | ||
+ | |||
+ | Open the controller plugin and go to the LAYERS menu. You should see the pattern you just created in the recorder plugin instance. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Tap “ADD AS PATTERN” and then open the PATTERNS menu. You will see that your new pattern has been added to the controller pattern list. Remove the initial empty pattern so that the only one in the list is the one we just added: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Your controller plugin will play your new pattern once the controller MIDI has been created. | ||
+ | |||
+ | * Create a clip starting at bar four on the bass track and which extends for the duration of your recorded pattern. | ||
+ | * Create the MIDI controller data to trigger pattern one and hold for the duration of the clip. | ||
+ | |||
+ | **Important** Do not forget to bypass the recording plugin and re-enable the controller plugin once the controller MIDI has been created. | ||
+ | |||
+ | You can now play the song through and should hear all patterns being triggered at the correct times. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ===== Mixdown ===== | ||
+ | One of the great things about using Atom 2 in the way described in this tutorial is that mixdown works in the same way as it would do as if the notes had been recorded directly into the NS2 MIDI timeline. | ||
+ | |||
+ | ===== Advanced Topics ===== | ||
+ | ==== Recording MIDI ==== | ||
+ | To record MIDI from Atom you will need the excellent MIDI Tools app https:// | ||
+ | |||
+ | Decide where you want the recorded notes to be sent to. This might be a new track which sends to the instrument track, or might be the instrument track itself. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Add the MIDI Route plugin **after** the Atom instance that you want to record: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | I think by default the plugin will point to NanoStudio 2 so all you need to do is ensure that the MIDI channel that is being sent to matches the MIDI channel of the track you set up above. | ||
+ | |||
+ | Hit record in NS2 and the output of Atom will be routed by MIDI Route to the NS2 channel and recorded into the track listening on this channel. | ||
+ | |||
+ | If you are using an iPhone then MIDI Route is not available but you may be able to use this workaround: | ||
+ | |||
+ | https:// | ||
+ | |||
+ | ==== Alternative (better?) workflow ==== | ||
+ | Since writing the initial version of this guide I have changed my workflow so that every instrument has a control track which contains a single Atom instance - no secondary Atom instance is used for recording. | ||
+ | |||
+ | To record I set up a blank pattern in the control track Atom instance and loop the part of the song I want to record over. I then open AUM and record into Helium or Atom attached to the NS2 port for the instrument I want to record for, which lets me hear exactly how the recording will sound and has the advantage of being able to hear the lead in bars for that instrument. | ||
+ | |||
+ | **Tip:** To quickly get a recording from Helium to NS2/Atom - save to the Media Bay, long press on the new MIDI clip and with your finger held down, use the other hand to navigate to the Atom instance in NS2 containing the empty pattern you set up earlier. | ||
+ | |||
+ | ==== Using Slate to trigger patterns ==== | ||
+ | As you saw earlier, Slate kits allow you to name pads and these names appear in the piano roll. Using this information we can create a simple Slate kit that does not actually contain any sound but can be used to more easily add patterns to controller clips. | ||
+ | |||
+ | Create a Slate track and then create an Init kit in the Slate editor: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Save the empty kit using a different name: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Now you can assign useful names to the notes, or just label the controller as the others will automatically be numbered. | ||
+ | |||
+ | {{ : | ||
- | * Create | + | If you look at an NS2 MIDI clip under this track then you will see that the notes are labelled as a handy guide for adding |
- | * Add our default Atom MIDI FX chain | + | |
- | * Create a single bar clip starting at bar four on the bass track | + | |
- | * Create | + | |
+ | {{ : | ||
+ | At the moment the control data is sitting on the Slate track and we need to use this to trigger Atom. At this point you have two options - either store your Atom controller plugin with the Slate track and send all generated MIDI to an instrument track, OR host the Atom plugin on the instrument track and send only the controller data from the Slate track. | ||
+ | {{ : | ||