AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Notenlängen berechnung

Ein Thema von EWeiss · begonnen am 14. Mai 2011 · letzter Beitrag vom 16. Mai 2011
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Notenlängen berechnung

  Alt 16. Mai 2011, 09:49
Wie kann ich denn jetzt berechnen anhand dieser Formel

Delphi-Quellcode:
  // Bei einem Tempo von 120 BPM ist die Länge einer 1/4 Note 500ms.
  // Bei 130 BPM (120/130 BPM =) 0.92 * 500ms = 461ms.
  TempoWait := ((120 / MidiTracker.Tempo) * 500) / (BeatProMaes[BeatPMSelected].Value) / SmallNoteData[SmallNDSelected].Value;
Abhängig vom MidiTracker.Tempo ob das eingeladenen MidiFile auf dem Takt 2/4 oder 4/4 gesetzt werden muss?

Bei einem MidiTracker.Tempo = 120 habe ich einen wert von 125 = 4/4 Takt
wie wäre der bei 100? .. jo 75

Aber wie berechne ich das korrekt?


Hmmm...

Geändert von EWeiss (16. Mai 2011 um 10:00 Uhr)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

AW: Notenlängen berechnung

  Alt 16. Mai 2011, 11:01
Wieso hast du eigentlich keine Funktion, die aus BPM und Notendauer die Länge in Sekunden berechnet??
Meine Vermutung: je komplexer ein Sourcecode, umso "besser" findest du ihn.
Delphi-Quellcode:
function NotenDauer(BPM,note:double):double;
const
  SECONDS_PER_MINUTE = 60;
begin
  result := note * 4.0 / (BPM / SECONDS_PER_MINUTE);
end;
Andreas
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Notenlängen berechnung

  Alt 16. Mai 2011, 11:19
Wieso hast du eigentlich keine Funktion, die aus BPM und Notendauer die Länge in Sekunden berechnet??
Meine Vermutung: je komplexer ein Sourcecode, umso "besser" findest du ihn.
Delphi-Quellcode:
function NotenDauer(BPM,note:double):double;
const
  SECONDS_PER_MINUTE = 60;
begin
  result := note * 4.0 / (BPM / SECONDS_PER_MINUTE);
end;
Weil ich annahm das es nicht notwendig ist.
Eine Procedure hab ich schon.
Und die Funktion zu durchlaufen bei möglichen 4000 Noten ? Jede einzelne Note abfragen?

Delphi-Quellcode:
procedure TMidiTracker.ChangeVelocity;
begin
  if PlayingSong then
    PlayingSong := False;
  // Bei einem Tempo von 120 BPM ist die Länge einer 1/4 Note 500ms.
  // Bei 130 BPM (120/130 BPM =) 0.92 * 500ms = 461ms.
  TempoWait := ((120 / MidiTracker.Tempo) * 500) / (BeatProMaes[BeatPMSelected].Value) / SmallNoteData[SmallNDSelected].Value;

end;
EDIT:
Wobei die Note dabei eigentlich keine Rolle spielt oder?
Es geht ja um den Takt nicht um die Note.

Danke

gruss

Geändert von EWeiss (16. Mai 2011 um 11:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#4

AW: Notenlängen berechnung

  Alt 16. Mai 2011, 11:22
Irgendwie habe ich das Gefühl, dass die gesamte Berechnung viel zu kompliziert ist. Bei 130 BPM hat 1 Schlag eine Dater von 60/130 = 0,461... s, bei 120 BPM sind das 60/120 = 0,5 s. Jetzt musst du nur noch deiner Zeit pro Schlag eine Notenlänge zuordnen und alle anderen Längen (Zeit) ergeben sich daraus.

Sagen wir: du hast 120 BPM bei 1/4-Note, dann hast du folgende Tabelle:
Code:
120 BPM = 2 Schläge/s => 1 Schlag auf 0,5 s

1/1-Note: 2000ms
1/2-Note: 1000ms
1/4-Note: 500ms
1/8-Note: 250ms
1/16-Note: 125ms
Das so zu berechnen finde ich wesentlich einfacher.

Bernhard

PS: Eine Tabelle/Liste/Array abzufragen ist auch wesentlich einfacher, als immer wieder eine Funktion zum neu berechnen durchlaufen zu lassen. Außerdem musst du das Array nur dann neu berechnen, wenn sich das Tempo oder die Zuordnung ändert (da das in normalen Stücken kaum der Fall ist, würde ich die durchschnittliche Anzahl, wo man sowas braucht mit ~0 angeben).
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Notenlängen berechnung

  Alt 16. Mai 2011, 11:37
Ich habe die Werte anhand einer Tabelle vorher festgelegt.

Delphi-Quellcode:
    BeatProMaes[0].Name := '2/2';
    BeatProMaes[0].Value := 4;
    BeatProMaes[1].Name := '3/2';
    BeatProMaes[1].Value := 6;
    BeatProMaes[2].Name := '4/2';
    BeatProMaes[2].Value := 8;
    BeatProMaes[3].Name := '2/4';
    BeatProMaes[3].Value := 2;
    BeatProMaes[4].Name := '3/4';
    BeatProMaes[4].Value := 3;
    BeatProMaes[5].Name := '4/4';
    BeatProMaes[5].Value := 4;
    BeatProMaes[6].Name := '5/4';
    BeatProMaes[6].Value := 5;
    BeatProMaes[7].Name := '6/4';
    BeatProMaes[7].Value := 6;
    BeatProMaes[8].Name := '7/4';
    BeatProMaes[8].Value := 7;
    BeatProMaes[9].Name := '9/4';
    BeatProMaes[9].Value := 9;
Wenn ich jetzt ein midifile importiere bekomme ich die Geschwindigkeit mitgeliefert.
Wenn ich es eingeladen habe möchte ich nicht in den Takten rumklicken müssen um die passende
Taktart zu dem Stück passend zur Geschwindigkeit einstellen.

Wenn ich vorher den 4/4 Takt eingestellt habe und die Geschwindigkeit passt nicht
dann schalte ich runter auf 2/4 usw.. bis es halt passt.
Und das möchte ich vermeiden.

Es ist also abhängig von BeatProMaes[BeatPMSelected].Value
Bei 2/4 würde die Geschwindigkeit quasi um 2 heruntergesetzt.
Wenn der Index = 3

Nur um das zu berechnen finde ich keinen Anhaltspunkt.

EDIT:
Es geht um den Takt nicht um die Note.
Vorher war die Geschwindigkeit MidiTracker.Tempo = 120
Nun liefert das MidiFile eine von 100 also
MidiTracker.Tempo = 100

Und damit muss ich jetzt auf den Takt schließen.
Das ist mein Problem


gruss

Geändert von EWeiss (16. Mai 2011 um 11:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Notenlängen berechnung

  Alt 16. Mai 2011, 12:14
Zitat:
Wenn ich vorher den 4/4 Takt eingestellt habe und die Geschwindigkeit passt nicht
dann schalte ich runter auf 2/4 usw.. bis es halt passt.
Was hat denn der Takt mit der Geschwindigkeit und der tatsächlichen Notenlänge zu tun? Ich kann einen Walzer im 3/4 Takt schnell oder langsam spielen. Ich kann einen Rocksong im 4/4 Takt auch langsam oder schnell spielen (Johnny B. Good ist genauso im 4/4 Takt, wie Wonderful Tonight.) Und damit variiert natürlich die Notenlänge. Nicht umsonst gibt es in der Musik Bezeichnungen für das Spieltempo [http://de.wikipedia.org/wiki/Tempo_%..._Tempoangaben] bzw. die Angabe der BPM für das Metronom.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Notenlängen berechnung

  Alt 16. Mai 2011, 12:21
so wie ich gelesen habe ist BPM abhängig bzw.. mit dem Takt verbunden.
Wenn ich die länge der Note verändere von 1/4 auf 1/8 spielt das stück nicht langsamer oder schneller.
Es ändert sich lediglich die Notenlänge wobei die Geschwindigkeit gleich bleibt.

Teste das mal mit Anvil Studio 2011
Dann weist was ich meine.

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Notenlängen berechnung

  Alt 16. Mai 2011, 12:49
Und ja vergessen!
Wenn ich einen 4/4 Takt spiele ist dieser immer Schneller als ein 2/4 Takt
Da dieser nur die Hälfte von 4/4 ist Oder?
Das hat nichts damit zu tun ob ich einen 4/4 Takt langsam oder schneller spielen kann.

Spiel mal dein Johnny B. Good im 2/4 Takt

gruss
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz