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
Seite 1 von 4  1 23     Letzte »    
EWeiss
(Gast)

n/a Beiträge
 
#1

Notenlängen berechnung

  Alt 14. Mai 2011, 16:29
Die neue Notenlänge übergebe ich so.
MidiTracker.SetNewNoteLength(SmallNoteData[SmallNDSelected].Value);

Und werte sie auf dieser art aus.
Value := NewLenght div 2;

Nehme ich jetzt ein Lied gespielt in 1/8 Noten und incrementiere die Noten
SmallNoteData[SmallNDSelected].Value

abhängig von SmallNDSelected also 1,2,4,8,16

funktioniert auch soweit alles die noten werden dann langsamer gespielt bei gleichbleibender geschwindigkeit
und abhängig von der Value länger oder kürzer gezeichnet.
Mein Problem ist nun das bei der Übergebenen Value von 16 die Anwendung abstürzt.

bis 1/32 Noten geht noch alles.
Danach kommt die Meldung EaccessViolation Schreiben von adresse FFFFFF

Was ist hier falsch ?
Die anderen übergaben funktionieren doch einwandfrei.

gruss

Geändert von EWeiss (15. Mai 2011 um 09:29 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
 
#2

AW: Notenlängen berechnung

  Alt 14. Mai 2011, 16:42
Schalte mal die Bereichsprüfung an. Eventuell kann es sein, dass du einen versteckten Integer-Überlauf hast.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Notenlängen berechnung

  Alt 14. Mai 2011, 16:48
Schalte mal die Bereichsprüfung an. Eventuell kann es sein, dass du einen versteckten Integer-Überlauf hast.

Bernhard
Habe es eingeschaltet kommt gleiche meldung ohne das ich mir eine debugger möglichkeit angeboten wird.
Die Berechnung müßte doch eigentlich OK sein oder?

gruss
  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 14. Mai 2011, 17:01
Die Berechnung müßte doch eigentlich OK sein oder?
Nun ja. Hmm... Ich denke mal...

Ich bin dann doch zu dem Schluss gekommen, dass ich jetzt nicht denken werde, weil einfach kein Quelltext existiert, über den man mal drüber schauen könnte. Und genau deshalb wäre es sinnvoll vielleicht mal 1-2 Zeilen mehr zu zeigen, wenn du verstehst, was ich meine.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Notenlängen berechnung

  Alt 14. Mai 2011, 17:11
Die Berechnung müßte doch eigentlich OK sein oder?
Nun ja. Hmm... Ich denke mal...

Ich bin dann doch zu dem Schluss gekommen, dass ich jetzt nicht denken werde, weil einfach kein Quelltext existiert, über den man mal drüber schauen könnte. Und genau deshalb wäre es sinnvoll vielleicht mal 1-2 Zeilen mehr zu zeigen, wenn du verstehst, was ich meine.

Bernhard
Du hattest recht.
Bereichsprüfung wurde erst ausgeführt nach dem NEustart des Projekt warum auch immer.

gruss

Geändert von EWeiss (14. Mai 2011 um 18:23 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#6

AW: Notenlängen berechnung

  Alt 16. Mai 2011, 01:41
Warum? Weil diese Debug-Infos und Prüfungen natürlich in die EXE einkompiliert werden müssen. Zur Runtime mal eben ab- und zuschalten ist etwas viel verlangt
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Notenlängen berechnung

  Alt 16. Mai 2011, 10: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 11:00 Uhr)
  Mit Zitat antworten Zitat
shmia

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

AW: Notenlängen berechnung

  Alt 16. Mai 2011, 12: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
 
#9

AW: Notenlängen berechnung

  Alt 16. Mai 2011, 12: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 12: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
 
#10

AW: Notenlängen berechnung

  Alt 16. Mai 2011, 12: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
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 03:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz