![]() |
[Bass] Musik langsamer abspielen
Hallo,
ich versuche gerade mittels Bass.dll eine Wavedatei langsam abzuspielen, denn normalerweise ist sie viel zu schnell. Mein Ansatz:
Delphi-Quellcode:
BASS_ATTRIB_TEMPO ist in BASS_FX.pas deklariert; muss ich da vielleicht vorher noch irgendwas laden/setzen?
var
FS: TFileStream; MS: TMemoryStream; CH: HCHANNEL; begin FS := TFileStream.Create('E:\vgmstream\dump.wav', fmOpenRead); MS := TMemoryStream.Create; try MS.CopyFrom(FS, 0); finally FS.Free; end; CH := BASS_StreamCreateFile(True, MS.Memory, 0, MS.Size, 0); if BASS_ChannelSetAttribute(CH, BASS_ATTRIB_TEMPO, 3.2) then Showmessage('success') else Showmessage(IntToStr(Bass_ErrorGetCode)); Bass_ChannelPlay(Ch, True); MS.Free; Es kommt immer Fehler 19 -> Illegaler Typ |
Re: [Bass] Musik langsamer abspielen
Zitat:
Beim Kompilieren oder beim Ausführen? Welche Zeile genau? |
Re: [Bass] Musik langsamer abspielen
Soweit ich weiß, muss man dafür den Channel erstmal umbauen. Nach dem CH := CreateFile muss da noch zusätzlich ein TempoCreate dazu:
Delphi-Quellcode:
Dann sollte es klappen.
// ...
CH := BASS_StreamCreateFile(True, MS.Memory, 0, MS.Size, 0); Ch := BASS_FX_TempoCreate(Ch, BASS_FX_FREERESSOURCE); // ... |
Re: [Bass] Musik langsamer abspielen
Mh, beim BASS_FX_TempoCreate kommt Fehler 4000 - Not a decoding channel.
@omata: Das ist der Bass-Errorcode. |
Re: [Bass] Musik langsamer abspielen
Dann erstell zuerst einen Decoding-Stream, dazu den letzten Parameter auf BASS_STREAM_DECODE setzen.
Delphi-Quellcode:
CH := BASS_StreamCreateFile(True, MS.Memory, 0, MS.Size, BASS_STREAM_DECODE);
Ch := BASS_FX_TempoCreate(Ch, BASS_FX_FREERESSOURCE); |
Re: [Bass] Musik langsamer abspielen
Versuch mal folgendes...
Delphi-Quellcode:
var
FS: TFileStream; MS: TMemoryStream; CH: HCHANNEL; begin FS := TFileStream.Create('E:\vgmstream\dump.wav', fmOpenRead); MS := TMemoryStream.Create; try MS.CopyFrom(FS, 0); MS.Position := 0; CH := BASS_StreamCreateFile( True, MS.Memory, 0, MS.Size, BASS_STREAM_DECODE or BASS_STREAM_PRESCAN ); CH := BASS_FX_TempoCreate(CH, BASS_FX_FREESOURCE); Bass_ChannelPlay(CH, True); BASS_FX_TempoSet(CH, -10, 0, -100); finally FS.Free; MS.Free; end; end; |
Re: [Bass] Musik langsamer abspielen
OK, jetzt geht es zwar, aber es ist immer noch viel zu schnell.
Delphi-Quellcode:
Die WAVE-Datei wurde aus einem Spiel extrahiert. Dort lag sie in einem speziellen Format vor, welches in PCM konvertiert wurde. So ist die Wave-Datei 2 Sekunden lang, obwohl es sonst ~4 sind.
if not BASS_ChannelSetAttribute(CH, BASS_ATTRIB_TEMPO, -100.0) then
Showmessage(IntToStr(Bass_ErrorGetCode)); @omata: BASS_FX_TempoSet gibt es bei mir nicht. |
Re: [Bass] Musik langsamer abspielen
Dann bau halt nur meine beiden Zeilen ein, und nimm ansonsten deinen Code. ;-)
Oder klappt das auch nicht? :gruebel: |
Re: [Bass] Musik langsamer abspielen
Genau das hab ich auch gemacht und es kommt kein Fehler mehr, aber es ist immer noch zu schnell, und noch kleiner kann ich den Tempowert nicht machen (dann kommt Fehler 20 - Illegaler Parameter) :wink:
|
Re: [Bass] Musik langsamer abspielen
Brauchst du denn auch die schnelle Version der Datei? Dann sonst würde ich die mal mit nem Wave-Editor behandeln. Denn dieses Tempo-Zeugs ist auch nicht grade schön für die Performance. ;-)
|
Re: [Bass] Musik langsamer abspielen
Mhh, eigentlich wollte ich es dynamisch haben, d.h. die Datei wird extrahiert, konvertiert und dann direkt abgespielt, ohne dass sie vorher extern bearbeitet werden muss.
Die Performance spielt bei so einer geringen Datenmenge denke ich keine große Rolle. Edit: Ich habe meiner Schwester die Datei mal gegeben - sie arbeitet viel mit Sony Vegas und sagte mir, sie könne sie vielleicht richtig biegen. Also hat sie sie in Sony Vegas importiert, STRG gedrückt (damit der Ton verlängert, nicht verdoppelt wird), die Tonspur länger gezogen. Dann hörte es sich immer noch quietschig an. In den Eigenschaften der Tonspur hat sie bei "Tonhöhenrand" einen Haken bei "Auf Stretch fixieren" gemacht und tada - es hörte sich wie im Original an. Kann man sowas auch mit Delphi hinbekommen? :( |
Re: [Bass] Musik langsamer abspielen
Hi
aus reiner Neugier hast du alle Tempo Optionen ausprobiert? Ich habe kaum Erfahrung mit der bass_fx.dll
Delphi-Quellcode:
Aus der Bass_fx Hilfe
BASS_ATTRIB_TEMPO
BASS_ATTRIB_TEMPO_OPTION_USE_AA_FILTER BASS_ATTRIB_TEMPO_OPTION_AA_FILTER_LENGTH BASS_ATTRIB_TEMPO_OPTION_USE_QUICKALGO BASS_ATTRIB_TEMPO_OPTION_SEQUENCE_MS BASS_ATTRIB_TEMPO_OPTION_SEEKWINDOW_MS BASS_ATTRIB_TEMPO_OPTION_OVERLAP_MS Zitat:
|
Re: [Bass] Musik langsamer abspielen
Zitat:
Ausprobieren kannst du das ja mal mit meinem ![]() |
Re: [Bass] Musik langsamer abspielen
So, ich habe jetzt einfach den Fehler an seinem Ursprung beseitigt:
Das Programm welches ich benutzte, um die RAW-Daten in eine Wave-Datei zu verwandeln, hat fehlerhaft gearbeitet, da es die genaue SampleRate nicht kannte. Ich lasse nun mein Programm den Wave-Header selbst schreiben und es geht alles einwandfrei. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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