[c++]tips bij maken toonschalen generator

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

Ik wil een toonschalen generator maken maar ik zit met een aantal vragen misschien dat jullie mij in de juiste richten kunnen duwen.

eerste even een aantal gegevens:

posities van de toonschaal wordt zo gedefinieert: 1, 2, 3, 4, 5, 6, 7
Om een verhoging en een verlaging aan te geven: b en #: 2, 2b, 2#
uitkomst moet ergens opgeslagen in worden om andere bewerkingen te doen.
*lees: toonschaal wordt opgeslagen in een bestand om te kunnen vergelijken tegen dubbele toonschalen

Vragen:
Ik zat denken aan een array om de nieuw gegenereerde toon op te slaan. Maar aangezien de waarde een int en een char is: is dat wel de beste manier. Kortom hoe een waarde opslaan wat een int en een char is?

En hoe kan ik met random die b en die verhoging laten verwisselen?

Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 06-09 16:59

CoolGamer

What is it? Dragons?

Volgens mij kan je het beste per toon een struct (of een class) maken met daarin de noot en of hij verhoogd/verlaagd is.

Dus iets als:
C++:
1
2
3
4
struct Note {
  int note;
  char sign;
}

,maar beter:
C++:
1
2
3
4
5
6
7
8
9
struct Note {
  enum Teken {
    Normal,
    Sharp,
    B
  }
  int note;
  Note sign;
};


Dat van dat willekeurige teken kan je denk redelijk op Google vinden. Neem een willekeurig getal (dmv rand()) en zorg ervoor dat die tussen de 0 en de 2 komt. Dan met een if..else kan je dan de waarde instellen.

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Kun je niet je range anders gaan onderverdelen:
code:
1
2
1#, 1, 1b, 2#, 2, 2b, ...
0   1   2  3   4   5


Rekent bovendien lekker gemakkelijk.

ASSUME makes an ASS out of U and ME


Acties:
  • 0 Henk 'm!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Chromatische schaal lijkt mij ook handiger. Bovendien mis ik ook nog het octaaf waar je in zit. Ik weet ook niet wat je wil bereiken, maar de 1-7 zoals je die voorstelt komt eigenlijk slechts toevallig overeen met de witte toetsen op een piano in C-groot. Maar voor elk andere majeur zal er altijd een of meerdere 1-7 met bes of fis in de toonladder voorkomen. Bij een chromatische ladder, zoals h!ghguy voorstelt, kan je hier wel mee rekenen aangezien in een majeur toonladder altijd dezelfde intervallen zitten, ongeacht waar je begint. Evenzo voor een mineur toonladder.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

H!GHGuY schreef op zaterdag 04 juli 2009 @ 09:25:
Kun je niet je range anders gaan onderverdelen:
code:
1
2
1#, 1, 1b, 2#, 2, 2b, ...
0   1   2  3   4   5


Rekent bovendien lekker gemakkelijk.
Inderdaad. Het is niet voor niets dat dit in de General MIDI standaard zo is aangepakt. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sorry voor de late reactie:

Reden waarom ik maar posities wil hebben (wat uitgebreid kan worden zoals dit: 1b, 1, 2, 3b , 4, 5b, 6, 7b, 7)
Is omdat muziektheoretisch dan klopt. En je hebt maar 1 octaaf nodig over het algemeen om een toonschaal te kunnen maken. En de grondtoon komt dan weer terug in de 8ste positie.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Daar heb je alleen baat bij als een mens het gaat uitlezen, wat eigenlijk niet voor zou mogen komen. Interne representatie is niet gelijk aan weergave. Als je iets weer moet geven en je moet 1 2 3 4 5 6 7 8 9 10 11 12 13 omzetten naar 1 1# 2 2# 3 4 4# 5 5# 6 6# 7 8 of zelfs naar c c# d d# e f f# g g# a a# b C, dan is dat natuurlijk vrij makkelijk te realiseren met een simpele functie. Dat weerlet je er echter niet van om intern gewoon met normale integers te rekenen. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Sefyu
  • Registratie: November 2006
  • Niet online
Uiteraard geen C++, maar misschien kan je wat te weten komen uit de broncode van deze site:

http://www.hearandplay.com/pianochords.html

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sefyu schreef op maandag 06 juli 2009 @ 01:18:
Uiteraard geen C++, maar misschien kan je wat te weten komen uit de broncode van deze site:

