Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [Bass] Musik langsamer abspielen (https://www.delphipraxis.net/135987-%5Bbass%5D-musik-langsamer-abspielen.html)

WorstNightmare 21. Jun 2009 17:29


[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:
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;
BASS_ATTRIB_TEMPO ist in BASS_FX.pas deklariert; muss ich da vielleicht vorher noch irgendwas laden/setzen?
Es kommt immer Fehler 19 -> Illegaler Typ

omata 21. Jun 2009 17:42

Re: [Bass] Musik langsamer abspielen
 
Zitat:

Zitat von WorstNightmare
Es kommt immer Fehler 19 -> Illegaler Typ

Wann kommt dieser Fehler?
Beim Kompilieren oder beim Ausführen?
Welche Zeile genau?

Gausi 21. Jun 2009 17:46

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:
// ...
CH := BASS_StreamCreateFile(True, MS.Memory, 0, MS.Size, 0);
Ch := BASS_FX_TempoCreate(Ch, BASS_FX_FREERESSOURCE);
// ...
Dann sollte es klappen.

WorstNightmare 21. Jun 2009 17:51

Re: [Bass] Musik langsamer abspielen
 
Mh, beim BASS_FX_TempoCreate kommt Fehler 4000 - Not a decoding channel.

@omata: Das ist der Bass-Errorcode.

Gausi 21. Jun 2009 17:54

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);

omata 21. Jun 2009 17:59

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;

WorstNightmare 21. Jun 2009 18:04

Re: [Bass] Musik langsamer abspielen
 
OK, jetzt geht es zwar, aber es ist immer noch viel zu schnell.

Delphi-Quellcode:
  if not BASS_ChannelSetAttribute(CH, BASS_ATTRIB_TEMPO, -100.0) then
    Showmessage(IntToStr(Bass_ErrorGetCode));
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.

@omata: BASS_FX_TempoSet gibt es bei mir nicht.

Gausi 21. Jun 2009 18:08

Re: [Bass] Musik langsamer abspielen
 
Dann bau halt nur meine beiden Zeilen ein, und nimm ansonsten deinen Code. ;-)

Oder klappt das auch nicht? :gruebel:

WorstNightmare 21. Jun 2009 18:10

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:

Gausi 21. Jun 2009 18:15

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 19:02 Uhr.
Seite 1 von 2  1 2      

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