AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [Bass] Musik langsamer abspielen
Thema durchsuchen
Ansicht
Themen-Optionen

[Bass] Musik langsamer abspielen

Ein Thema von WorstNightmare · begonnen am 21. Jun 2009 · letzter Beitrag vom 22. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#1

[Bass] Musik langsamer abspielen

  Alt 21. Jun 2009, 18:29
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
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: [Bass] Musik langsamer abspielen

  Alt 21. Jun 2009, 18:42
Zitat von WorstNightmare:
Es kommt immer Fehler 19 -> Illegaler Typ
Wann kommt dieser Fehler?
Beim Kompilieren oder beim Ausführen?
Welche Zeile genau?
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: [Bass] Musik langsamer abspielen

  Alt 21. Jun 2009, 18:46
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.
The angels have the phone box.
  Mit Zitat antworten Zitat
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#4

Re: [Bass] Musik langsamer abspielen

  Alt 21. Jun 2009, 18:51
Mh, beim BASS_FX_TempoCreate kommt Fehler 4000 - Not a decoding channel.

@omata: Das ist der Bass-Errorcode.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: [Bass] Musik langsamer abspielen

  Alt 21. Jun 2009, 18:54
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);
The angels have the phone box.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: [Bass] Musik langsamer abspielen

  Alt 21. Jun 2009, 18:59
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;
  Mit Zitat antworten Zitat
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#7

Re: [Bass] Musik langsamer abspielen

  Alt 21. Jun 2009, 19:04
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.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: [Bass] Musik langsamer abspielen

  Alt 21. Jun 2009, 19:08
Dann bau halt nur meine beiden Zeilen ein, und nimm ansonsten deinen Code.

Oder klappt das auch nicht?
The angels have the phone box.
  Mit Zitat antworten Zitat
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#9

Re: [Bass] Musik langsamer abspielen

  Alt 21. Jun 2009, 19:10
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)
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: [Bass] Musik langsamer abspielen

  Alt 21. Jun 2009, 19:15
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.
The angels have the phone box.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:48 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