Jump to content
Apeirofobia

Bouncing MIDI to audio - Feature request

Recommended Posts

Posted (edited)

Hi guys.

 

These last days I've been struggling with finding an easy way to bounce midi information into audio tracks. 

I've been using a Drum VST (among others) that doesn't allow multiple outputs so this task has been very tedious for me.

I've tried the CAL method too, but it has displayed some errors while creating the tracks.

By now the easiest way I've found to achieve this is to paste as many VST tracks as drum parts the song has, and bounce them individually into audio.

It would be so cool to have a feature like the one shown in the video in Cakewalk, cause since I've moved into this DAW, the experience has been amazing and I'd love everyone to use this software.

The last DAW I used was Studio One and it has this easy way to bounce midi notes into audio.

 Greetings and have a nice one!

Edited by Felipe Andrés Riquelme Gonzále

Share this post


Link to post
Share on other sites

When using Split Notes to Track CAL do not use instrument tracks and move the source track to the bottom of the project before running the script.

 

Keep in mind a drum map may be used to send note ranges to different synths. This may be used to break out different kit pieces to separate instances of a plug-in. Once created, save the MIDI and audio tracks as a track template.

Share this post


Link to post
Share on other sites
Posted (edited)

I'll try with the CAL again, thanks for the advice!

But anyways, I'd love to see in Cakewalk an easy way to do this task just like in Studio One.

Edited by Felipe Andrés Riquelme Gonzále

Share this post


Link to post
Share on other sites

The thing is splitting individual notes whether MIDI or audio does not seem particularly useful except for the case where each note plays a different instrument.

In the case of drums synths most kit pieces have several notes mapped to them. It makes more sense to map all the notes for a kit piece to one track. This can be done by taking the CAL script provided by Cakewalk and modifying it to create tracks based on the drum synth kit layout rather than one track for each pitch.

As mentioned above, it is relatively easy to route all the notes that play different kit pieces to different synth instances.

Both of these seem preferable to having multiple audio tracks for a snare or hi-hat.

Share this post


Link to post
Share on other sites

Maybe I'm misreading the OP, but to get individual MIDI drum parts (and overhead/room mics if the synth has them) rendered as independent audio tracks for each kit piece:

- Choose to create a separate MIDI track and  'All Audio Outputs -  Mono' when inserting the synth.

- Freeze the synth, and each part will be rendered to its corresponding track.

- For stereo room mics, you can reset the input of one of the mono tracks to the  appropriate stereo input, and delete the extra one.

- And you can save the whole setup as a Track Tmeplate, including a Drum Map on the MIDI track ouput(s) so you don;t have to go through the setup again.

 

Share this post


Link to post
Share on other sites
8 minutes ago, David Baay said:

Maybe I'm misreading the OP, but to get individual MIDI drum parts (and overhead/room mics if the synth has them) rendered as independent audio tracks for each kit piece:

- Choose to create a separate MIDI track and  'All Audio Outputs -  Mono' when inserting the synth.

- Freeze the synth, and each part will be rendered to its corresponding track.

- For stereo room mics, you can reset the input of one of the mono tracks to the  appropriate stereo input, and delete the extra one.

- And you can save the whole setup as a Track Tmeplate, including a Drum Map on the MIDI track ouput(s) so you don;t have to go through the setup again.

 

I tried this method but some VST's dont allow multiple outputs, so when I choose "All audio outputs" I only get a few tracks(mono and stereo) that contain the full drum kit pattern.

Share this post


Link to post
Share on other sites
6 hours ago, Felipe Andrés Riquelme Gonzále said:

I've been using a Drum VST (among others) that doesn't allow multiple outputs

Oops. missed this. Time to upgrade. The bundled Session Drummer has separate outs.

Share this post


Link to post
Share on other sites

