Audiobus: Use your music apps together.

What is Audiobus?Audiobus is an award-winning music app for iPhone and iPad which lets you use your other music apps together. Chain effects on your favourite synth, run the output of apps or Audio Units into an app like GarageBand or Loopy, or select a different audio interface output for each app. Route MIDI between apps — drive a synth from a MIDI sequencer, or add an arpeggiator to your MIDI keyboard — or sync with your external MIDI gear. And control your entire setup from a MIDI controller.

Download on the App Store

Audiobus is the app that makes the rest of your setup better.

StreamByter Orchestra in C Major with Oboe, Cello Soloists

edited January 2019 in Creations

A piece using the StreamByter Orchestra Script

INPUT NOTES
C - C Major
C# - A7/C#
D - D Minor
D# = B7/D#
E - E Minor
F - F Major
F# - D7/F#
G - G7
G# - E/G#
A - A Minor
A# - A# diminished
B - G7/B

https://soundcloud.com/user-403688328/streambyter-orchestra-in-c

 # StreamByter Orchestra Major Key Transposing Index
 # Block the original note pressed
 # Add Transpose Index - Add an index to every note played
 # McDtracy, Ki and Nic

IF LOAD
  # note     C  C# D  Eb E  F  F# G  Ab A  Bb B
  ASS K00 = -C -4 -C -4 -C -C -4 -C -4 -C -3 -C
  ASS K0C = 07 06 07 06 07 07 06 0A 06 07 06 06
  ASS K18 = C C C C C C C C C C C C
  ASS K24 = 10 0F 0F 0F 0F 10 0F 10 0F 0F 0F 0F
  ASS G1 = 0
END

# Transpose up this many 1/2 steps
ASS G1 = 0

# handle note on/off events
IF M0 < A0
  # get note index
  MAT I0 = M1 % C

  # send the input note with the transposition
  MAT I2 = M1 + G1
  SND M0 I2 M2

  # add first note
  MAT I1 = M1 + KI0
  MAT I1 = I1 + G1
  #SND M0 I1 M2

  # add second note
  MAT I0 = I0 + C
  MAT I1 = M1 + KI0
  MAT I1 = I1 + G1
  SND M0 I1 M2

  # add thrid note
  MAT I0 = I0 + C
  MAT I1 = M1 + KI0
  MAT I1 = I1 + G1
  #SND M0 I1 M2

  # add fourth note
  MAT I0 = I0 + C
  MAT I1 = M1 + KI0
  MAT I1 = I1 + G1
  SND M0 I1 M2

  NX = XX +B

END
«1

Comments

  • Could you please explain?

    This whole piece was not created by this script, or?!?

  • edited January 2019

    @tja said:
    Could you please explain?

    This whole piece was not created by this script, or?!?

    The orchestra sound comes from playing a single note part.

    Then I solo'ed the oboe and cello over the orchestra part.

    Here's the StreamByter script being driven by Rozeta Cells (no human input) and using 2 Kaspar Synths (SpiderIceMidas Pads Interstellar and Stardust) and an Aparillo pad Account Solonn MA.

    https://soundcloud.com/user-403688328/streambyter-spidericemidas

  • I can confirm that using MIDI filters "behind" this script results in some lovely results. I recommend MIDI Echo AUFX for relatively simple solutions. Step poly arp for more complex arrangements. Nice stuff here. Thanks for sharing!

  • @lukesleepwalker said:
    I can confirm that using MIDI filters "behind" this script results in some lovely results. I recommend MIDI Echo AUFX for relatively simple solutions. Step poly arp for more complex arrangements. Nice stuff here. Thanks for sharing!

    Thank you for using it. @_Ki and Nic helped me get the code working without hanging notes or endless lines to do what they showed me could be done in a couple dozen.

    I have ideas for some more variations to arpeggiate harps, strum acoustic guitar chords, etc.

    Playing live just stick with the white keys and occasionally use a black key and follow it with the next white key up and it will usually sound like an orchestra with strings or smooth pads.

    There's an index that can be changed to play in keys other than C Major.

  • Right on, these are the sorts of meat/potatoes helpful scripts that make life easier. I will use this one regularly. BTW, I am using it as I beta test the upcoming Cality app and these two are made for each other. Really fun!

  • @McDtracy : for some improved realism with the orchestra: add randomized short delay and volume for each added note. I think you will find that it helps the result.

  • @espiegel123 said:
    @McDtracy : for some improved realism with the orchestra: add randomized short delay and volume for each added note. I think you will find that it helps the result.

    Good ideas.

    To learn delays, I think I'm going to arpeggiate the chords with a settable delay interval to simulate harp (longer intervals) and guitar strumming of bar chords (fast delays).

    Then I'll try learning the randomize capability and apply it to delays and velocity/volume.

  • FYI: This script has been updated with optional settings to add delays to the chord notes.
    See this thread for that version:

    https://forum.audiob.us/discussion/30754/streambyter-strum-arpeggiate-echo-script#latest

  • @McDtracy Without your harmonics groundwork and really cool sounding demo (of your one finger orchestra script) i wouldn‘t have started implementing. It was a very intersting programming puzzle with lots of hurdles to overcome.

    .

    I want to announce that i finished my version of the ‚OneFingerChords’ script includes the following user specified features:

    • 4 independant tunings for 4x12 chords, switchable via modwheel cc
    • Chord-selection transposition and generated-note transposition
    • Strumming per tuning, defined in note divisions (ie 1/16) and bpm
    • Humanization factor for timing
    • All user variables written in decimal instead of hex

    .

    Programming related features

    • All generated notes stop immediately at the initiating keys note-off, even the creation of the associated/delayed strum notes is aborted
    • Filters incomming double note on/offs
    • Prevent generation of double note on/offs
    • Very well documented / commented

    You find the script source at the audeonic streambyter forum

  • _ki_ki
    edited January 2019

    I posted some sample projects in another thread

  • @_ki said:
    I posted some sample projects in another thread

    I can't see any other threads from you on this forum. Are they on the StreamByter site?

  • @_ki said:
    @McDtracy Without your harmonics groundwork and really cool sounding demo (of your one finger orchestra script) i wouldn‘t have started implementing. It was a very intersting programming puzzle with lots of hurdles to overcome.

    .

    I want to announce that i finished my version of the ‚OneFingerChords’ script includes the following user specified features:

    • 4 independant tunings for 4x12 chords, switchable via modwheel cc
    • Chord-selection transposition and generated-note transposition
    • Strumming per tuning, defined in note divisions (ie 1/16) and bpm
    • Humanization factor for timing
    • All user variables written in decimal instead of hex

    .

    Programming related features

    • All generated notes stop immediately at the initiating keys note-off, even the creation of the associated/delayed strum notes is aborted
    • Filters incomming double note on/offs
    • Prevent generation of double note on/offs
    • Very well documented / commented

    You find the script source at the audeonic streambyter forum

    This will really help me understand more of the StreamByter capabilities and best practices.
    I can't wait to load it up and have a go with the new features.

    I also rev'ed my original hack with some extra features and learned a lot in that process.
    I thinking the Maps should be re-thought as Chords rather than rows of NOTE #1, #2, etc.

    Then a new map should be used to show which chord type should be played for any of the 12 notes. Then more and more chords could be added creating a vocabulary of musical harmonic styles for all the Majors, Minors, Dim, etc. Maybe input velocity could get mapped to chord selection: soft = C Major, middle volume - C7, loud = C maj 7. Just re-thinking how to expand the features so the music styles can be more varied from a single script with user settable options or CC's or volume input.

    Anyway, the puzzle solving and joy of hearing something that works is more fun than buying new synths... well certainly cheaper.

  • More fun for sure. There's real power in "I made this".

  • So you suggest a kind of indirect approach: An index list of chords that can be expanded easly, and for the 12 input notes just a reference which chord to use.
    Sounds cool and even cost less bytes than the current layout i used and would allow for more than 4 variations (which is currently limited by the available variable storage)

    I think i‘ll implement that too (and you supply more cool chord offsets :) )

  • @_ki said:
    So you suggest a kind of indirect approach: An index list of chords that can be expanded easly, and for the 12 input notes just a reference which chord to use.
    Sounds cool and even cost less bytes than the current layout i used and would allow for more than 4 variations (which is currently limited by the available variable storage)

    I think i‘ll implement that too (and you supply more cool chord offsets :) )

    Yes. I was wondering if the notes in a chord could be of indeterminate length and the list of notes could terminate with maybe FF or some none note value.

    I want to see some Loop code to loop playing the chord map and terminating when it hits an FF note.

    This way it would play 2 , 3, 4, 5,... note chords. Using positive and negative values it could play up or down or in some pattern. The patterns could even be quite long like a stepper arp.

    Anyway... that's kind of where my head is right now. But I would need to slowly add skills to make it happen but I just add one thing at a time without breaking the code and I get there eventually. But I'd love to see your take on any of these ideas. I'll share some of my chordal ideas.

    It would be nice to use decimals for the chords but I can work out the Hex values too.
    I should hack a little Python script to convert Note Letter Chords (C3, C#3, D3...) into Hex interval maps. I can create chords in letters but the Hex intervals are like converting into German for me.

  • I save / test often because i also tnd to break the code. And with that many lines its hard to find what side effect happened.

    If the chord notes list is like 0 +7 +12 Token -12 0 +7 +12 +24 Token , then the references to the start of each are non-regular and when applying the chord to a key one needs to use these ‚irregular‘ values. But since chords can not be witten in textform, one alsways has to write a number as input.

    So maybe just write them as comments:

    #                           Name         IDX
    #                           ———————————————-
    ASS L00 = -12 +7 c16 FF #        Mayor    00
    ASS L04 = -4 +6 +15 FF #         Minor    04
    ASS L08 = -12 -4 +6 +15 FF #     Dunno    08
    ASS L0C = -12 +7 +15 FF #        Whatever 0C
    ASS L......
    

    and in the interval section use these IDX for each of the 12 keys

    ASS K00 = 00 04 0C 00 ... 
    

    But i fear that the current direct offset layout in decimal is more readable - or one needs
    to write comments above each idx in the interval section.

  • @_ki said:
    I save / test often because i also tnd to break the code. And with that many lines its hard to find what side effect happened.

    If the chord notes list is like 0 +7 +12 Token -12 0 +7 +12 +24 Token , then the references to the start of each are non-regular and when applying the chord to a key one needs to use these ‚irregular‘ values. But since chords can not be witten in textform, one alsways has to write a number as input.

    So maybe just write them as comments:

    #                           Name         IDX
    #                           ———————————————-
    ASS L00 = -12 +7 c16 FF #        Mayor    00
    ASS L04 = -4 +6 +15 FF #         Minor    04
    ASS L08 = -12 -4 +6 +15 FF #     Dunno    08
    ASS L0C = -12 +7 +15 FF #        Whatever 0C
    ASS L......
    

    and in the interval section use these IDX for each of the 12 keys

    ASS K00 = 00 04 0C 00 ... 
    

    But i fear that the current direct offset layout in decimal is more readable - or one needs
    to write comments above each idx in the interval section.

    I'm comfortable with anything you propose. I can get to work making some harmonic
    environments - Jazz, Power Chords, Quartal (4ths), etc. Making an environment will start generating a list of chords.

    Check out the way I added transpose and delays to every note SND:
    # send the input note with the transposition
    # G1 is transposing interval applied to every note.
    MAT I2 = M1 + G1
    SND M0 I2 M2

    # add second note
    # do you think it would make sense to just have chords show offsets from the ROOT for
    # all the elements of the chord rather than the interval from the last note played?
    MAT I0 = I0 + C
    MAT I1 = M1 + KI0
    # G1 is transpose again.
    MAT I1 = I1 + G1
    # L0 ends up being delay times how many notes will have played.
    # sunsequent notes get
    # MAT L0 = G3 * 2,3,4,5,etc.
    MAT L0 = G3
    SND M0 I1 M2 +DL0

    This allows the chords to be shifted to any key and even more than 1 octave up or down
    and allows chords to play with delays from 1ms to 1000's of ms. It should save needing to
    have maps for 12 keys and allow the same code to do strumming, echos, arps, etc.

  • Since i didn‘t know what made musically more sense, i implemented two transposes in my code. One to shift the chord layout and another to transpose all output notes.

    The strum delays also add up, but are not defined in ms but in 1/nth of notes in combination with a bpm. Then there is a maxRandomDelay (either pos or negative value in ms) which is multiplied by a random number between 0.0 and 1.0. This can shift the strums either forward or backwards in time by modifying the regular delay value - of course it wont play before the initiating note.

    do you think it would make sense to just have chords show offsets from the ROOT for
    all the elements of the chord rather than the interval from the last note played?

    I have to think about this to understand the question :) With root you mean the underlaying scale that is currently used for all chords specified via the different offsets for different intervals ? Then one would perhaps need to compute each chord for each key which could be tricky . I‘m not very fluent in music theory... or worse

  • A root is the note entered on the keyboard that selects a chord.

    I hit C and a C Major chord plays. With transpose set to 1 I hit C and a C# Major Chord plays (up 1/2 step). 2 = D plays, 3 Eb plays, etc. I'm always playing the keyboard in C but the results are trasnposed by adding a transpose interval to every note that is SND.

  • Ok, thats what my „K06 transpose“ variable does.

    But i still don‘t understand the question

    do you think it would make sense to just have chords show offsets from the ROOT for
    all the elements of the chord rather than the interval from the last note played?

    Currently the offsets in the interval table are applied to the note played to generate a chord. But what did you suggest by „chords show offsets from the root for all elements“ ?

  • @_ki said:
    But i still don‘t understand the question

    do you think it would make sense to just have chords show offsets from the ROOT for
    all the elements of the chord rather than the interval from the last note played?

    Here's how it works now.

    NOTE: I'll explain using decimal values and not HEX

    ROOT = C2
    offset from root = 7 (up 7 1/2 steps) to G2
    offset from 2nd note = 5 (up from G2 and not the root) to C3
    offset from 3rd note = 4 (up from C3 not the root) to E3

    So the notes played are C2+G2+C3+E3

    It's simpler to start with all offsets from the original ROOT
    7 = G2
    12 = C3
    16 = E3

    Is this helping you?

    The notes played are the same either way. I just create the MAP's using intervals up from the ROOT for any chord rather than computing the interval from the last note.
    Later this will allow a chord to be played in any random order using a random function.

  • Ah, now i get it - my tables contains offsets from the root as did your very first, long example script.

    I don‘t see any advantage in using the other notation, there are several possible increments to reach the same third note (+5+7 equals +7+5) but you would not see that fact directly from these values. With the root based chord notation 0 5 12 or 0 7 12 its clearer.

  • @_ki said:
    Ah, now i get it - my tables contains offsets from the root as did your very first, long example script.

    I don‘t see any advantage in using the other notation, there are several possible increments to reach the same third note (+5+7 equals +7+5) but you would not see that fact directly from these values. With the root based chord notation 0 5 12 or 0 7 12 its clearer.

    It's also a lot easier to think of the chords and memorize the numbers for major 3rds and such. Please don't feel like I'm pushing you to do a re-write. I just know my next hack will go in this direction to allow me to create the chord library and select from the library for various styles all in one app.

    I'll start all over again and repeat the lessons to insure I can start to think in the SB terms.
    I'd like to find a sample of the Loop but I can write one and make it essential to the body of my chord player. Start with 2 notes and then 3 and then variable length chords ending in FF or whatever makes sense.

    I'll get C major working and add the transpose and delays on every SND. Now that you have shown me how to use Rozetta for CC's I can tie CC's the Transpose and Delay.

    Feel free to follow your instincts like you did with your recent OneFinger script. I'll share my Chord Maps with you as I create them. My first version will just convert what Version 1 had but in the MAPS of Chords arrangement versus the vertical columns of chords for C-to-B.
    Then I'll send the Chords to be used Maps for this classical orchestral style.

  • _ki_ki
    edited January 2019

    Feel free to follow your instincts like you did with your recent OneFinger script. I'll share my Chord Maps with you as I create them. My first version will just convert what Version 1 had but in the MAPS of Chords arrangement versus the vertical columns of chords for C-to-B. Then I'll send the Chords to be used Maps for this classical orchestral style.

    Nice, i look forward to some chord maps and probably will restructure my script to use them if this results in more possible selectable variations.
    In my sample script/sessions i only came up with different strumming variants and not harmonic changes, as i‘m lacking the ability to create well matching chords for so many intervals.
    Modwheel or velocity could influence the chord generated but that should conform to the ‚feel‘ of the music, so louder produces a ‚stronger‘ chord - but i don’t have that expertise.

  • edited January 2019

    OK. I create a simple C Major chord map to create a new script that uses
    CHORD and HARMONY maps.

    4 chord type maps - Major, Minor, Major 7th, Diminished intervals up from ROOT

    1 Major in Decimal 0 7 16 255 Hex = 0 7 10 FF (FF - end of chord list)
    2 Minor in Decimal 0 7 15 255 Hex = 0 7 F FF
    3 Major 7th in Decimal 0 7 10 16 255 Hex 0 7 A 10 FF
    4 Diminished 0 6 16 255 Hex 0 6 10 FF

    HARMONY MAPS - chromatic scale position list of what chord to play
    Ionian Map - 1 4 2 4 2 1 4 3 4 2 4 4

    EDIT:
    Everything should be relative so the user can pick 2 or tweak with CC's.
    ROOT = C2 (MIDI Note 48?)
    TRANSPOSE INTERVAL = 2

    This means the player plays in C major and the Script output chords up 2 half-steps to D major. This helps keep the scales played in an easy key while allowing output in any key like C#.

    A "Dorian Harmony" Map use the simple ROOT = D2 and a map showing:
    2 4 2 1 4 3 4 2 4 4 1 4

    Cool?

  • Yup - i also think thats the way to go and probably will adapt my script. (already wrote a longer answer via PM)

  • Food for thought (and pro version my next purchase probably)



    He has more robot-tools and bundles etc.
    http://fabriziopoce.com/progressive.html

    I didn't want to share it at Robot thread to not derail it but maybe here it's better placed. :wink:

  • @TheDubbyLabby said:
    Food for thought (and pro version my next purchase probably)

    The desktops get all the best stuff. But, there's a market for desktop apps. How much is this beast?

  • _ki_ki
    edited January 2019

    Looks cool, i like it with all the editors for progression, arps etc. Probably also offers markow-chains...

    But i will not try doing a streambyter conversion :p

  • @McDtracy said:

    @TheDubbyLabby said:
    Food for thought (and pro version my next purchase probably)

    The desktops get all the best stuff. But, there's a market for desktop apps. How much is this beast?

    It has a maxforlive free version and another full featured for 15€ for maxforlive and standalone version (based in max but standalone) for 10€.

    You can check all the other robots and prices here. He has also bundles with 33% discounts.

    :wink:

    @_ki said:
    Looks cool, i like it with all the editors for progression, arps etc. Probably also offers markow-chains...

    But i will not try doing a streambyter conversion :p

    I don't want it. I prefer use these tools inside Ableton rather than iOS but maybe there is any interesting idea to get, IDK...

Sign In or Register to comment.