FretBoard Pro Amazing Logic

Discussion forum for all Windows batch related topics.

Moderator: DosItHelp

Post Reply
Message
Author
Wguitarimprov
Posts: 2
Joined: 09 Aug 2013 15:07

FretBoard Pro Amazing Logic

#1 Post by Wguitarimprov » 11 Aug 2013 12:49

I made fret board pro from scratch
it generates any scale in any key
Its also still in Beta though
the major scales looks like

Code: Select all

:Major
Set /a D2=(%D1%+%W%)
Set /a D3=(%D2%+%w%)
Set /a D4=(%D3%+%H%)
Set /a D5=(%D4%+%W%)
Set /a D6=(%D5%+%W%)
Set /a D7=(%D6%+%W%)
set /a D8=(%D7%+%N%)
set /a D9=(%D8%+%N%)
echo W W H W W W
set About=""
goto Scaleset

you give it a first note then it calculates the rest by converting notes to numbers and adding them
it also displayes them on a virtual fretboard

this is how it converts the numbers back to letter to be displayed

Code: Select all

:Scaleset
cls
if %D1% == 0 set E=E
if %D1% == 1 set F=F
if %D1% == 2 set Gb=Gb
if %D1% == 3 set G=G
if %D1% == 4 set Ab=Ab
if %D1% == 5 set A=A
if %D1% == 6 set Bb=Bb
if %D1% == 7 set B=B
if %D1% == 8 set C=C
if %D1% == 9 set Db=Db
if %D1% == 10 set D=D
if %D1% == 11 set Eb=Eb
if %D1% == 12 set E=E
if %D1% == 13 set F=F
if %D1% == 14 set Gb=Gb
if %D1% == 15 set G=G
if %D1% == 16 set Ab=Ab
if %D1% == 17 set A=A
if %D1% == 18 set Bb=Bb
if %D1% == 19 set B=B
if %D1% == 20 set C=C
if %D1% == 21 set Db=Db
if %D1% == 22 set D=D
if %D1% == 23 set Eb=Eb

if %D2% == 1 set F=F
if %D2% == 2 set Gb=Gb
if %D2% == 3 set G=G
if %D2% == 4 set Ab=Ab
if %D2% == 5 set A=A
if %D2% == 6 set Bb=Bb
if %D2% == 7 set B=B
if %D2% == 8 set C=C
if %D2% == 9 set Db=Db
if %D2% == 10 set D=D
if %D2% == 11 set Eb=Eb
if %D2% == 12 set E=E
if %D2% == 13 set F=F
if %D2% == 14 set Gb=Gb
if %D2% == 15 set G=G
if %D2% == 16 set Ab=Ab
if %D2% == 17 set A=A
if %D2% == 18 set Bb=Bb
if %D2% == 19 set B=B
if %D2% == 20 set C=C
if %D2% == 21 set Db=Db
if %D2% == 22 set D=D
if %D2% == 23 set Eb=Eb

if %D3% == 1 set F=F
if %D3% == 2 set Gb=Gb
if %D3% == 3 set G=G
if %D3% == 4 set Ab=Ab
if %D3% == 5 set A=A
if %D3% == 6 set Bb=Bb
if %D3% == 7 set B=B
if %D3% == 8 set C=C
if %D3% == 9 set Db=Db
if %D3% == 10 set D=D
if %D3% == 11 set Eb=Eb
if %D3% == 12 set E=E
if %D3% == 13 set F=F
if %D3% == 14 set Gb=Gb
if %D3% == 15 set G=G
if %D3% == 16 set Ab=Ab
if %D3% == 17 set A=A
if %D3% == 18 set Bb=Bb
if %D3% == 19 set B=B
if %D3% == 20 set C=C
if %D3% == 21 set Db=Db
if %D3% == 22 set D=D
if %D3% == 23 set Eb=Eb

if %D4% == 1 set F=F
if %D4% == 2 set Gb=Gb
if %D4% == 3 set G=G
if %D4% == 4 set Ab=Ab
if %D4% == 5 set A=A
if %D4% == 6 set Bb=Bb
if %D4% == 7 set B=B
if %D4% == 8 set C=C
if %D4% == 9 set Db=Db
if %D4% == 10 set D=D
if %D4% == 11 set Eb=Eb
if %D4% == 12 set E=E
if %D4% == 13 set F=F
if %D4% == 14 set Gb=Gb
if %D4% == 15 set G=G
if %D4% == 16 set Ab=Ab
if %D4% == 17 set A=A
if %D4% == 18 set Bb=Bb
if %D4% == 19 set B=B
if %D4% == 20 set C=C
if %D4% == 21 set Db=Db
if %D4% == 22 set D=D
if %D4% == 23 set Eb=Eb

