![]() |
[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. ;-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 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