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.

MOZAIC Help Line

1356715

Comments

  • @pejman : when I asked "And one more question: when you touch the pads in step 4, what log lines would we see if the script was behaving correctly?"

    I mean. If the script works as you intend what are the actual words that we should see in the log?

    I am trying to get you to take a very careful look at your script to understand what should happen. As it happens, I am right now going line for line through some tricky streambyter code and comparing what values I expect to see in my log with what I am actually seeing.

    Something that you should do to figure out the answer is this. Perform the first three steps that you mentioned above.

    Now, ask yourself, what has to happen when I perform this last step (that doesn't work) for it to work correctly.

    You said in describing the problem: "4, return to pad num 0 problem issue
    I expect pad num 8 become colorless and pad num 6 become pink. ( which was painted pink in step 1 ).
    But this does not happen in practice."

    So, look at your script, what has to happen in the script for touching pad 0 to result in pad 8 becoming colorless and and pad 6 to be pink.

  • @spiegel : I mean. If the script works as you intend what are the actual words that we should see in the log?

    I completely understand what you mean, but this is the only answer I can give.

    @spiegel , So, look at your script, what has to happen in the script for touching pad 0 to result in pad 8 becoming colorless and and pad 6 to be pink.

    I have been looking at this patch for three weeks and asking myself all kinds of questions, but I can't find the answer.

    The topic is very confusing and complicated for me and I have never experienced anything like this before, That is why I am asking for your help.

  • @pejman : i'll take a look when I have some time and see if I can help direct you.

    If it is very confusing to you to know what should happen in the script, you probably would be well-served to read again the being of the Mozaic manual and perform all the tutorials and then write some simple scripts to solidify your understanding of how scripts were.

    Scripts are sets of directions that Mozaic performs literally. When you look at a script that is at your level of understanding, each direction will make sense to you and you will understand what the computer will do when it executes the instruction. And if the something happens that surprises you, you will have an idea what to look at.

    It is like giving directions to someone about how to get from your living room to a market five miles a way. If they followed your directions correctly and ended up at the wrong place, you'd probably have an idea where your directions went wrong: "Oh, I said to turn right after the third stoplight -- they needed to turn left at that stoplight."

  • Thank you for helping me.

    I have read Mozaic manual several times so far. But I can get some help from the Mozaic manual.
    And so far I have made a lot of practice scripts.

  • edited May 2023

    @pejman : did you make changes to @wim's script other than adding log lines?

  • @espiegel123

    Yes, I changed some things and disabled some lines.

    This is the main script of @wim



    @Description Example for @pejman: See @OnPadDown for how to use SendMidiCC in response to touching pads. This example demonstrates how to clean up the code a little by moving the CC sending out to a separate event. @End @OnLoad Call @InitializeLayers layer = 1 Call @LoadLayer Call @SetPads delay = 2 ShowLayout 2 v = [1,3,5,7,9,2,4,6,8,0,33] @End @OnPadDown // When we tap one of the first four pads, recall the layer associated with it pad = LastPad Log cc[pad] if pad < 4 layer = pad+1 Call @LoadLayer Call @SetPads elseif pad > 3 Call @SendLayer endif @End @SendLayer // Loop through the pads, sending cc # and value combinations stored for the layer. // We get the CC# from what we set in the cc array. The last touched pad, stored in "pad" // in @OnPadDown event, tells which CC to use. //for idx = 0 to 11 SendMIDICC 0, cc[layer-1], active_value[pad-4], delay // I like to set a small delay between midi messages in case hosts have trouble // processing too many messages at once. //endfor @End @InitializeLayers // This could be any code you want. We'll just load random values here. v = [1,3,5,7,9,2,4,6,8,0,33] for idx = 0 to 11 //layer01_value[idx] = v //Random 1,127 layer02_value[idx] = Random 1,127 layer03_value[idx] = Random 1,127 layer04_value[idx] = Random 1,127 layer01_color[idx] = Random 0,7 layer02_color[idx] = Random 0,7 layer03_color[idx] = Random 0,7 layer04_color[idx] = Random 0,7 endfor // I added some CC #s to use for this example cc = [20, 21, 22, 23] @End @LoadLayer // This is where we copy a selected layer to the active value set // The "layer" value must be set before calling this event // (There are more elegant ways of doing this, but they require more explanation so // we'll keep it simple here.) if layer = 1 CopyArray v, active_value CopyArray layer01_color, active_color elseif layer = 2 CopyArray layer02_value, active_value CopyArray layer02_color, active_color elseif layer = 3 CopyArray layer03_value, active_value CopyArray layer03_color, active_color elseif layer = 4 CopyArray layer04_value, active_value CopyArray layer04_color, active_color endif @End @SetPads LabelPad 0,{1️⃣} LabelPad 1,{2️⃣} LabelPad 2,{3️⃣} LabelPad 3,{4️⃣} // use the active_value and active_color arrays to set up the pads for p = 4 to 15 LabelPad p, {Value: }, active_value[p-4] ColorPad p, active_color[p-4] endfor @End
  • @pejman : maybe I am overlooking something, but i don't see anything in your script that saves the state of the pattern pads. I see references to an array that seems like it is meant to track the active state but no assignments when you press a pattern pad that would allow the state to be recalled.

    Again i might be overlooking something.

    Please trace through the lines of code that are executed when you press a pattern pad and see if you see something I am missing.

  • This script was provided by wim as an example when I needed to send ccs by the pads and store the color of each pad in the tracks. But it did not solve the issue for me in the way I wanted.

    @espiegel123 : Please trace through the lines of code that are executed when you press a pattern pad and see if you see something I am missing.

    No, unfortunately I can't find anything.

  • @pejman said:
    This script was provided by wim as an example when I needed to send ccs by the pads and store the color of each pad in the tracks. But it did not solve the issue for me in the way I wanted.

    @espiegel123 : Please trace through the lines of code that are executed when you press a pattern pad and see if you see something I am missing.

    No, unfortunately I can't find anything.

    There you are. You need to save the states of any pads whose state you want to recall. Currently, if you press pad 0 then pad 6...nothing happens in the script to remember that pad 6 is active when pad 1 is. And nothing to remember that pad 8 should be active when pad 1 is active.

  • Incidentally, my question has always been, what is there in this script that has to do with the color issue I've brought up?

  • @pejman said:
    Incidentally, my question has always been, what is there in this script that has to do with the color issue I've brought up?

    Do you mean an explanation other than there is nothing in the script that stores the pad states when they change?

  • @espiegel123 said:

    @pejman said:
    Incidentally, my question has always been, what is there in this script that has to do with the color issue I've brought up?

    Do you mean an explanation other than there is nothing in the script that stores the pad states when they change?

    Yes, that's exactly what I mean, there is nothing to store the color pad ( pattern ) in the tracks

  • Do you have a solution for this problem?

  • @pejman said:
    Do you have a solution for this problem?

    Add code so that when the pattern pads are tapped the status is saved into a variable or array that you can use to recall it later. It is the same issue that you had with the previous script.

    You need to create variables or arrays to store values you need to recall.

  • This guide was given to me before but unfortunately I am not able to write it, please write this code for me.

    Because I don't know how to write this code and where exactly to put it. If I really knew this myself, I could have solved it by now.

  • wimwim
    edited May 2023

    @pejman, these are foundational basics. If you want to learn to write your own scripts then it will be to your benefit to persist with @espiegel123 's patient attempts to teach you step-by-step. Requests like this to write the code for you don't help with that because when we do provide code it seems like you don't study it until you understand how it works - you just move on to something else.

    At some point you really need to decide if you want to put in the hard work to become independent at writing your own code, or if you just want to write out clear specifications for apps that you'd like others to code for you.

    I believe you can learn if, rather than giving up each time you get stuck, you try to ask questions about specifically what you don't understand. And I don't mean just "I tried but I don't understand where to put the code."

    I hope you'll stick with it. I believe at some point things will start to make more sense.

  • @pejman said:
    This guide was given to me before but unfortunately I am not able to write it, please write this code for me.

    Because I don't know how to write this code and where exactly to put it. If I really knew this myself, I could have solved it by now.

    Unfortunately, I don’t have the time available to write the script.

    I could get you started with some simple scripting exercises to help you learn but don’t have time to write the script for you.

  • edited May 2023

    First of all, I would like to sincerely thank you for all your efforts and time spent on me.

    @espiegel123 : You need to create variables or arrays to store values you need to recall.

    When you give me advice, I am not able to do it, where do you think the problem comes from?

    You tell me to read the music manual while I have read it several times.
    I don't have any problem with learning, but wouldn't it be better for you to change your teaching method with me and talk a little more clearly and clearly about each topic than to ask questions that are confusing for me?

    The fact that you say that I jump from one topic to another is not the case at all, because all these topics that I am asking you about are in the script that I am making, and therefore I think about them all and study them. , because it will be very interesting and useful for me

  • @espiegel123 said:

    @pejman said:
    This guide was given to me before but unfortunately I am not able to write it, please write this code for me.

    Because I don't know how to write this code and where exactly to put it. If I really knew this myself, I could have solved it by now.

    Unfortunately, I don’t have the time available to write the script.

    I could get you started with some simple scripting exercises to help you learn but don’t have time to write the script for you.

    Ok, I agree with this method if you can give me simple examples so that I can understand better and easier what you mean.

  • The main problem is that in many cases I do not easily understand what you mean by the question you ask me.

  • @pejman wrote:

    When you give me advice, I am not able to do it, where do you think the problem comes from?

    I don't know. Perhaps, the problem is that there are some basic concepts that we need to help you learn.

    You tell me to read the music manual if I read it several times.
    I don't have any problem with learning, but wouldn't it be better for you to change your teaching method with me and talk a little more clearly and clearly about each topic than to ask questions that are confusing for me?

    I am trying to be clear. I was hoping that the questions would lead to your going through your code line by line and ask questions that would lead to your recognizing what was happening.

    I think part of the problem is we are starting by talking about scripts that you don't understand -- so we need to get you pointed at some exercises to help you get better understanding of some key foundational elements.

    Both of the scripts, we've looked at had essentially the same problem which I will boil down to "you can recall something you don't store in the first place". Solving that problem requires knowing how to store things -- and then recall them.

    I think helping you to understand and use arrays will help. They are key to the sorts of scripts that we are looking at.

    Let's have you start by looking at the Mozaic manual's lesson "Lesson 5: Using an array to create a drumpad controller"

    Step #1: enter that script and use it to send notes to a synth (rather than a drum machine for reasons that will become clear later).

    When you enter that script, ask questions here about anything at all that you don't understand in the script. It is critical that we only move on from an exercise once it is thoroughly understood.

    Once that script is entered and working and everything understood, I'll have you add some features to deepen your understanding.

  • I think this method is very good, thank you for being patient with me.

  • I read lesson 5. I am ready to add whatever you decide.

    1, Question about this paragraph: Inside this array we can store whatever we like: every cell is exactly like any other variable. The powerful thing is that we can reference each cell by its index number. We can use this to ‘parametrize’ our code:

    I do not understand the meaning of this sentence very well : ( we can reference each cell by its index number ).

    2, I wrote a code in onload to label the pads. Do you think this is the best way to label this script?


    @OnLoad ShowLayout 2 // these are the 8 notenumbers for Ruismaker drums notenum = [49, 51, 54, 56, 58, 61, 63, 66] p = LastPad for p = 0 to 7 LabelPad p, notenum[p] endfor @End @OnPadDown if LastPad < 8 nn = notenum[LastPad] vel = LastPadVelocity SendMIDINoteOn 0, nn, vel SendMIDINoteOff 0, nn, 0, 500.0 endif @end
  • @pejman : good job.

    You wrote: "I do not understand the meaning of this sentence very well : ( we can reference each cell by its index number )."

    When I have time in the next day, I'll try to explain so that it is clear and the give you some exercises to solidify that understanding as it is a key foundational concept. The short version is an array is like a cupboard with lots of compartments. We can store one number in each compartment. We can store or retrieve things (numbers) from the cupboard by using the compartment number (that compartment number is called an index). If my cupboard is called noteNumbers, the first compartment is noteNumbers[0]. The next compartment is noteNumbers[1] and so on.

    In the meantime, find the page in Mozaic's manual where arrays are described and read it slowly and carefully (perhaps a few times) to see if that clarifies it.

    Also, read again the part of this tutorial chapter that starts "The next 8 lines are more interesting."

    We'll use this tutorial code as a base for using arrays to store and recall and manipulate related information.

  • edited May 2023

    @espiegel, thanks . I will definitely read.

    A small question about the log,:
    I have set a bunch of pads to send x amount of cc with x amount of value if I hit them.
    In order to see these two values ​​in the log, what should I write for the log in Onpaddown , under each pads.

  • @pejman said:
    @espiegel, thanks . I will definitely read.

    A small question about the log,:
    I have set a bunch of pads to send x amount of cc with x amount of value if I hit them.
    In order to see these two values ​​in the log, what should I write for the log in Onpaddown , under each pads.

    The format for a Log line is

    log thingToDisplay, thingToDisplay2, thingToDisplay3......

    thingToDisplay can be a variableName (which can be an array slot or a system variable) or function call or text.

    Text needs to be enclosed by {}

    for example:

    log {pad number: }, lastPad, { was played}

  • Yes i know .
    But for cc num and cc value , which is issued from each pad ,what should i write.?

  • @pejman said:
    Yes i know .
    But for cc num and cc value , which is issued from each pad ,what should i write.?

    Whatever information would be helpful to know. There are no cc nums or values in this script. So, I am not sure what you mean by cc num and cc value innthis comtext.

  • For example:

    ```

    @OnPadDown

    if LastPad = 0
    SendMIDICC 1, 0, 0
    Log {cc# number},ccnum ,{ccvalue}, ccvalue ??

    elseif LastPad = 1
    SendMIDICC 1, 0, 45
    Log {cc# number},ccnum ,{ccvalue}, ccvalue ??

    elseif LastPad = 2
    SendMIDICC 1, 0, 90
    Log {cc# number},ccnum ,{ccvalue}, ccvalue ??

    @End

    ```

  • @pejman: I am going to suggest not getting ahead of yourself. Yes, you could do something like that -- but one of the point of using arrays (as Bram mentions in the sections of the manual I pointed to you) is to avoid having to use big if/elseif chains.

    When you understand this well, you will see a different way of doing things like that.

Sign In or Register to comment.