if %D5% == 1 set F=F
if %D5% == 2 set Gb=Gb
if %D5% == 3 set G=G
if %D5% == 4 set Ab=Ab
if %D5% == 5 set A=A
if %D5% == 6 set Bb=Bb
if %D5% == 7 set B=B
if %D5% == 8 set C=C
if %D5% == 9 set Db=Db
if %D5% == 10 set D=D
if %D5% == 11 set Eb=Eb
if %D5% == 12 set E=E
if %D5% == 13 set F=F
if %D5% == 14 set Gb=Gb
if %D5% == 15 set G=G
if %D5% == 16 set Ab=Ab
if %D5% == 17 set A=A
if %D5% == 18 set Bb=Bb
if %D5% == 19 set B=B
if %D5% == 20 set C=C
if %D5% == 21 set Db=Db
if %D5% == 22 set D=D
if %D5% == 23 set Eb=Eb

if %D6% == 1 set F=F
if %D6% == 2 set Gb=Gb
if %D6% == 3 set G=G
if %D6% == 4 set Ab=Ab
if %D6% == 5 set A=A
if %D6% == 6 set Bb=Bb
if %D6% == 7 set B=B
if %D6% == 8 set C=C
if %D6% == 9 set Db=Db
if %D6% == 10 set D=D
if %D6% == 11 set Eb=Eb
if %D6% == 12 set E=E
if %D6% == 13 set F=F
if %D6% == 14 set Gb=Gb
if %D6% == 15 set G=G
if %D6% == 16 set Ab=Ab
if %D6% == 17 set A=A
if %D6% == 18 set Bb=Bb
if %D6% == 19 set B=B
if %D6% == 20 set C=C
if %D6% == 21 set Db=Db
if %D6% == 22 set D=D
if %D6% == 23 set Eb=Eb

if %D7% == 1 set F=f
if %D7% == 2 set Gb=Gb
if %D7% == 3 set G=G
if %D7% == 4 set Ab=Ab
if %D7% == 5 set A=A
if %D7% == 6 set Bb=Bb
if %D7% == 7 set B=B
if %D7% == 8 set C=C
if %D7% == 9 set Db=Db
if %D7% == 10 set D=D
if %D7% == 11 set Eb=Eb
if %D7% == 12 set E=E
if %D7% == 13 set F=F
if %D7% == 14 set Gb=Gb
if %D7% == 15 set G=G
if %D7% == 16 set Ab=Ab
if %D7% == 17 set A=A
if %D7% == 18 set Bb=Bb
if %D7% == 19 set B=B
if %D7% == 20 set C=C
if %D7% == 21 set Db=Db
if %D7% == 22 set D=D
if %D7% == 23 set Eb=Eb

if %D8% == 1 set F=f
if %D8% == 2 set Gb=Gb
if %D8% == 3 set G=G
if %D8% == 4 set Ab=Ab
if %D8% == 5 set A=A
if %D8% == 6 set Bb=Bb
if %D8% == 7 set B=B
if %D8% == 8 set C=C
if %D8% == 9 set Db=Db
if %D8% == 10 set D=D
if %D8% == 11 set Eb=Eb
if %D8% == 12 set E=E
if %D8% == 13 set F=F
if %D8% == 14 set Gb=Gb
if %D8% == 15 set G=G
if %D8% == 16 set Ab=Ab
if %D8% == 17 set A=A
if %D8% == 18 set Bb=Bb
if %D8% == 19 set B=B
if %D8% == 20 set C=C
if %D8% == 21 set Db=Db
if %D8% == 22 set D=D
if %D8% == 23 set Eb=Eb

if %D9% == 1 set F=f
if %D9% == 2 set Gb=Gb
if %D9% == 3 set G=G
if %D9% == 4 set Ab=Ab
if %D9% == 5 set A=A
if %D9% == 6 set Bb=Bb
if %D9% == 7 set B=B
if %D9% == 8 set C=C
if %D9% == 9 set Db=Db
if %D9% == 10 set D=D
if %D9% == 11 set Eb=Eb
if %D9% == 12 set E=E
if %D9% == 13 set F=F
if %D9% == 14 set Gb=Gb
if %D9% == 15 set G=G
if %D9% == 16 set Ab=Ab
if %D9% == 17 set A=A
if %D9% == 18 set Bb=Bb
if %D9% == 19 set B=B
if %D9% == 20 set C=C
if %D9% == 21 set Db=Db
if %D9% == 22 set D=D
if %D9% == 23 set Eb=Eb
goto Display


Then after that it displayes them with this

Code: Select all

