Показать сообщение отдельно
  #12  
Старый 25.11.2012, 02:43
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

При выполнении OpenDialog1.Execute следует код
Код:
function OpenFileName : Boolean;
begin
  Result := False;

  // create a stream from the file
  isMod := mdBassStream;
  ChanDecoder := BASS_StreamCreateFile(False, PAnsiChar(szFileName), 0, 0, BASS_SAMPLE_FLOAT or BASS_STREAM_DECODE or BASS_STREAM_PRESCAN);
  if ChanDecoder = 0 then
  begin
    isMod := mdBassMusic;
    ChanDecoder := BASS_MusicLoad(False, PAnsiChar(szFileName), 0, 0, BASS_SAMPLE_FLOAT or BASS_MUSIC_DECODE or BASS_MUSIC_PRESCAN, 0);
    if ChanDecoder = 0 then
    begin
      // Can't load the file
      isMod := mdBassEmpty;
      MessageBox(0, PAnsiChar(Format('%s "%s"', [szNotOpenFile, szFileName])), 'Error', MB_OK or MB_ICONERROR);
      Exit;
    end;
  end;

  case isMod of
    mdBassStream : ChanPlay := BASS_StreamCreateFile(False, PAnsiChar(szFileName), 0, 0, BASS_SAMPLE_FLOAT);
    mdBassMusic  : ChanPlay := BASS_MusicLoad(False, PAnsiChar(szFileName), 0, 0, BASS_SAMPLE_FLOAT, 0);
  end;
  
  // get byte length
  ChanLen := BASS_ChannelGetLength(ChanDecoder, BASS_POS_BYTE);
  // allocate a buffer for the Channel data
  SetLength(ChanData, ChanLen);
  // decode the stream into the buffer
  ChanLen := BASS_ChannelGetData(ChanDecoder, ChanData, ChanLen);
  
  if ChanPlay <> 0 then
    BASS_ChannelPlay(ChanPlay, False);

  Result := True;
end;

на кнопку будет так
Код:
      if OpenDialog1.Execute then
      begin
        isPlayed := False;
        BASS_ChannelStop(ChanPlay);
        FreeBuffer;
        OpenFileName;
        AllocateWaveData;
        isPlayed := True;
      end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием