Ist es möglich, (über die bass.dll) ein File auf eine bestimmte länge runter/hochzupitchen?
Hintergrund: Ich werde in naher zukunft unseren Wiederholungs-aufzeichnungsserver neu Installieren (kannst dich ja noch erinnern ans .ogg Problem, das jetzt übrigends endgültig fehlerfrei läuft ). Dann sind die Files nicht exakt 60:00:00min lang, sondern nur 59:59:XX. Dies verursacht bei 2 Wiederholungen hintereinander den Effekt, dass zwichen den Wdh’s ein Track aus der Playlist “angespielt” wird. Deshalb wärs super, wenn man das File so runterpitchen könnte, dass es 60:01 (beispielsweise) lang ist. Das ist denke ich unhörbar.
am besten dann auch noch per Script (wenn titelname xx, dann pitche auf YY-länge )
Was meinst du? ist sowas möglich und findest du es einbauenswert?
Geht schon, mit der BASS_FX.DLL Du kannst sogar das Tempo unabhängig vom Pitch regeln.
Du musst für jeden Player die BASS_FX-Option aktivieren (im der Soundkarten-Konfigurationsdialog). Per Script kannst du mit SetTempo arbeiten, um das Tempo (und damit die tatsächliche Spieldauer) zu ändern:
BASS_FX ist installiert und aktiviert? Dann solltest du im PFL-Dialog hinterher auch den veränderten Tempo-Wert sehen.
Ich habe im Konfigurationsprogramm für jeden Player unter “Soundkarte” sowie unter “PFL-Soundkarte” und im PFL unter Soundkarte jeweils “Tempo und Pitchanpassung” aktiviert. Muss ich da noch die bass_fx.dll irgendwo hinverschieben(denn die liegt ja im obersten Verzeichnis)?
Im PFL-dialog sehe ich auch die Pitch/Tempo regler, nur die stehen beide auf 0, auch nach Ausführen des Scripts.
Jedoch fällt mir auf, dass sehr kurzen Dateien (7sek Länge) sehr SCHNELL abgespielt werden (ca 3 sek Länge)…
ich kann mir da keinen Reim drauf machen
Was bedeutet denn der Parameter von SetTempo? eine art faktor, um wieviel die Datei länger gezogen wird?
Ja, SetTempo erwartet einen Faktor. 36000000000 müsste 1 Stunde in DirectX-Einheiten sein, wenn ich mich nicht verrechnet oder bei den Nullen verzählt habe 606010000000. Rechne nochmal nach
Da kommt ja dann bei Tracks, die kürzer sind als eine Stunde immer ein Wert größer 1 raus ( Da unterm Bruchstrich eine zahl kleiner die 36000000000 steht)…
kann es sein, dass bei Zahlen größer 1 der Track schneller gemacht wird (habe es mit ein paar zahlen brobiert… bei z.B 300 wars eindeutig )…
ist das Richtig?
Logisch überlegt wären dann die Faktoren zwischen 0,000…1 und 0,999… dafür da, um den Track in die Länge zu ziehen (Item.GetDuration/36000000000). dann passiert aber überhaupt nichts (selbst wenn ich es mit 0.1 probiere)
kannst du mit meinen Vermutungen irgendwas anfangen?
naja, weil die werte zwischen 0 und 1 kein ergebnis brachten, hab ich mal noch n bissl rumgespielt, und rausgefunden, dass der normalwert von GetTempo “0” ist, mit werten größer 0 wird gestaucht, und mit werten kleiner 0 wird gezogen. (getestet mit faktoren 20 und -20, da wirds hörbar)
Nur dann greift die Methode des Ausrechnens des Parameters von SetTempo nichtmehr, oder?
(Beispiel: ich habe ein 30 min langes Stück, will es auf 60 strecken: dafür würde ich “-36000000000/Item.GetDuration” nehmen. dort müsste dannn der Wert “-2” herauskommen. -2 halbiert aber die geschwindigkeit des Tracks nicht
Hast du eine Idee?
Sorry, dass ich dich eventuell nerve mit dem Thema…
Ah, Mist, ich war auf dem falschen Dampfer. Die Tempo-Angabe ist kein Faktor, sondern eine Prozentangabe, wie der Pitch-Regler an einem CD-Player. Die Formel musst du dir jetzt selbst aufstellen (und dann hier posten g).
[code]procedure OnPlayerStart(PlayerControl: IPlayerControl; Item: IPlaylistItem);
var tempo : single;
begin
tempo:=-100/Item.GetDuration*36000000000+100;
Item.SetTempo(tempo);
end;