Similar to what Steve suggested, I would put put a drum map on the MIDI track, allowing you to solo each kit piece (or groups of relate pieces in the Drum Pane  of the PRV before bouncing. Saves creating a bunch of different MIDI tracks, but still has to be done as individual bounces.

Share this post


Link to post
Share on other sites
Posted (edited)
12 hours ago, David Baay said:

Similar to what Steve suggested, I would put put a drum map on the MIDI track, allowing you to solo each kit piece (or groups of relate pieces in the Drum Pane  of the PRV before bouncing. Saves creating a bunch of different MIDI tracks, but still has to be done as individual bounces.

That seems one of the easiest ways to do this in Cakewalk. Thanks!

Edited by Felipe Andrés Riquelme Gonzále

Share this post


Link to post
Share on other sites
Posted (edited)

@Felipe Andrés Riquelme Gonzále - if you want to look at the CAL route, here's my old script for splitting up drum tracks.

Before running it, you need to create 6 new midi tracks (for  bass drum, snare, toms, hats, cymbals & other percussion) - although you could alter the script to create these for you.

This is mapped to GM notes.

	 
; clean up errors in sequence
(do
  (forEachEvent
    (if (== Event.Kind NOTE)
      (do
         (if (< Note.Vel 15)
          (do
            (delete)
          )
        )
      )
    )
  )
)
	; remove repeated notes
(do 
  (int noteTime 0)
  (int noteKey 0)
  (forEachEvent 
    (do 
      (if (== Event.Kind NOTE)
       (do
        (if (&& (== Event.Time noteTime) (== Note.Key noteKey))
          (do 
            (delete)
            (= noteTime 0)
             (= noteKey 0) 
           )
           (do
             (= noteTime Event.Time)
             (= noteKey Note.Key)
           )
         ) ; if
       ) ; do
      ) ; if
    ) ; do
  ) ; forEachEvent
 
 
 
; split drums into tracks
 
 (int bassDrum1 36)
 (int bassDrum2 35)
 (int rimShot 37)
 (int snare1 38)
 (int snare2 40)
 (int lowTom2 41)
 (int lowTom1 43)
 (int midTom2 45)
 (int midTom1 47)
 (int hiTom2 48)
 (int hiTom1 50)
 (int closedHat 42)
 (int pedalHat 44)
 (int openHat 46)
 (int crash1 49)
 (int ride1 51)
 (int china 52)
 (int ride2 53)
 (int splash 55)
 (int crash2 57)
 (int ride3 59)
 (int sourceTrack 0)
 (int destTrack 0)
	
; =====================================
; Prompt for source / destination track
; =====================================
	 (getInt sourceTrack "Source Drum Track: " 1 255) 
 (-- sourceTrack)
 (getInt destTrack "First Destination Drum Track: " 1 255) 
 (-- destTrack)
	; =====================================
; Set destination track numbers
; =====================================
	 (int bassDrumTrack (+ destTrack 0))
 (int snareTrack (+ destTrack 1))
 (int tomsTrack (+ destTrack 2))
 (int hatTrack (+ destTrack 3))
 (int cymbalTrack (+ destTrack 4))
 (int otherTrack (+ destTrack 5))
 
	; ===============================
; Clear Other Tracks
; ===============================
 
 (int curTrack bassDrumTrack)
 
(while (<= curTrack otherTrack)
  (do
    (TrackSelect 0 -1)
    (TrackSelect 1 curTrack)
    (forEachEvent (delete))
    (++ curTrack)
  )
 )
 
; ===============================
; Name tracks
; ===============================
 
(TrackName "Bass Drum" bassDrumTrack)
 (TrackName "Snare Drum" snareTrack)
 (TrackName "Toms" tomsTrack)
 (TrackName "HiHats" hatTrack)
 (TrackName "Cymbals" cymbalTrack)
 (TrackName "MiscDrums" otherTrack)
 
; ===============================
; Copy events to tracks
; ===============================
 
; bassDrum
 (TrackSelect 0 -1)
 (TrackSelect 1 sourceTrack)
 (ResetFilter 0 TRUE)
 (SetFilterRange 0 0 TRUE bassDrum2 bassDrum1)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE bassDrumTrack)
 
; snare drum
 (SetFilterRange 0 0 TRUE rimShot snare1)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE snareTrack)
 (SetFilterRange 0 0 TRUE snare2 snare2)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE snareTrack)
 ; Toms track
 
(SetFilterRange 0 0 TRUE lowTom1 lowTom1)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE tomsTrack)
 (SetFilterRange 0 0 TRUE lowTom2 lowTom2)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE tomsTrack)
 (SetFilterRange 0 0 TRUE midTom1 midTom1)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE tomsTrack)
 (SetFilterRange 0 0 TRUE midTom2 midTom2)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE tomsTrack)
 (SetFilterRange 0 0 TRUE hiTom1 hiTom1)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE tomsTrack)
 (SetFilterRange 0 0 TRUE hiTom2 hiTom2)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE tomsTrack)
 
; Hats track 
 (SetFilterRange 0 0 TRUE closedHat closedHat)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE hatTrack)
 (SetFilterRange 0 0 TRUE pedalHat pedalHat)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE hatTrack)
 (SetFilterRange 0 0 TRUE openHat openHat)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE hatTrack)
 
; Cymbals track 
 (SetFilterRange 0 0 TRUE crash1 crash1)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE cymbalTrack)
 (SetFilterRange 0 0 TRUE crash2 crash2)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE cymbalTrack)
 (SetFilterRange 0 0 TRUE ride1 ride1)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE cymbalTrack)
 (SetFilterRange 0 0 TRUE ride2 ride2)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE cymbalTrack)
 (SetFilterRange 0 0 TRUE ride3 ride3)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE cymbalTrack)
 (SetFilterRange 0 0 TRUE splash splash)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE cymbalTrack)
 (SetFilterRange 0 0 TRUE china china)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE cymbalTrack)
 
	 ; Other Track
 (ResetFilter 0 TRUE)
 (EditCopy From Thru TRUE FALSE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE otherTrack)
 
; delete notes that are present in other tracks
 (TrackSelect 0 -1)
 (TrackSelect 1 otherTrack)
 (forEachEvent 
  (do
      (if (== Event.Kind NOTE)
        (do
           (if (== Note.Key bassDrum1) (delete))
           (if (== Note.Key bassDrum2) (delete))
           (if (== Note.Key rimShot) (delete))
           (if (== Note.Key snare1) (delete))
           (if (== Note.Key snare2) (delete))
           (if (== Note.Key lowTom1) (delete))
           (if (== Note.Key lowTom2) (delete))
           (if (== Note.Key midTom1) (delete))
           (if (== Note.Key midTom2) (delete))
           (if (== Note.Key hiTom1) (delete))
           (if (== Note.Key hiTom2) (delete))
           (if (== Note.Key crash1) (delete))
           (if (== Note.Key crash2) (delete))
           (if (== Note.Key ride1) (delete))
           (if (== Note.Key ride2) (delete))
           (if (== Note.Key ride3) (delete))
           (if (== Note.Key splash) (delete))
           (if (== Note.Key china) (delete))
           (if (== Note.Key closedHat) (delete))
           (if (== Note.Key pedalHat) (delete))
           (if (== Note.Key openHat) (delete))
         ) ;do
       ) ; if
    ) ; do
  ) ; forEachEvent
 
) ; do
 
	

Edited by msmcleod

Share this post


Link to post
Share on other sites
On 8/30/2019 at 2:04 PM, msmcleod said:

@Felipe Andrés Riquelme Gonzále - if you want to look at the CAL route, here's my old script for splitting up drum tracks.

Before running it, you need to create 6 new midi tracks (for  bass drum, snare, toms, hats, cymbals & other percussion) - although you could alter the script to create these for you.

This is mapped to GM notes.

 

  Reveal hidden contents

 



	 
; clean up errors in sequence
(do
  (forEachEvent
    (if (== Event.Kind NOTE)
      (do
         (if (< Note.Vel 15)
          (do
            (delete)
          )
        )
      )
    )
  )
)
	; remove repeated notes
(do 
  (int noteTime 0)
  (int noteKey 0)
  (forEachEvent 
    (do 
      (if (== Event.Kind NOTE)
       (do
        (if (&& (== Event.Time noteTime) (== Note.Key noteKey))
          (do 
            (delete)
            (= noteTime 0)
             (= noteKey 0) 
           )
           (do
             (= noteTime Event.Time)
             (= noteKey Note.Key)
           )
         ) ; if
       ) ; do
      ) ; if
    ) ; do
  ) ; forEachEvent
 
 
 
; split drums into tracks
 
 (int bassDrum1 36)
 (int bassDrum2 35)
 (int rimShot 37)
 (int snare1 38)
 (int snare2 40)
 (int lowTom2 41)
 (int lowTom1 43)
 (int midTom2 45)
 (int midTom1 47)
 (int hiTom2 48)
 (int hiTom1 50)
 (int closedHat 42)
 (int pedalHat 44)
 (int openHat 46)
 (int crash1 49)
 (int ride1 51)
 (int china 52)
 (int ride2 53)
 (int splash 55)
 (int crash2 57)
 (int ride3 59)
 (int sourceTrack 0)
 (int destTrack 0)
	
; =====================================
; Prompt for source / destination track
; =====================================
	 (getInt sourceTrack "Source Drum Track: " 1 255) 
 (-- sourceTrack)
 (getInt destTrack "First Destination Drum Track: " 1 255) 
 (-- destTrack)
	; =====================================
; Set destination track numbers
; =====================================
	 (int bassDrumTrack (+ destTrack 0))
 (int snareTrack (+ destTrack 1))
 (int tomsTrack (+ destTrack 2))
 (int hatTrack (+ destTrack 3))
 (int cymbalTrack (+ destTrack 4))
 (int otherTrack (+ destTrack 5))
 
	; ===============================
; Clear Other Tracks
; ===============================
 
 (int curTrack bassDrumTrack)
 
(while (<= curTrack otherTrack)
  (do
    (TrackSelect 0 -1)
    (TrackSelect 1 curTrack)
    (forEachEvent (delete))
    (++ curTrack)
  )
 )
 
; ===============================
; Name tracks
; ===============================
 
(TrackName "Bass Drum" bassDrumTrack)
 (TrackName "Snare Drum" snareTrack)
 (TrackName "Toms" tomsTrack)
 (TrackName "HiHats" hatTrack)
 (TrackName "Cymbals" cymbalTrack)
 (TrackName "MiscDrums" otherTrack)
 
; ===============================
; Copy events to tracks
; ===============================
 
; bassDrum
 (TrackSelect 0 -1)
 (TrackSelect 1 sourceTrack)
 (ResetFilter 0 TRUE)
 (SetFilterRange 0 0 TRUE bassDrum2 bassDrum1)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE bassDrumTrack)
 
