Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Audio CD, Geschwindigkeit verändern (https://www.delphipraxis.net/97669-audio-cd-geschwindigkeit-veraendern.html)

mlspider 14. Aug 2007 10:59


Audio CD, Geschwindigkeit verändern
 
Ich bekomme es einfach nicht gebacken das Wiedergabetempo (nicht Pitch!!!) zu verändern.

Hier die relevanten Codestellen:

Delphi-Quellcode:
procedure TForm1.PlayTrack(drive, track: DWORD);
begin
  if (stream[drive]) then
    BASS_CD_StreamSetTrack(stream[drive],track) // already have a stream, so just set the track
  else
  begin
    stream[drive] := BASS_CD_StreamCreate(drive, track, BASS_CD_FREEOLD); // create stream
    BASS_ChannelSetSync(stream[drive], BASS_SYNC_END, 0, @EndSync, 0); // set end syc
  end;
  if (drive = DWORD(curdrive)) then
    trkPos.Max := BASS_ChannelGetLength(stream[drive]) div 176400; // set pos scroller range
  BASS_ChannelPlay(stream[drive], False); // start playing
end;

procedure TForm1.UpdateTrackList;
var
  vol, spd: DWORD;
  cdtext, t: PChar;
  a, tc, l: Integer;
  text, tag: String;
begin
  tc := BASS_CD_GetTracks(curdrive);
  lstTracks.Items.Clear;
  if (tc = -1) then // no CD
    Exit;

  cdtext := BASS_CD_GetID(curdrive, BASS_CDID_TEXT); // get CD-TEXT
  for a := 0 to tc - 1 do
  begin
    l := BASS_CD_GetTrackLength(curdrive, a);
    text := Format('Track %.2d', [a + 1]);
    if (cdtext <> nil) then
    begin
      t := cdtext;
      tag := Format('TITLE%d=', [a + 1]); // the CD-TEXT tag to look for
      while (t <> nil) do
      begin
         if (Copy(t, 1, Length(tag)) = tag) then // found the track title...
         begin
           text := Copy(t, Length(tag)+1, Length(t) - Length(tag)); // replace "track x" with title
           Break;
         end;       t := t + Length(t) + 1;
      end;
    end;
    if (l = -1) then
      text := text + ' (data)'
    else
    begin
      l := l div 176400;
      text := text + Format(' (%d:%.2d)', [l div 60, l mod 60]);
    end;
    lstTracks.Items.Add(text)
  end;
  a := BASS_CD_StreamGetTrack(stream[curdrive]);
  if (a <> -1) then // this drive has a stream
  begin
    lstTracks.ItemIndex := LOWORD(a); // select current track
    trkPos.Max := BASS_ChannelGetLength(stream[curdrive]) div 176400; // set pos scroller range
  end
  vol := 100;
  spd := 44100;
  BASS_ChannelGetAttributes(stream[curdrive], spd, vol, l); // get speed & volume
  trkVol.Position := 100 - vol; // set volume slider pos
  trkSpeed.Position := spd div 441; // set speed slider pos
  GroupBox2.Caption := Format('Speed - %d%%', [trkVol.Position]);
end;

//ab hier scheitert es

procedure TCDPlayer.Button2Click(Sender: TObject);
begin
 chan2:=stream[curdrive];
 BASS_FX_TempoCreate(chan2, BASS_STREAM_DECODE);
 BASS_FX_TempoGetSource(chan2);
 BASS_FX_TempoSet(chan2, LMDTrackBar10.Position, 44100, +100);
 Label50.Caption := Format('%d %%', [LMDTrackBar10.Position]);
end;
chan2 ist vom Typ HSTREAM

Wishmaster 14. Aug 2007 20:37

Re: Audio CD, Geschwindigkeit verändern
 
Hi

welche version benutzt du? BASS_CD_FREEOLD wird in BASS_CD_StreamCreate nicht mehr benutzt.


versuche es mal mit mit.

Delphi-Quellcode:
 
     chan := BASS_CD_StreamCreate(drive, track, BASS_STREAM_DECODE or BASS_STREAM_AUTOFREE);
    If (chan = 0) then
     begin
      Error()
     end;

     chan := BASS_FX_TempoCreate(chan, BASS_FX_FREESOURCE or BASS_STREAM_AUTOFREE);
   If (chan = 0) then
    begin
     Error()
    end

    // play new created stream
  BASS_ChannelPlay(chan, FALSE);


Delphi-Quellcode:
BASS_SetConfig(
    BASS_CONFIG_CD_FREEOLD,
    BOOL freeold
);




History
=======

2.3.0.3 - 9/7/2007
------------------
* Vista compatibility fix

2.3.0.2 - 25/11/2006
--------------------
* Drive letter support when using ASPI on NT-based Windows
BASS_CD_GetDriveLetter

2.3.0.1 - 27/6/2006
-------------------
* Pregap length retrieval
BASS_CD_GetTrackPregap
* MusicBrainz ID generation
BASS_CDID_MUSICBRAINZ (BASS_CD_GetID type)

2.3 - 21/5/2006
---------------
* Adjustable read speed
BASS_CD_SetSpeed
BASS_CD_GetSpeed
* Automatic speed reduction upon read errors
BASS_CONFIG_CD_AUTOSPEED (BASS_SetConfig option)
BASS_SYNC_CD_SPEED (BASS_ChannelSetSync type)
* Configurable read error retries
BASS_CONFIG_CD_RETRY (BASS_SetConfig option)
* Skip past read errors
BASS_CONFIG_CD_SKIPERROR (BASS_SetConfig option)
* Error sync now triggered by every read error (not just ending playback)
BASS_SYNC_CD_ERROR (BASS_ChannelSetSync type)

2.2 - 2/10/2005
---------------
* Support for new plugin system (BASS_PluginLoad)
* Track changing
BASS_CD_StreamSetTrack
CDTEST example updated
* FREEOLD flag replaced by a config option
BASS_CONFIG_CD_FREEOLD (BASS_SetConfig option)
BASS_CD_FREEOLD *removed*
* Info structure "size" member removed
BASS_CD_INFO structure

mlspider 14. Aug 2007 20:45

Re: Audio CD, Geschwindigkeit verändern
 
Bass / Bass_fx / Basscd Version 2.2


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 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