:display
if %E% == E set EO=E
if %B% == B set BO=B
if %G% == G set GO=G
if %D% == D set DO=D
if %A% == A set AO=A
cls
echo  %About%
echo.
echo  %EO% I-%F%-- -%Gb%- -%G%-- -%Ab%- -%A%-- -%Bb%- -%B%-- -%C%-- -%Db%- -%D%-- -%Eb%- -%E%-- I
echo  %BO% I-%C%-- -%Db%- -%D%-- -%Eb%- -%E%-- -%F%-- -%Gb%- -%G%-- -%Ab%- -%A%-- -%Bb%- -%B%-- I
echo  %GO% I-%Ab%- -%A%-- -%Bb%- -%B%-- -%C%-- -%Db%- -%D%-- -%Eb%- -%E%-- -%F%-- -%Gb%- -%G%-- I
echo  %DO% I-%Eb%- -%E%-- -%F%-- -%Gb%- -%G%-- -%Ab%- -%A%-- -%Bb%- -%B%-- -%C%-- -%Db%- -%D%-- I
echo  %AO% I-%Bb%- -%B%-- -%C%-- -%Db%- -%D%-- -%Eb%- -%E%-- -%F%-- -%Gb%- -%G%-- -%Ab%- -%A%-- I
echo  %EO% I-%F%-- -%Gb%- -%G%-- -%Ab%- -%A%-- -%Bb%- -%B%-- -%C%-- -%Db%- -%D%-- -%Eb%- -%E%-- I
echo      1    2    3    4    5    6    7    8    9   10    11   12
Pause

thoughs are just the main chunks of code theres way more smaller importand thing to it
if you want it you can download the beta version here [MOD EDIT: Link to executable removed]

I would paost the code but I want to keep it secret :) enjoy

Aacini
Expert
Posts: 1932
Joined: 06 Dec 2011 22:15
Location: México City, México
Contact:

Re: FretBoard Pro Amazing Logic

#2 Post by Aacini » 11 Aug 2013 22:12

Hi. Welcome to DosTips! May I suggest some improvements to your code?

Instead of

Code: Select all

Set /a D2=(%D1%+%W%)
Set /a D3=(%D2%+%w%)
Set /a D4=(%D3%+%H%)
Set /a D5=(%D4%+%W%)
Set /a D6=(%D5%+%W%)
Set /a D7=(%D6%+%W%)
set /a D8=(%D7%+%N%)
set /a D9=(%D8%+%N%)
you may use

Code: Select all

Set /a D2=D1+W, D3=D2+W, D4=D3+H, D5=D4+W, D6=D5+W, D7=D6+W, D8=D7+N, D9=D8+N


Instead of the 9 groups similar to this one:

Code: Select all

if %D1% == 0 set E=E
if %D1% == 1 set F=F
if %D1% == 2 set Gb=Gb
if %D1% == 3 set G=G
if %D1% == 4 set Ab=Ab
if %D1% == 5 set A=A
if %D1% == 6 set Bb=Bb
if %D1% == 7 set B=B
if %D1% == 8 set C=C
if %D1% == 9 set Db=Db
if %D1% == 10 set D=D
if %D1% == 11 set Eb=Eb
if %D1% == 12 set E=E
if %D1% == 13 set F=F
if %D1% == 14 set Gb=Gb
if %D1% == 15 set G=G
if %D1% == 16 set Ab=Ab
if %D1% == 17 set A=A
if %D1% == 18 set Bb=Bb
if %D1% == 19 set B=B
if %D1% == 20 set C=C
if %D1% == 21 set Db=Db
if %D1% == 22 set D=D
if %D1% == 23 set Eb=Eb
you may first prepare an array of assignments this way:

Code: Select all

setlocal EnableDelayedExpansion

set i=0
for %%a in (E F Gb G Ab A Bb B C Db D Eb E F Gb G Ab A Bb B C Db D Eb) do (
   set setNote[!i!]=%%a=%%a
   set /A i+=1
)
and when you want to execute the 9 groups of assignments, do this:

Code: Select all

for /L %%i in (1,1,9) do (
   for /F %%d in ("!D%%i!") do set !setNote[%%d]!
)


Antonio

jeb
Expert
Posts: 1062
Joined: 30 Aug 2007 08:05
Location: Germany, Bochum

Re: FretBoard Pro Amazing Logic

#3 Post by jeb » 12 Aug 2013 04:22

Wguitarimprov wrote:I made fret board pro from scratch
it generates any scale in any key
:?:
Nice, but I don't understand what it is?
What it should do, what it's good for?

jeb

penpen
Expert
Posts: 2009
Joined: 23 Jun 2013 06:15
Location: Germany

Re: FretBoard Pro Amazing Logic

#4 Post by penpen » 12 Aug 2013 05:11