; snare drum
 (SetFilterRange 0 0 TRUE rimShot snare1)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE snareTrack)
 (SetFilterRange 0 0 TRUE snare2 snare2)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE snareTrack)
 ; Toms track
 
(SetFilterRange 0 0 TRUE lowTom1 lowTom1)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE tomsTrack)
 (SetFilterRange 0 0 TRUE lowTom2 lowTom2)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE tomsTrack)
 (SetFilterRange 0 0 TRUE midTom1 midTom1)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE tomsTrack)
 (SetFilterRange 0 0 TRUE midTom2 midTom2)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE tomsTrack)
 (SetFilterRange 0 0 TRUE hiTom1 hiTom1)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE tomsTrack)
 (SetFilterRange 0 0 TRUE hiTom2 hiTom2)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE tomsTrack)
 
; Hats track 
 (SetFilterRange 0 0 TRUE closedHat closedHat)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE hatTrack)
 (SetFilterRange 0 0 TRUE pedalHat pedalHat)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE hatTrack)
 (SetFilterRange 0 0 TRUE openHat openHat)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE hatTrack)
 
; Cymbals track 
 (SetFilterRange 0 0 TRUE crash1 crash1)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE cymbalTrack)
 (SetFilterRange 0 0 TRUE crash2 crash2)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE cymbalTrack)
 (SetFilterRange 0 0 TRUE ride1 ride1)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE cymbalTrack)
 (SetFilterRange 0 0 TRUE ride2 ride2)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE cymbalTrack)
 (SetFilterRange 0 0 TRUE ride3 ride3)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE cymbalTrack)
 (SetFilterRange 0 0 TRUE splash splash)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE cymbalTrack)
 (SetFilterRange 0 0 TRUE china china)
 (EditCopy From Thru TRUE TRUE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE cymbalTrack)
 
	 ; Other Track
 (ResetFilter 0 TRUE)
 (EditCopy From Thru TRUE FALSE FALSE FALSE FALSE)
 (EditPasteToTrack From 1 1 TRUE FALSE FALSE FALSE otherTrack)
 
; delete notes that are present in other tracks
 (TrackSelect 0 -1)
 (TrackSelect 1 otherTrack)
 (forEachEvent 
  (do
      (if (== Event.Kind NOTE)
        (do
           (if (== Note.Key bassDrum1) (delete))
           (if (== Note.Key bassDrum2) (delete))
           (if (== Note.Key rimShot) (delete))
           (if (== Note.Key snare1) (delete))
           (if (== Note.Key snare2) (delete))
           (if (== Note.Key lowTom1) (delete))
           (if (== Note.Key lowTom2) (delete))
           (if (== Note.Key midTom1) (delete))
           (if (== Note.Key midTom2) (delete))
           (if (== Note.Key hiTom1) (delete))
           (if (== Note.Key hiTom2) (delete))
           (if (== Note.Key crash1) (delete))
           (if (== Note.Key crash2) (delete))
           (if (== Note.Key ride1) (delete))
           (if (== Note.Key ride2) (delete))
           (if (== Note.Key ride3) (delete))
           (if (== Note.Key splash) (delete))
           (if (== Note.Key china) (delete))
           (if (== Note.Key closedHat) (delete))
           (if (== Note.Key pedalHat) (delete))
           (if (== Note.Key openHat) (delete))
         ) ;do
       ) ; if
    ) ; do
  ) ; forEachEvent
 
) ; do
 
	

 

 

Wow, thank you! I'll give it a try.

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×
×
  • Create New...