http://www.hearandplay.com/pianochords.html
Niet echt jammer genoeg...
NMe schreef op maandag 06 juli 2009 @ 01:16:
Daar heb je alleen baat bij als een mens het gaat uitlezen, wat eigenlijk niet voor zou mogen komen. Interne representatie is niet gelijk aan weergave. Als je iets weer moet geven en je moet 1 2 3 4 5 6 7 8 9 10 11 12 13 omzetten naar 1 1# 2 2# 3 4 4# 5 5# 6 6# 7 8 of zelfs naar c c# d d# e f f# g g# a a# b C, dan is dat natuurlijk vrij makkelijk te realiseren met een simpele functie. Dat weerlet je er echter niet van om intern gewoon met normale integers te rekenen. ;)
Dus je zegt dat ik het veel te moelijk maak dan dat het is?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ja. Presentatie en opslag zijn twee hele verschillende dingen. Een int sla je ook niet als string op.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ja. :)

Je moet in de eerste plaats makkelijk kunnen werken en rekenen met dergelijke waarden, hoe je het weergeeft zou daar geen effect op mogen hebben.

Bovendien ontloop je in dit geval ook het probleem dat twee "waarden" dezelfde noot vertegenwoordigen. In jou idee zou 1# en 2b dezelfde noot zijn, in een integer-opzet zou die noot alleen vertegenwoordigd worden door het getal 2, wat je vergelijkingen bespaart. ;)

