Forum Index Register Members List Events Mark Forums Read Help

 International Skeptics Forum Coding a little custom app?

 Welcome to the International Skeptics Forum, where we discuss skepticism, critical thinking, the paranormal and science in a friendly but lively way. You are currently viewing the forum as a guest, which means you are missing out on discussing matters that are of interest to you. Please consider registering so you can gain full use of the forum features and interact with other Members. Registration is simple, fast and free! Click here to register today.
 4th July 2018, 06:30 AM #1 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Coding a little custom app? I'm not at all sure if this is a paying gig. I can pay some small reasonable amount for this, but not enough, obviously, to employ teams of coders. It should only be a reasonably fun project for someone. It can be a Dr. Racket app, and we could print it here, open source. This is a computer app of some kind that will print chains of tone-series labels based on user-specified go-to rules. Just all the possible chains. It's not that I'm lazy*, it's just that there's a huge number of possibilities and computers are much, much better at finding all of them. =============================== Simple Row-Chainer =============================== > Could be stand-alone, could be tab in Microtonal Scales >The user lists the series >The user lists to which row-forms the series can go to > The user lists the maximum chain length and the number of chain-solutions to print >The "go-to row-forms list" is a list of series-labels that are the possible rows you can go to from P/0, I/0, R/0, and RI/0. The computer gives four lines beginning "from P/0:, from I/0:, from r/0:, from: RI/0:" and the user fills in the forms. Example: from P/0: P/8 r/4 r/5 i/6 ri/10 ri/9 from I/0: i/4 ri/8 ri/9 p/6 r/4 r/2 r/3 from r/0: r/8 p/4 p/5 i/3 i/10 i/9 from: RI/0: ri/4 i/8 i/9 r/6 p/4 p/2 p/3 P = Primary or original I = Inversion R = Retrograde RI= Retrograde Inversion /n means the transposition level. P/0 is whatever you typed as the original row. > The go-to list is anything the user types; it doesn't have to actually be good (in the sense I've been discussing in the 12-tone rows thread.) > The program calculates the successions based on the logic of your list: If you specify p/0 to p/1 as a legal move, then of course the computer has to have the math to understand that it can also go from p/2 to p/3 wherever they might occur in some list. It does the simple additions and subtractions necessary to keep track of transposition levels ( the number after the /.) > The program prints every possible solution up to chain-length n and number of solutions m, every solution being a loop that begins and ends on p/0. A solution cannot contain the same series twice, other than the p/0 at beginning and end. example of a line of output, with or without the silly arrows: p/0 ->r/5 ->p/8 ->ri/4 ->r/10 ->r/6 ->i/4 -> p/10 ->p/6 ->ri/3 -> p/0 Deluxe version: > There is one more user field: Require Forms If checked, the program only prints solutions which include at least 1 of the user's listed forms -- that is P, I, R, or RI. Super-Duper Deluxe version: >It understands 5m row-forms. That's it -- not particularly exciting, but it's what I need right now. I think that this would be used rarely enough that it could be slow and ugly, as long as it spits out all the right answers. caleb * more stupid than lazy Last edited by calebprime; 4th July 2018 at 07:02 AM.
 4th July 2018, 06:58 AM #2 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Oh, p.s., I can already see that the user doesn't in fact need to enter the series at all for this to work. Everything is based on the list of possible moves.
 4th July 2018, 07:57 AM #3 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Simply put -- I'd spend up to \$500 on this, but \$0 is also ok.
 4th July 2018, 01:55 PM #4 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 The forms are much less mysterious than they seem, they're just like naming something 4 different versions and having simple rules for toggling back and forth between them. Transposition is just cumulative adding and subtracting mod12. Forty-eight versions or states to move between, total. Last edited by calebprime; 4th July 2018 at 01:57 PM.
 4th July 2018, 02:00 PM #5 Molinaro Illuminator     Join Date: Dec 2005 Posts: 4,295 Dumb question... is this about music? I can't seem to make heads or tails out of what you are talking about and music is a topic that I know absolutely nothing about. __________________ 100% Cannuck!
 4th July 2018, 02:02 PM #6 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Oh yes, about music. But it's really about successions of symbols, so it's pretty abstract.
 4th July 2018, 02:07 PM #7 The Greater Fool Illuminator     Join Date: Feb 2007 Location: Scottsdale, AZ, USA, North America, Earth, Sol, Milky Way Posts: 3,707 Sorry, most coders became coders because art was so out of reach. If being a "moody musician" was possible, would we go with computers? __________________ - "Who is the greater fool? The fool? Or the one arguing with the fool?" [Various; Uknown] - "The only way to win is not to play." [Tsig quoting 'War Games']
 4th July 2018, 02:53 PM #8 Hevneren Thinker   Join Date: Jul 2007 Posts: 181 Originally Posted by calebprime I'm not at all sure if this is a paying gig. I can pay some small reasonable amount for this, but not enough, obviously, to employ teams of coders. It should only be a reasonably fun project for someone. It can be a Dr. Racket app, and we could print it here, open source. This is a computer app of some kind that will print chains of tone-series labels based on user-specified go-to rules. Just all the possible chains. It's not that I'm lazy*, it's just that there's a huge number of possibilities and computers are much, much better at finding all of them. =============================== Simple Row-Chainer =============================== > Could be stand-alone, could be tab in Microtonal Scales >The user lists the series >The user lists to which row-forms the series can go to > The user lists the maximum chain length and the number of chain-solutions to print >The "go-to row-forms list" is a list of series-labels that are the possible rows you can go to from P/0, I/0, R/0, and RI/0. The computer gives four lines beginning "from P/0:, from I/0:, from r/0:, from: RI/0:" and the user fills in the forms. Example: from P/0: P/8 r/4 r/5 i/6 ri/10 ri/9 from I/0: i/4 ri/8 ri/9 p/6 r/4 r/2 r/3 from r/0: r/8 p/4 p/5 i/3 i/10 i/9 from: RI/0: ri/4 i/8 i/9 r/6 p/4 p/2 p/3 P = Primary or original I = Inversion R = Retrograde RI= Retrograde Inversion /n means the transposition level. P/0 is whatever you typed as the original row. > The go-to list is anything the user types; it doesn't have to actually be good (in the sense I've been discussing in the 12-tone rows thread.) > The program calculates the successions based on the logic of your list: If you specify p/0 to p/1 as a legal move, then of course the computer has to have the math to understand that it can also go from p/2 to p/3 wherever they might occur in some list. It does the simple additions and subtractions necessary to keep track of transposition levels ( the number after the /.) > The program prints every possible solution up to chain-length n and number of solutions m, every solution being a loop that begins and ends on p/0. A solution cannot contain the same series twice, other than the p/0 at beginning and end. example of a line of output, with or without the silly arrows: p/0 ->r/5 ->p/8 ->ri/4 ->r/10 ->r/6 ->i/4 -> p/10 ->p/6 ->ri/3 -> p/0 Deluxe version: > There is one more user field: Require Forms If checked, the program only prints solutions which include at least 1 of the user's listed forms -- that is P, I, R, or RI. Super-Duper Deluxe version: >It understands 5m row-forms. That's it -- not particularly exciting, but it's what I need right now. I think that this would be used rarely enough that it could be slow and ugly, as long as it spits out all the right answers. caleb * more stupid than lazy I guess I could give it a try. I used to be a musician, now I’m a programmer. I have sone knowledge about dodecaphony.
 4th July 2018, 03:59 PM #9 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Great, I think you'll find the basic logic is pretty simple even if I didn't make it clear. I'll check in again tomorrow.
 5th July 2018, 03:28 AM #10 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Great Hevneren, I've PM'd you some details. Let me know soon -- this is the kind of thing I want to do now, when it's bugging me.
 5th July 2018, 04:57 AM #11 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Originally Posted by calebprime ... >The user lists to which row-forms the series can go to ... But if this ever changin' world In which we live in Makes you give in and cry
 5th July 2018, 05:13 AM #12 Wolrab Illuminator   Join Date: Dec 2002 Posts: 4,424 I guess I could give it a try. I used to be a magician, now I’m a pro-gamer. I have some knowledge about Dodecanese. Glad to be of no help whatsoever. Make me learn new words, will you! __________________ "Such reports are usually based on the sighting of something the sighters cannot explain and that they (or someone else on their behalf) explain as representing an interstellar spaceship-often by saying "But what else can it be?" as though thier own ignorance is a decisive factor." Isaac Asimov
 5th July 2018, 05:20 AM #13 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Thanks Wolrab. I have to wait to see what Hevneren says first. He hasn't gotten back to me yet. It may help to understand that the program is only dealing with abstract row-label relationships, so for all it knows, the "row" might be 1 note long, or 17 notes long. This means that the logic is simple. There are 12 transpositions by 4 forms, (backwards/forwards, upside-down/right-side up), so 48 possible squares on the checkerboard. The user defines what is a legal move.
 5th July 2018, 05:36 AM #14 Octavo Illuminator     Join Date: Jun 2007 Location: South Africa Posts: 3,485 I'm a fairly handy C# dev, willing to spend some time putting together a simple app, but I'm afraid the OP makes very little sense to me, so I would need a lot more explanation. What I got from it was that the user specifies some starting value and how far to generate variations from that starting value and then uses some mathamatical logic to derive a set of outputs. If you can help me understand exactly what the user types in as the starting input and how the app should then generate valid outputs based off that (what are the rules for the generation of chains), I might be able to whip something up. You can see some of my previous work here: http://github.com/Octavo8/ __________________ This signature is intended to imitate people.
 5th July 2018, 05:45 AM #15 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Great, no lack of people with coding chops of different kinds. Yes, Octavo, your description is more or less right. Music theory is the language I speak, when I speak it I'm thinking in notation or a keyboard or guitar-neck. It has to be translated into the simple math that it is. Also, I have to use examples, as I've done here. I'm not capable of generalizing enough to explain it properly, often. 69Dodge would just ask me questions until he got it, then he was off to work.
 5th July 2018, 06:47 AM #16 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Maybe this can be grasped in a flash if you have the visual image of a typical 12-tone matrix, also sometimes known more fussily as an inversion matrix. https://unitus.org/FULL/12tone.pdf Sorry to make someone scroll down through all that verbiage! A completed matrix is finally shown towards the end. What we're doing is jumping around among the 48 forms of a 12-tone matrix, and because the user supplies the legal moves, the program doesn't need to understand anything about the actual series you're using, presumably. It may be confusing that when I'm working, I'm thinking of an actual series, but the program doesn't need to know that. Those are two key concepts that may be causing confusion.
 5th July 2018, 07:46 AM #17 Octavo Illuminator     Join Date: Jun 2007 Location: South Africa Posts: 3,485 Originally Posted by calebprime Maybe this can be grasped in a flash if you have the visual image of a typical 12-tone matrix, also sometimes known more fussily as an inversion matrix. https://unitus.org/FULL/12tone.pdf Sorry to make someone scroll down through all that verbiage! A completed matrix is finally shown towards the end. What we're doing is jumping around among the 48 forms of a 12-tone matrix, and because the user supplies the legal moves, the program doesn't need to understand anything about the actual series you're using, presumably. It may be confusing that when I'm working, I'm thinking of an actual series, but the program doesn't need to know that. Those are two key concepts that may be causing confusion. Ok, that PDF helped a lot. So would the user input then be the original row pitch classes? The app calculates the 12x12 matrix and then the user defines a ruleset for moving through the matrix? How do you specify the rules? I'll reread the thread in a minute and see if I understand better. __________________ This signature is intended to imitate people.
 5th July 2018, 08:15 AM #18 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 As user, you choose the rules with a standard form that looks something like this: From P/0: From I/0: From R/0: From RI/0: You fill in each line with as many specific row forms from the possible 48. If I say that from P/0: p/4 (moving from p/0 up 4 steps to p/4) is legal, then all moves with a p/n adding 4 are also legal. But note: Not I/4 to I/8, unless I explicitly say so, by saying: I/0 to I/4. That is, I have to specify each of the 4 basic directions separately, but within each of the 4, the transposition rules are generalizable.
 5th July 2018, 08:17 AM #19 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 If you mean, why does the user choose that particular kind of move? -- that depends on the purposes of the user and the particular properties of the exact series she's working with. Blissfully, we don't have to tell the computer anything about that. Heh. This is for already-hardened recidivist 12-toners, not fer amateurs. Last edited by calebprime; 5th July 2018 at 08:19 AM.
 5th July 2018, 08:24 AM #20 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Originally Posted by calebprime As user, you choose the rules with a standard form that looks something like this: From P/0: From I/0: From R/0: From RI/0: You fill in each line with as many specific row forms from the possible 48. If I say that from P/0: p/4 (moving from p/0 up 4 steps to p/4) is legal, then all moves with a p/n adding 4 are also legal. But note: Not I/4 to I/8, unless I explicitly say so, by saying: I/0 to I/4. That is, I have to specify each of the 4 basic directions separately, but within each of the 4, the transposition rules are generalizable. Not the most elegant way of representing the rules, but it's at the right level of intuition for me, and it's my dime. It's easier-but-dumber to have 4 separate lists like this. 69Dodge might have realized that there was some redundancy, and fought it. Some redundancy is human.
 5th July 2018, 09:50 PM #21 Octavo Illuminator     Join Date: Jun 2007 Location: South Africa Posts: 3,485 Originally Posted by calebprime Not the most elegant way of representing the rules, but it's at the right level of intuition for me, and it's my dime. It's easier-but-dumber to have 4 separate lists like this. 69Dodge might have realized that there was some redundancy, and fought it. Some redundancy is human. Ok, I think I understand enough to get a start. I'll put something together this afternoon and update the thread then. __________________ This signature is intended to imitate people.
 6th July 2018, 01:58 AM #22 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 I haven't heard back from Hevneren, so I take it that he/she doesn't want to do it. Octavo, you seem interested. Let's go ahead.
 6th July 2018, 05:16 AM #23 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Here is the way the user screen can look. I've added a few features and some details, which I'll discuss. The user types in row forms, such as RI/11, I/0. Spaces, no commas. Code: ``` from P/0: from I/0: from R/0: from RI/0: Minimum and Maximum number of series in chain: Only print solutions that contain these forms: (or Required Forms, or something) Max number of solutions to print: Do It Interrupt Save Parameters Eliminate Duplicate Solutions``` Because I allow for a redundant set of legal moves, the program might print the same solution multiple times. If not, fine. I'd like to stipulate no duplicate solutions. But if it can't be easily helped, then we may need a command to get rid of them. It would be useful to be able to set a range of possible chain-length solutions. That way you don't have to look at either chains that are too short or too long, if you don't want to. It would be nice if you could interrupt the search without losing your input parameters. If this is hard, it's not essential. It would be nice if you could save your user input in a file you can name. I almost forgot. It would be fantastic and it would greatly improve the power and usefulness of the program, if the user can type in some "required targets" -- series-forms that the chain has to contain to be printed. And just a reminder, can't be too clear. The chains are always loops that start and end on P/0 but contain no other repeated series-forms. Last edited by calebprime; 6th July 2018 at 05:27 AM.
 6th July 2018, 08:35 AM #24 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Just to be clear, the two "nice" items on the above list would be the first two features I'd lose to save programming time. eta: next, or 3rd to not happen would be the "no duplicate solution" rule or filter. I could live with duplicates. Last edited by calebprime; 6th July 2018 at 08:48 AM.
 6th July 2018, 01:27 PM #25 Hevneren Thinker   Join Date: Jul 2007 Posts: 181 The way you describe the problem, it seems like the series only would move upwards so it would in practice be near impossible to come back to P0. Unless: - we don't care about what octave a note is in, so we use the number of steps modulo 12 OR - we allow downward (negative) steps, denoted by I/-2, P/-4 etc. Or did I miss something?
 6th July 2018, 01:29 PM #26 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 you're right, we use the steps always mod 12, a cycle. So, if I define p/0 to p/4 (up 4 semitones) as a legal move, it means that there will be a cycle going p/0 to p/4 to p/8 to p/0 that would automatically be available.
 6th July 2018, 06:16 PM #27 pipelineaudio Illuminator     Join Date: Feb 2006 Posts: 4,261 I'm learning Juce right now, to do something slightly related __________________ Don't fear the REAPER, embrace it
 6th July 2018, 06:52 PM #28 psionl0 Skeptical about skeptics     Join Date: Sep 2010 Location: 31°57'S 115°57'E Posts: 13,870 Originally Posted by calebprime Oh, p.s., I can already see that the user doesn't in fact need to enter the series at all for this to work. Everything is based on the list of possible moves. If you write the user manual for this app I might see how difficult it is to write the app. __________________ "The process by which banks create money is so simple that the mind is repelled. Where something so important is involved, a deeper mystery seems only decent." - Galbraith, 1975
 7th July 2018, 03:19 AM #29 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Octavo had expressed an interest, and I had posted that he should proceed. Hevneren and I pm'd each other about this. I hadn't anticipated confusion about who might be interested, so maybe I should be more clear. I think anyone who can work on this now and who is willing to do a little back-and-forth with me to clear any questions up would be fine. Once you understand the problem you will see that it has not that much to do with music -- it's almost more like a travelling salesman problem or something. Let's say: Octavo -- the ball's in your court, the gig's yours to do or pass to the next interested person. I do take work seriously, and I'm sorry I can't pay an adequate amount. @Psion -- Well, I can do the next best thing, which is to compile all the info and to answer any questions you might have point-by-point. Sorry folks if I haven't been much of a manager.
 7th July 2018, 05:52 AM #30 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 This is the essence of it, though I have to print the rest of the rules, or have you the reader refer back to previous posts. The output is always a loop, a list of "addresses" or row-labels beginning and ending on p/0, without repeating any labels inbetween. Code: ```the 48 row-labels: p/0 p/1 p/2 p/3 p/4 p/5 p/6 p/7 p/8 p/9 p/10 p/11 r/0 r/1 r/2 r/3 r/4 r/5 r/6 r/7 r/8 r/9 r/10 r/11 i/0 i/1 i/2 i/3 i/4 i/5 i/6 i/7 i/8 i/9 i/10 i/11 ri/0 ri/1 ri/2 ri/3 ri/4 ri/5 ri/6 ri/7 ri/8 ri/9 ri/10 ri/11 Template for user input: From P/0 to: [row-label] [row-label] [row-label] From R/0 to: From I/0 to: From RI/0 to: The user specifies as many legal moves from each of P/0, R/0, I/0, and RI/0 starting-points as she wants. Typically from 1 to ca. 15 other addresses. The part of the address /n is called the transposition, or transposition level. The transpositions that the user specifies are written as absolute addresses, but are treated as relative moves. example: From P/0 to: p/3 From R/0 to: From I/0 to: From RI/0 to: comment on example: The user has specified p/3 as a legal move from p/0. This means that all/any moves from a p/n to p/n+3 are legal. example: From P/0 to: p/3 RI/2 From R/0 to: From I/0 to: From RI/0 to: comment on example: In addition to movement 3 to the right, or adding 3, the chain can now go from a p/n to an ri/n+2 example: From P/0 to: p/3 RI/2 From R/0 to: From I/0 to: From RI/0 to: I/6 P/4 comment on example: Now the chain can go from an RI/n to an I/n+6 or a P/n+4, in addition to the other places. The program is forgiving and liberal about upper-case, lower-case, there's no difference.``` paste from previous post: The user types in row forms, such as RI/11, I/0. Spaces, no commas. from P/0: from I/0: from R/0: from RI/0: Minimum and Maximum number of series in chain: Only print solutions that contain these forms: (or Required Forms, or something) Max number of solutions to print: Do It Interrupt Save Parameters Eliminate Duplicate Solutions Because I allow for a redundant set of legal moves, the program might print the same solution multiple times. If not, fine. I'd like to stipulate no duplicate solutions. But if it can't be easily helped, then we may need a command to get rid of them. The user can set a range of possible chain-length solutions. That way you don't have to look at either chains that are too short or too long, if you don't want to. It would be nice if you could interrupt the search without losing your input parameters. If this is hard, it's not essential. It would be nice if you could save your user input in a file you can name. The user can type in some "required targets" -- series-forms that the chain has to contain to be printed. (This is essential for a more interesting, powerful program.) And just a reminder, can't be too clear. The chains are always loops that start and end on P/0 but contain no other repeated series-forms. Last edited by calebprime; 7th July 2018 at 06:09 AM. Reason: fixed +4
 7th July 2018, 06:13 AM #31 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Oh, I'm assuming we might need an interrupt because I'm thinking there may be a combinatorial explosion and the program might need hours. That could easily be wrong, I haven't thought it through. If the search/output time is in low seconds, we don't need to interrupt.
 7th July 2018, 08:52 AM #32 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 And finally, the last very minor (heh) variation or addition. We could have a switch back and forth between two kinds of chains: a) no repeated addresses at all b) no repeated address-combinations: having gone from RI/2 to p/3 before in the same chain, you can reuse RI/2, but only if you go somewhere else this time. If as a result of my refinements, the project now looks more gnarly to write, then I'll add some token insufficient totally inadequate amount to the price tag. That's it. No more changes or wishes from my end. Last edited by calebprime; 7th July 2018 at 08:53 AM.
 8th July 2018, 02:36 AM #33 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Afaik, I'm waiting for Octavo to accept or refuse, then Hevneren, then whoever else was next in line on the thread. The price has gone up slightly now that I know exactly what I want and what priority each thing has. But given that the job is noblesse oblige for you the programmer, I don't know of a fair way to set the price. That it could be open source may or may not make a difference. As far as my involvement, I can compile anything written here and discuss it, but I've reached the limits of my poor ability to describe the program. At this stage 69Dodge would ask me a couple of questions and then he'd get to work. I'm fairly certain that the program now works in principle and does something interesting to me. Let's get started! Working with 69dodge (if you can call him doing all the work "working with") has been one of the most fun, satisfying experiences ever. The reason I haven't approached him this time is that I think he's tired of working on stuff for me, and more immediately, I lost most of my email contacts a while back and don't have his email address. Somewhat comical.
 8th July 2018, 04:35 AM #34 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 I'm going to compile a summary which will serve as the specs for the project. I'd also defend the format of the user input this way. It's as if I'm saying: "C7 to Eb7 stands for all moves up a minor third, or 3 semitones." It's often the custom for musicians to think in terms of absolute locations (Eb7) but understanding relative relationships. Because of the way I work, I prefer this to saying something like +3 or -3 in that field. So if in the middle of some chain of row-labels, you're on RI/9 and the user input is: from RI/0: ri/4 that means the chain could go to RI/9+4, or RI/1 mod12 from RI/9 at that point. The transposition numbers work from 0 to 11. The program is forgiving about upper/lower case: doesn't care. Last edited by calebprime; 8th July 2018 at 04:39 AM.
 8th July 2018, 05:32 AM #35 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 In the spoiler is an edited dump of everything that I've posted that is currently the case. Max budget has gone up to a grand, but that's as far as it could go. The spoiler has some repetition but I don't think it has any contradictions at this point -- I should have edited those all out. Everything should be consistent, if poorly organized. I want to do this in the next week or 2 if possible. If not, ok. Budget: 0 to \$1000 for delivered, debugged working program. \$1000 for all features requested and you hold my hand a very little bit. \$500 for bare bones minimum. This is a computer app of some kind that will print chains of tone-series labels based on user-specified go-to rules. Just all the possible chains. It should only be a reasonably fun project for someone. It can be a Dr. Racket app, and we could print it here, open source. Could be stand-alone, could be tab in Microtonal Scales Title of App: Simple Row-Chainer >The user lists to which row-forms the series can go > The user lists the range of chain lengths and the number of chain-solutions to print >The "go-to row-forms list" is a list of series-labels that are the possible rows you can go to from P/0, I/0, R/0, and RI/0. The computer gives four lines beginning "from P/0:, from I/0:, from r/0:, from: RI/0:" and the user fills in the forms. Example: from P/0: P/8 r/4 r/5 i/6 ri/10 ri/9 from I/0: i/4 ri/8 ri/9 p/6 r/4 r/2 r/3 from r/0: r/8 p/4 p/5 i/3 i/10 i/9 from: RI/0: ri/4 i/8 i/9 r/6 p/4 p/2 p/3 P = Primary or original I = Inversion R = Retrograde RI= Retrograde Inversion /n means the transposition level. P/0 is the nominal starting and ending-point. > While for this user, the labels refer to real series with real pitches and specific properties, for the computer -- and perhaps for the programmer -- the application doesn't need to understand this. Why? Because the user fills in the entire set of (transpositionally relative) legal moves, and the computer finds every possible solution within constraints. > The go-to list is anything the user types; it doesn't have to actually be good (in the sense I've been discussing in the 12-tone rows thread.) > The program calculates the successions based on the logic of your list: If you specify p/0 to p/1 as a legal move, then of course the computer has to have the math to understand that it can also go from p/2 to p/3 wherever they might occur in some list. It does the simple additions and subtractions necessary to keep track of transposition levels ( the number after the /.) > The program prints every possible solution up to chain-length n and number of solutions m, every solution being a loop that begins and ends on p/0. >The program has a switch between two kinds of chains the user can choose: A) No repeats at all: A solution cannot contain the same series twice, other than the p/0 at beginning and end. or B) No repeated combinations-in-sequence: If you've gone from I/2 to I/5, you can go back to I/2 now only if it is immediately followed by some series-label other than I/5. example of a line of output, with or without the silly arrows: p/0 ->r/5 ->p/8 ->ri/4 ->r/10 ->r/6 ->i/4 -> p/10 ->p/6 ->ri/3 -> p/0 >There is a user field called Required Forms (or something) which is just an unlimited list of labels (no commas) the user can fill in. The printed solution is required to contain these forms. Comment: not only does this feature make the program more "musical", but it also makes it more do-able, because each requirement will cut down the search-time. (if that's an issue. I don't know.) A comment from Captain Obvious: >Oh, p.s., I can already see that the user doesn't in fact need to enter the series at all for this to work. Everything is based on the list of possible moves. >The forms are much less mysterious than they seem, they're just like naming something 4 different versions and having simple rules for toggling back and forth between them. Transposition is just cumulative adding and subtracting mod12. Forty-eight versions or states to move between, total. It may help to understand that the program is only dealing with abstract row-label relationships, so for all it knows, the "row" might be 1 note long, or 17 notes long. This means that the logic is simple. There are 12 transpositions by 4 forms, (backwards/forwards, upside-down/right-side up), so 48 possible squares on the checkerboard. The user defines what is a legal move. Maybe this can be grasped in a flash if you have the visual image of a typical 12-tone matrix, also sometimes known more fussily as an inversion matrix. https://unitus.org/FULL/12tone.pdf Sorry to make someone scroll down through all that verbiage! A completed matrix is finally shown towards the end. What we're doing is jumping around among the 48 forms of a 12-tone matrix, and because the user supplies the legal moves, the program doesn't need to understand anything about the actual series you're using, presumably. It may be confusing that when I'm working, I'm thinking of an actual series, but the program doesn't need to know that. Those are two key concepts that may be causing confusion. As user, you choose the rules with a standard form that looks something like this: From P/0: From I/0: From R/0: From RI/0: You fill in each line with as many specific row forms from the possible 48. If I say that from P/0: p/4 (moving from p/0 up 4 steps to p/4) is legal, then all moves with a p/n adding 4 are also legal. But note: Not I/4 to I/8, unless I explicitly say so, by saying: I/0 to I/4. That is, I have to specify each of the 4 basic directions separately, but within each of the 4, the transposition rules are generalizable. Not the most elegant way of representing the rules, but it's at the right level of intuition for me, and it's my dime. It's easier-but-dumber to have 4 separate lists like this. Here is the way the user screen can look. I've added a few features and some details, which I'll discuss. The user types in row forms, such as RI/11, I/0. Spaces, no commas. upper or lower case. Code: ```from P/0: from I/0: from R/0: from RI/0: Required Forms: Minimum and Maximum number of series in chain: Max number of solutions to print: Do It Interrupt Save Parameters Eliminate Duplicate Solutions``` Because I allow for a redundant set of legal moves, the program might print the same solution multiple times. If not, fine. I'd like to stipulate no duplicate solutions. But if it can't be easily helped, then we may need a command to get rid of them. It would be useful to be able to set a range of possible chain-length solutions. That way you don't have to look at either chains that are too short or too long, if you don't want to. It would be nice if you could interrupt the search without losing your input parameters. If this is hard, it's not essential. It would be nice if you could save your user input in a file you can name. I almost forgot. It would be fantastic and it would greatly improve the power and usefulness of the program, if the user can type in some "required targets" -- series-forms that the chain has to contain to be printed. And just a reminder, can't be too clear: A switch, choosing between 2 kinds of possible chains: A) start and end on P/0 but contain no other repeated series-forms. B) start and end on p/0 and contain no repeated sequences of any 2 exact same symbols in order. ust to be clear, the two "nice" items on the above list would be the first two features I'd lose to save programming time. eta: next, or 3rd to not happen would be the "no duplicate solution" rule or filter. I could live with duplicates. we use the steps always mod 12, a cycle. So, if I define p/0 to p/4 (up 4 semitones) as a legal move, it means that there will be a cycle going p/0 to p/4 to p/8 to p/0 that would automatically be available. This is the essence of it, though I have to print the rest of the rules, or have you the reader refer back to previous posts. The output is always a loop, a list of "addresses" or row-labels beginning and ending on p/0, with two kinds of chains, A, and B, defined above. One is no repeated symbols, the other is no repeated sequences. Code: ``` The user specifies as many legal moves from each of P/0, R/0, I/0, and RI/0 starting-points as she wants. Typically from 1 to ca. 15 other addresses. The part of the address /n is called the transposition, or transposition level. The transpositions that the user specifies are written as absolute addresses, but are treated as relative moves. example: From P/0 to: p/3 From R/0 to: From I/0 to: From RI/0 to: comment on example: The user has specified p/3 as a legal move from p/0. This means that all/any moves from a p/n to p/n+3 are legal. example: From P/0 to: p/3 RI/2 From R/0 to: From I/0 to: From RI/0 to: comment on example: In addition to movement 3 to the right, or adding 3, the chain can now go from a p/n to an ri/n+2 example: From P/0 to: p/3 RI/2 From R/0 to: From I/0 to: From RI/0 to: I/6 P/4 comment on example: Now the chain can go from an RI/n to an I/n+6 or a P/n+4, in addition to the other places. The program is forgiving and liberal about upper-case, lower-case, there's no difference.``` The user types in row forms, such as RI/11, I/0. Spaces, no commas. from P/0: from I/0: from R/0: from RI/0: Minimum and Maximum number of series in chain: Only print solutions that contain these forms: (or Required Forms, or something) Max number of solutions to print: Do It Interrupt Save Parameters Eliminate Duplicate Solutions Because I allow for a redundant set of legal moves, the program might print the same solution multiple times. If not, fine. I'd like to stipulate no duplicate solutions. But if it can't be easily helped, then we may need a command to get rid of them. The user can set a range of possible chain-length solutions. That way you don't have to look at either chains that are too short or too long, if you don't want to. It would be nice if you could interrupt the search without losing your input parameters. If this is hard, it's not essential. It would be nice if you could save your user input in a file you can name. The user can type in some "required targets" -- series-forms that the chain has to contain to be printed. (This is essential for a more interesting, powerful program.) Oh, I'm assuming we might need an interrupt because I'm thinking there may be a combinatorial explosion and the program might need hours. That could easily be wrong, I haven't thought it through. If the search/output time is in low seconds, we don't need to interrupt. nd finally, the last very minor (heh) variation or addition. We could have a switch back and forth between two kinds of chains: a) no repeated addresses at all b) no repeated address-combinations: having gone from RI/2 to p/3 before in the same chain, you can reuse RI/2, but only if you go somewhere else this time. If as a result of my refinements, the project now looks more gnarly to write, then I'll add some token insufficient totally inadequate amount to the price tag. That's it. No more changes or wishes from my end. If it matters, I could edit the above into something coherent, but maybe I'll hold off and see if there is any pressing reason to do that. Last edited by calebprime; 8th July 2018 at 06:52 AM. Reason: an edited dump
 8th July 2018, 07:53 AM #36 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Chances are Octavo is just away (as was Hevneren) and I should just be patient. I would like to do this nowish as opposed to weeks from now. The offer will still stand, but it's much more fun while it's fresh.
 9th July 2018, 02:27 AM #37 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 I've heard from Hevneren but not Octavo: Hevneren has the gig.
 9th July 2018, 05:13 AM #38 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Hevneren is my new hero.
 9th July 2018, 05:16 AM #39 Hevneren Thinker   Join Date: Jul 2007 Posts: 181 Originally Posted by calebprime Hevneren is my new hero.
 9th July 2018, 08:17 AM #40 calebprime moleman     Join Date: Jul 2006 Posts: 12,290 Computers are much, much better at this kind of thing than humans. It appears that the Herculean toils of Hevneren are nearly over, may he or she prepare to rest his or her head wreathed in garlands of glory and succumbing to sweet repose on a pillow of well-earned glory and cash, and anointed in oils, if so wished. Ain't civilization great when it works. Enter go-to row-forms from P/0: P/8 r/4 r/5 i/6 ri/10 from I/0: i/4 ri/8 p/6 r/4 from R/0: r/8 p/4 p/5 i/10 i/9 from RI/0: i/4 i/8 i/9 r/6 p/4 p/2 p/3 Required form classes: I RI P R Required forms: I/6 p/6 r/6 ri/6 r/3 Minimum number of series in chain: 13 Maximum number of series in chain: 13 Maximum number of solutions to print: 6000000 Enter a filename to save arguments, or [ENTER] to skip saving: test14 P/0 ->R/5 ->R/1 ->P/6 ->P/2 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->I/2 ->I/6 ->P/0 P/0 ->R/5 ->R/1 ->P/6 ->P/2 ->R/6 ->P/10 ->R/3 ->P/8 ->RI/6 ->I/2 ->I/6 ->P/0 P/0 ->R/5 ->R/1 ->P/6 ->R/10 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->I/2 ->I/6 ->P/0 P/0 ->R/5 ->R/1 ->P/6 ->R/10 ->R/6 ->P/10 ->R/3 ->P/8 ->RI/6 ->I/2 ->I/6 ->P/0 P/0 ->R/5 ->P/10 ->P/6 ->P/2 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->I/2 ->I/6 ->P/0 P/0 ->R/5 ->P/10 ->P/6 ->R/10 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->I/2 ->I/6 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->R/3 ->I/0 ->P/6 ->P/2 ->R/6 ->P/11 ->RI/9 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->R/3 ->I/0 ->P/6 ->P/2 ->R/6 ->I/4 ->R/8 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->R/3 ->I/0 ->P/6 ->P/2 ->R/6 ->I/3 ->R/7 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->R/3 ->I/0 ->P/6 ->R/10 ->R/6 ->P/11 ->RI/9 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->R/3 ->I/0 ->P/6 ->R/10 ->R/6 ->I/4 ->R/8 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->R/3 ->I/0 ->P/6 ->R/10 ->R/6 ->I/3 ->R/7 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->P/6 ->P/2 ->R/6 ->P/11 ->R/3 ->R/11 ->R/7 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->P/6 ->P/2 ->R/6 ->P/11 ->R/3 ->R/11 ->P/4 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->P/6 ->P/2 ->R/6 ->P/11 ->R/3 ->P/8 ->P/4 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->P/6 ->P/2 ->R/6 ->P/11 ->R/3 ->I/1 ->RI/9 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->P/6 ->P/2 ->R/6 ->P/11 ->R/3 ->I/0 ->RI/8 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->P/6 ->R/10 ->R/6 ->P/11 ->R/3 ->R/11 ->R/7 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->P/6 ->R/10 ->R/6 ->P/11 ->R/3 ->R/11 ->P/4 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->P/6 ->R/10 ->R/6 ->P/11 ->R/3 ->P/8 ->P/4 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->P/6 ->R/10 ->R/6 ->P/11 ->R/3 ->I/1 ->RI/9 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->P/10 ->P/6 ->R/10 ->R/6 ->P/11 ->R/3 ->I/0 ->RI/8 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->I/2 ->R/6 ->P/11 ->R/3 ->I/0 ->P/6 ->R/11 ->R/7 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->I/2 ->R/6 ->P/11 ->R/3 ->I/0 ->P/6 ->R/11 ->P/4 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->I/2 ->R/6 ->P/11 ->R/3 ->I/0 ->P/6 ->P/2 ->R/7 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->I/2 ->R/6 ->P/10 ->R/3 ->I/0 ->P/6 ->R/11 ->R/7 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->I/2 ->R/6 ->P/10 ->R/3 ->I/0 ->P/6 ->R/11 ->P/4 ->P/0 P/0 ->I/6 ->I/10 ->RI/6 ->I/2 ->R/6 ->P/10 ->R/3 ->I/0 ->P/6 ->P/2 ->R/7 ->P/0 P/0 ->I/6 ->R/10 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->P/10 ->P/6 ->R/11 ->R/7 ->P/0 P/0 ->I/6 ->R/10 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->P/10 ->P/6 ->R/11 ->P/4 ->P/0 P/0 ->I/6 ->R/10 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->P/10 ->P/6 ->I/0 ->RI/8 ->P/0 P/0 ->I/6 ->R/10 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->P/10 ->P/6 ->P/2 ->R/7 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->P/2 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->R/0 ->R/8 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->P/2 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->R/0 ->P/4 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->P/2 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->P/10 ->RI/8 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->P/2 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->I/10 ->P/4 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->P/2 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->I/2 ->RI/10 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->P/2 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->I/3 ->R/7 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->P/2 ->R/6 ->P/10 ->R/3 ->P/8 ->RI/6 ->R/0 ->R/8 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->P/2 ->R/6 ->P/10 ->R/3 ->P/8 ->RI/6 ->R/0 ->P/4 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->P/2 ->R/6 ->P/10 ->R/3 ->P/8 ->RI/6 ->I/10 ->P/4 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->P/2 ->R/6 ->P/10 ->R/3 ->P/8 ->RI/6 ->I/2 ->RI/10 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->P/2 ->R/6 ->P/10 ->R/3 ->P/8 ->RI/6 ->I/3 ->R/7 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->R/10 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->R/0 ->R/8 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->R/10 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->R/0 ->P/4 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->R/10 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->P/10 ->RI/8 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->R/10 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->I/10 ->P/4 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->R/10 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->I/2 ->RI/10 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->R/10 ->R/6 ->P/11 ->R/3 ->P/8 ->RI/6 ->I/3 ->R/7 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->R/10 ->R/6 ->P/10 ->R/3 ->P/8 ->RI/6 ->R/0 ->R/8 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->R/10 ->R/6 ->P/10 ->R/3 ->P/8 ->RI/6 ->R/0 ->P/4 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->R/10 ->R/6 ->P/10 ->R/3 ->P/8 ->RI/6 ->I/10 ->P/4 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->R/10 ->R/6 ->P/10 ->R/3 ->P/8 ->RI/6 ->I/2 ->RI/10 ->P/0 P/0 ->I/6 ->RI/2 ->P/6 ->R/10 ->R/6 ->P/10 ->R/3 ->P/8 ->RI/6 ->I/3 ->R/7 ->P/0 P/0 ->P/8 ->RI/6 ->P/10 ->R/3 ->I/0 ->P/6 ->P/2 ->R/6 ->P/11 ->RI/9 ->I/6 ->P/0 P/0 ->P/8 ->RI/6 ->P/10 ->R/3 ->I/0 ->P/6 ->P/2 ->R/6 ->I/4 ->R/8 ->I/6 ->P/0 P/0 ->P/8 ->RI/6 ->P/10 ->R/3 ->I/0 ->P/6 ->R/10 ->R/6 ->P/11 ->RI/9 ->I/6 ->P/0 P/0 ->P/8 ->RI/6 ->P/10 ->R/3 ->I/0 ->P/6 ->R/10 ->R/6 ->I/4 ->R/8 ->I/6 ->P/0 P/0 ->P/8 ->RI/6 ->P/10 ->P/6 ->P/2 ->R/6 ->P/11 ->R/3 ->I/1 ->RI/9 ->I/6 ->P/0 P/0 ->P/8 ->RI/6 ->P/10 ->P/6 ->R/10 ->R/6 ->P/11 ->R/3 ->I/1 ->RI/9 ->I/6 ->P/0 calebs-iMac:desktop Last edited by calebprime; 9th July 2018 at 08:18 AM.

International Skeptics Forum