I have a suggestion to improve the graphical output,
but this is only an improvement in my eyes, you may see it different :P .
Just try out the chars.bat (saved using notepad.exe):

Code: Select all

@echo off
chcp 850 > nul
rem ÃÄÅ´

echo ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´
echo ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´
echo ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´
echo ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´
echo ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´
echo ÃÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄÅÄÄÄÄ´

The output should be:

Code: Select all

Z:\>chars
├────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┤
├────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┤
├────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┤
├────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┤
├────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┤
├────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┤

In the DOS Shell all these characters should be connected.

penpen

aGerman
Expert
Posts: 4743
Joined: 22 Jan 2010 18:01
Location: Germany

Re: FretBoard Pro Amazing Logic

#5 Post by aGerman » 12 Aug 2013 10:29

[OT]
@jeb
The German translation of fret board is "Gitarrenhals". Basically the script shows the position of the tones/notes on the strings (Saiten).
[/OT]

Aacini
Expert
Posts: 1932
Joined: 06 Dec 2011 22:15
Location: México City, México
Contact:

Re: FretBoard Pro Amazing Logic

#6 Post by Aacini » 13 Aug 2013 03:57

Although I don't understand the purpose of this program I like the logic involved, so I wrote a preliminary version of a solution that perform the calculations shown in the first post of this topic.

Code: Select all

@echo off
setlocal EnableDelayedExpansion

rem FretBoard Notes - Antonio Perez Ayala

rem Define working variables
set baseNotes=E F Gb G Ab A Bb B C Db D Eb
set i=0
for %%a in (%baseNotes% %baseNotes%) do (
   set Note[!i!]=%%a
   set /A i+=1
)

rem Create the output format for each guitar's string:

rem - Initial and final notes
set i=0
for %%n in (E B G D A E) do (
   set /A i+=1
   set Note0[!i!]=%%n
)

rem - Starting note position for each string
set i=0
for %%p in (1 8 4 11 6 1) do (
   set /A i+=1
   set startNote[!i!]=%%p
)

rem - Notes in each string
for /L %%s in (1,1,6) do (
   set i=!startNote[%%s]!
   set "string=%%!Note0[%%s]!0%% I "
   for /L %%x in (1,1,12) do for /F %%i in ("!i!") do (
      set "aux=!Note[%%i]:~1!"
      if defined aux (
         set "aux="
      ) else (
         set "aux= "
      )
      set "string=!string!-%%!Note[%%i]!%%!aux!- "
      set /A i+=1
   )
   set "string[%%s]=!string!I"
)

rem Initialize values???
for /L %%i in (1,1,9) do set D%%i=0
set /A N=1, H=1, W=1
set /A D1=1

rem Pass to next position???
:nextPosition

   rem Clear output notes
   for %%n in (%baseNotes%) do (
      set "aux=%%n"
      set "aux=!aux:~1!"
      if defined aux (
         set "aux=  "
      ) else (
         set "aux= "
      )
      set %%n=!aux!
   )

   rem Advance note values to next position???
   set /A D2=D1+W, D3=D2+W, D4=D3+H, D5=D4+W, D6=D5+W, D7=D6+W, D8=D7+N, D9=D8+N
   for /L %%i in (1,1,9) do (
      for /F %%d in ("!D%%i!") do set "!Note[%%d]!=!Note[%%d]!"
   )

   rem Display next position
   cls
   for %%n in (E B G D A) do (
      if "!%%n!" equ "%%n" (
         set %%n0=%%n
      ) else (
         set "%%n0= "
      )
   )
   for /L %%s in (1,1,6) do call echo !string[%%s]!
   echo      1    2    3    4    5    6    7    8    9   10    11  12
   pause

   set /A someValue+=N
rem if !someValue! lss someLimit goto nextPosition

This is the output:

Code: Select all

  I -F - -Gb- -G - -Ab- -A - -Bb- -B - -C - -Db- -  - -  - -  - I
B I -C - -Db- -  - -  - -  - -F - -Gb- -G - -Ab- -A - -Bb- -B - I
G I -Ab- -A - -Bb- -B - -C - -Db- -  - -  - -  - -F - -Gb- -G - I
  I -  - -  - -F - -Gb- -G - -Ab- -A - -Bb- -B - -C - -Db- -  - I
A I -Bb- -B - -C - -Db- -  - -  - -  - -F - -Gb- -G - -Ab- -A - I
  I -F - -Gb- -G - -Ab- -A - -Bb- -B - -C - -Db- -  - -  - -  - I
     1    2    3    4    5    6    7    8    9   10    11  12

Obviously, my program needs the right values in order to generate useful results. Perhaps someone may complete this program with the missing parts... :wink:

Antonio

Post Reply