[ Voor 46% gewijzigd door NMe op 06-07-2009 16:02 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

jups, als je 1 1#/2b 2 2#/3b 3 enz gebruikt heb je een schaal die nergens op slaat. Sla het oftewel human readable op, maar dat is alleen zinnig als het ook human readable moet zijn, gebruik anders gewoon alle tonen genummerd, dus met 12 tonen in een octaaf.
Voor het omzetten naar een voor mensen leesbare vorm kan je gewoon een array gebruiken:
code:
1
char* noot[] = {"A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#"};

let wel, een mol is nooit nodig: voor noot Xb kan ook (X-1)# geschreven worden.
code:
1
2
3
4
5
int schaal; // Je input waarde
printf("Toonschaal voor %s: %s %s %s %s %s %s %s %s\n",
  noot[schaal%12],
  noot[ schaal   %12], noot[(schaal+2)%12], noot[(schaal+ 4)%12], noot[(schaal+5)%12],
  noot[(schaal+7)%12], noot[(schaal+9)%12], noot[(schaal+11)%12], noot[ schaal   %12]);

[ Voor 23% gewijzigd door Verwijderd op 06-07-2009 16:14 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Reden waarom ik de format zo wil hebben is omdat bij tonenschalen niet uitmaakt met welke toon je begint als maar de stappen hetzelfde is. ik wil geen lijsten gaan produceren met hard defineerde tonen.
Voor mij hoeft het niet "Human readable" zijn. Het gaat ook om de theorie erachter en dan maakt het unreadable, readable.

Voorbeeld:
code:
1
2
3
4
5
# C majeur:
1 2 3 4 5 6 7

#A majeur alleen grondtoon op A:
1 2 3 4 5 6 7

Als je weet hoe een C majeur ladder in elkaar steekt dan is het niet zo moeilijk.

[ Voor 9% gewijzigd door Verwijderd op 06-07-2009 16:18 . Reden: typo's ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op maandag 06 juli 2009 @ 16:02:
jups, als je 1 1#/2b 2 2#/3b 3 enz gebruikt heb je een schaal die nergens op slaat. Sla het oftewel human readable op, maar dat is alleen zinnig als het ook human readable moet zijn, gebruik anders gewoon alle tonen genummerd, dus met 12 tonen in een octaaf.
Ook als het human readable moet zijn sla je het nóg op zo'n manier op dat je er zelf makkelijk mee kan rekenen. ;)
Voor het omzetten naar een voor mensen leesbare vorm kan je gewoon een array gebruiken:
code:
1
char* noot[] = {"A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#"};

let wel, een mol is nooit nodig: voor noot Xb kan ook (X-1)# geschreven worden.
Als voorbeeldje:
C++:
1
2
3
4
5
char* noot[] = {"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"};
int vaderJacob[] = {0, 2, 4, 0, 0, 2, 4, 0};

for (i = 0; i < 8; i++)
  cout << noot[vaderJacob[i] % 12] << " ";

Die zou af moeten drukken:
C D E C C D E C

Overigens is het transponeren daar ook vrij simpel. Als je wil transponeren van C naar A dan tel je standaard bij elke noot 9 op. ;)

[ Voor 6% gewijzigd door NMe op 06-07-2009 16:20 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Niet opnieuw MIDI uitvinden hoor, jongens. ;)

http://nl.wikipedia.org/wiki/MIDI

[ Voor 0% gewijzigd door Verwijderd op 06-07-2009 20:22 . Reden: typpo ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil helemaal geen MIDI format bestanden of uitput of opnieuw uitvinden.

Wil alleen maar alle combinaties maken die er met tonen en deze opvangen in een file.
Of het nu human readable is of niet.

[/frusti mod]

Ik ga morgen ff stoeien met die 13 tonen oplossing. Kijken hoever ik daarmee mee kom.
Bedankt in iedergeval voor de input

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ja, want dat was inderdaad nog niet geroepen in dit topic. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

NMe schreef op maandag 06 juli 2009 @ 23:36:
[...]

Ja, want dat was inderdaad nog niet geroepen in dit topic. ;)
/me faalt weer jammerlijk

Damn. Ik moet toch echt wat beter leren lezen. 8)7

Acties:
  • 0 Henk 'm!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Ik begrijp nu wat Typnix bedoelt.. het is dus niet de bedoeling dat 1-7 overeenkomt met A-G, maar met de 7 tonen in een bepaalde toonladder. Om een absolute toon te krijgen moet je dus alsnog dit altijd gaan vertalen afhankelijk van de gebruikte toonladder. Maar daar ben je ook niet in geinteresseerd zoals ik het begrijp, dus dat is geen probleem. Maar wat als je het wil vergelijken? Een 'cijferreeks' (=tonenreeks) in C-Majeur als bijvoorbeeld 133571 hebben dezelfde toonafstanden als een vergelijkbare reeks in A-Majeur. Maar deze reeks zal in C-mineur verschillende toonafstanden hebben, omdat tussen de 2 en de 3 een halve toonafstand zit in de mineur, en een hele toonafstand bij de majeur. Dus wordt dit moeilijk vergelijken!

Je zou een schaal van 1-12 kunnen gebruiken om een toon op te slaan (beslaat alle tonen in een octaaf), maar hiermee verlies je weer informatie over de gebruikte toonladder en wordt vergelijken niet zomaar mogelijk.

De suggestie hierboven dat F# gelijk staat aan Gb is wellicht in absolute zin waar, maar in de muziek is dit niet het geval, afhankelijk van de gebruikte toonladder zal eerder voor het een of voor het ander gekozen worden om hiermee de 'richting' van de klank aan te geven (de gemoedsstemming van de muziek om zo te zeggen).

Eigenlijk ben ik wel benieuwd wat voor analyses je wilt uitvoeren, want daar zal je representatie op moeten aansluiten.

Technisch gezien zou je bv de 1-7 kunnen opslaan in tientallen en de fis bes als +1 en +2 (dus dan krijg je bv 30,31,40,72). Eenvoudig random te genereren en gemakkelijk om te zetten naar een formaat dat jij wil.

[ Voor 7% gewijzigd door Orphix op 07-07-2009 01:44 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Orphix schreef op dinsdag 07 juli 2009 @ 01:41:
Ik begrijp nu wat Typnix bedoelt.. het is dus niet de bedoeling dat 1-7 overeenkomt met A-G, maar met de 7 tonen in een bepaalde toonladder. Om een absolute toon te krijgen moet je dus alsnog dit altijd gaan vertalen afhankelijk van de gebruikte toonladder. Maar daar ben je ook niet in geinteresseerd zoals ik het begrijp, dus dat is geen probleem. Maar wat als je het wil vergelijken? Een 'cijferreeks' (=tonenreeks) in C-Majeur als bijvoorbeeld 133571 hebben dezelfde toonafstanden als een vergelijkbare reeks in A-Majeur. Maar deze reeks zal in C-mineur verschillende toonafstanden hebben, omdat tussen de 2 en de 3 een halve toonafstand zit in de mineur, en een hele toonafstand bij de majeur. Dus wordt dit moeilijk vergelijken!
Nee dat is het niet. Logisch gezien is het niet mogelijk om een toonladder op te bouwen waar twee posities naar dezelfde toon refereren.

voorbeeld:
code:
1
2
3
4
5
6
1 2 3#, 4b 5 6 7 # foute voorbeeld. Reden 3# en 4b referen naar zelfde toon. Oplossing een van de 2 tonen weghalen waardoor je een andere soort toonlader krijgt. maar als goed is hoeft dat niet omdat de ladder al bestaat in een eerdere genereer sequence en dus wordt de toonlader erbuiten gelaten.

of
1b, 1 2 3 4 56 7#  #nog een fout voorbeeld Zelfde reden als hierboven maar dan met 1b en 7#
en 
1 2 3 4 5 6 7#  #nog een fout voorbeeld Dit omdat de 7# eigenlijk eindigt op de grondtoon(wat 1 is)

Ik wil alleen maar een lijst generen met alle toonladders die er maken kunnen zijn. Dat ze niet "human readable" zijn heeft te maken met gebrek aan kennis hoe je de ladders moet vertalen. De vertaalslag moet je zelf maken.
Je zou een schaal van 1-12 kunnen gebruiken om een toon op te slaan (beslaat alle tonen in een octaaf), maar hiermee verlies je weer informatie over de gebruikte toonladder en wordt vergelijken niet zomaar mogelijk.
Dat met die twaalf tonen is niet echt noodzakelijk als er een manier zou zijn om te zeggen van:
je hebt een toonschaal waarvan de oorsprong op C majeur ligt.
per positie zijn er 3 mogelijkheden.
Op zeven schaalposities zijn dat er bij elkaar: 21.
Visueel gezien:
code:
1
2
3
   1# 2# 3# 4# 5# 6# 7#
  1  2  3  4  5  6  7
1b 2b 3b 4b 5b 6b 7b

Dan ga je bepaalde combinaties uitsluiten zoals eerder gegeven:2#, 3b, 3# en 4b(die overigens in een later stadium eruit gehaald worden, want wordt opgeslagen in een temp txt file voordat het in een definitief bestand komt) Killed wel wat performance, maar dat is absoluut mijn dilemma niet.
De suggestie hierboven dat F# gelijk staat aan Gb is wellicht in absolute zin waar, maar in de muziek is dit niet het geval, afhankelijk van de gebruikte toonladder zal eerder voor het een of voor het ander gekozen worden om hiermee de 'richting' van de klank aan te geven (de gemoedsstemming van de muziek om zo te zeggen).
Je hebt gedeeltelijk gelijk. Bij het maken van een toonschaal is het muziektheoretisch niet mogelijk om twee schaalposities te hebben die refereren naar dezelfde toon in dezelfde ladder. Dus als er een combinatie is van 3# en 4b: moet de 4# weggehaalt worden omdat de toon al bezet is.
Eigenlijk ben ik wel benieuwd wat voor analyses je wilt uitvoeren, want daar zal je representatie op moeten aansluiten.
Technisch gezien zou je bv de 1-7 kunnen opslaan in tientallen en de fis bes als +1 en +2 (dus dan krijg je bv 30,31,40,72). Eenvoudig random te genereren en gemakkelijk om te zetten naar een formaat dat jij wil.
Daar ben ik dus ook benieuwd naar want ik dacht aanvankelijk dat het mogelijk was om de gegenereerde schalen ergens op te slaan(in een char array bijvoorbeeld). En de grootste uitdaging: het genereren en weer opslaan ergens. Je idee zou opzich wel kunnen. Dat zou dus ook een voordeel kunnen zijn voor het maken van "human readable".

Aanvankelijk wilde ik kijken bij de nieuw gemaakte onbekende toonladders om akkoorden en arpeggio's te maken.
Want in mijn beleving wordt er in de westerse muziek te veel gebruik gemaakt van dezelfde toonladders terwijl er gigantisch veel meer gebruikt kunnen worden. Punt alleen is dat de aantal combinaties gigantisch veel zijn. En ik had geen zin om ze op te schrijven. Het aantal schalen zullen tegen de honderden lopen denk ik. Zoniet duizenden.
Het zal in iedergeval een goeie stresstest zijn voor mijn comp.

[ Voor 6% gewijzigd door Verwijderd op 07-07-2009 16:24 ]


Acties:
  • 0 Henk 'm!

  • ingdas
  • Registratie: Mei 2007
  • Laatst online: 05-08-2013
Ik ben zelf (amateur)pianist en heb me onlangs eens beziggehouden met het onderzoeken van de wiskundige achtergrond van toonladders en tonensysteem, daarom dat dit topic me wel interesseert (vanuit muzikaal oogpunt dan).
Wat ik niet snap is hoe je later gaat bepalen wat een toonladder is. Tellen alle reeksen als een toonladder? (daarmee bedoel ik : "kan een toonladder van 1 noot?", "kan een toonladder van 10 noten?")

Als je van de 7 graden start, ga je ook al meteen uit van de westerse stemming, wat op zich ook al niet zo vanzelfsprekend is als je op zoek bent naar nieuwe klanken.

Concreet over je originele vraag: ik zou een array aanmaken met daarin alle mogelijke noten en dan aan de slag gaan met algoritmen voor permutaties (iets al dit dus, maar met objecten: http://users.telenet.be/v...k/Maths/permutations.html ). En uiteindelijk een filter die dubbele verwijzingen verwijdert.

Acties:
  • 0 Henk 'm!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Verwijderd schreef op dinsdag 07 juli 2009 @ 14:51:
[...]

Nee dat is het niet. Logisch gezien is het niet mogelijk om een toonladder op te bouwen waar twee posities naar dezelfde toon refereren.
Klopt, een toonladder is niks meer dan een opeenvolging van intervallen. Per definitie kan een toon dan ook maar 1 maal voorkomen. In veel westerse muziek zijn dit 7 intervallen, maar is niet noodzakelijk.
Je voorbeelden geven incorrecte toonladders aan omdat er tussen bijvoorbeeld 3# en 4b geen interval is.
Ik wil alleen maar een lijst generen met alle toonladders die er maken kunnen zijn. Dat ze niet "human readable" zijn heeft te maken met gebrek aan kennis hoe je de ladders moet vertalen. De vertaalslag moet je zelf maken.
Ingdas noemt het hierboven ook al, maar wat is in jouw definitie een toonladder. Moeten het altijd 7 tonen bevatten, of mogen het er ook 6 of 10 zijn? Als je die vrijheid neemt zal het aantal toonladders idd enorm toenemen.
Dat met die twaalf tonen is niet echt noodzakelijk als er een manier zou zijn om te zeggen van:
je hebt een toonschaal waarvan de oorsprong op C majeur ligt.
per positie zijn er 3 mogelijkheden.
Op zeven schaalposities zijn dat er bij elkaar: 21.
Visueel gezien:
code:
1
2
3
   1# 2# 3# 4# 5# 6# 7#
  1  2  3  4  5  6  7
1b 2b 3b 4b 5b 6b 7b

Dan ga je bepaalde combinaties uitsluiten zoals eerder gegeven:2#, 3b, 3# en 4b(die overigens in een later stadium eruit gehaald worden, want wordt opgeslagen in een temp txt file voordat het in een definitief bestand komt) Killed wel wat performance, maar dat is absoluut mijn dilemma niet.
Ik snap niet waarom je met 21 posities gaat werken als er maar 12 tonen zijn. Je kan ze er wel later uitfilteren, maar waarom niet direct in het begin, het brengt volgens mij geen voordelen. Het gaat om de intervallen, niet om de tonen zelf.
Je hebt gedeeltelijk gelijk. Bij het maken van een toonschaal is het muziektheoretisch niet mogelijk om twee schaalposities te hebben die refereren naar dezelfde toon in dezelfde ladder. Dus als er een combinatie is van 3# en 4b: moet de 4# weggehaalt worden omdat de toon al bezet is.
Er moet inderdaad altijd een interval aanwezig zijn gelijk aan of meer dan een halve toon. Jouw voorbeeld zou eigenlijk ook niet gegenereerd kunnen worden. Waar ik eigenlijk op doelde was in de muziek waarbij de componist besloten heeft tijdelijk (voor een of een handje vol maten) besloten heeft een andere toonladder te gebruiken. Als de componist 4b gebruikt ben je in principe de 4 kwijt in je toonladder voor die maten. Als de componist 3# gebruikt ben je de 3 kwijt in de toonladder. Hoewel het absoluut dezelfde toon is, is de intentie/interpretatie dus wel degelijk anders. Maar ik denk dat dit buiten het probleem valt.
Daar ben ik dus ook benieuwd naar want ik dacht aanvankelijk dat het mogelijk was om de gegenereerde schalen ergens op te slaan(in een char array bijvoorbeeld). En de grootste uitdaging: het genereren en weer opslaan ergens. Je idee zou opzich wel kunnen. Dat zou dus ook een voordeel kunnen zijn voor het maken van "human readable".
Nu ik begrijp wat je wilt bereiken zou ik het heel anders aanpakken. Ik zou een toonladders als volgt noteren (interval 1 = halve toonafstand):
code:
1
2
{interval1} {interval2} {interval3} {interval4}  bv:
2 2 1 2 2 2 1 (= majeur toonladder)

De grondtoon is irrelevant, want de toonladder blijft altijd gelijk.
Aanvankelijk wilde ik kijken bij de nieuw gemaakte onbekende toonladders om akkoorden en arpeggio's te maken.
akkoorden en arpeggios zijn tevens gedefinieerd door vaste intervallen en eigenlijk onafhankelijk van de gebruikte toonladder. Een c-majeur akkoord in een muziekstuk geschreven in c-mineur zal nog steeds aan majeur akkoord zijn (en het zal vreemd klinken;))
Want in mijn beleving wordt er in de westerse muziek te veel gebruik gemaakt van dezelfde toonladders terwijl er gigantisch veel meer gebruikt kunnen worden. Punt alleen is dat de aantal combinaties gigantisch veel zijn. En ik had geen zin om ze op te schrijven. Het aantal schalen zullen tegen de honderden lopen denk ik. Zoniet duizenden.
Het zal in iedergeval een goeie stresstest zijn voor mijn comp.
Tja er zullen ongetwijfeld veel meer toonladders zijn die we niet vaak horen, denk bijvoorbeeld aan het typische chinese gepingel waar we onszelf weinig in kunnen vinden. Je begeeft je wel op een glad vlak want de reden dat veel toonladders niet worden gebruikt is omdat ze simpelweg niet lekker in het gehoor liggen. Dat is een biologisch verschijnsel. Eveneens is er ook een cultureel aspect waarbij wij gewend zijn aan bepaalde toonsoorten.

Wel interessant onderwerp though :) Maar ik zou proberen nog wat te lezen over muziektheorieen, er is natuurlijk al heel veel bekend over het gebruik van toonladders, arpeggios en akkoorden. Ik denk dat het zal helpen bij het maken van je toonladder generator. succes ermee :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ingdas schreef op dinsdag 07 juli 2009 @ 19:09:
Ik ben zelf (amateur)pianist en heb me onlangs eens beziggehouden met het onderzoeken van de wiskundige achtergrond van toonladders en tonensysteem, daarom dat dit topic me wel interesseert (vanuit muzikaal oogpunt dan).
Wat ik niet snap is hoe je later gaat bepalen wat een toonladder is. Tellen alle reeksen als een toonladder? (daarmee bedoel ik : "kan een toonladder van 1 noot?", "kan een toonladder van 10 noten?")

Als je van de 7 graden start, ga je ook al meteen uit van de westerse stemming, wat op zich ook al niet zo vanzelfsprekend is als je op zoek bent naar nieuwe klanken.

Concreet over je originele vraag: ik zou een array aanmaken met daarin alle mogelijke noten en dan aan de slag gaan met algoritmen voor permutaties (iets al dit dus, maar met objecten: http://users.telenet.be/v...k/Maths/permutations.html ). En uiteindelijk een filter die dubbele verwijzingen verwijdert.
Damn, dat ik deze post heb gemist 8)7

Ik heb inderdaad nog niet over het aantal tonen wat er in totaal in zo'n reeks zou kunnen, theoretisch gezien.
ik geloof dat het door gaat naar twaalf tonen verspreid over twee octaven. Maar dat moet ik ff nalezen in m,n aantekingen.

Het zou dus kunnen dat een toonschaal zo opgebouwd kan zijn: 1, 2 , 3b, 4, 5b, 6, 7b, 8, 9b of 1 3 5 7
Pagina: 1