Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2011, 19:37   #1
WinMen
Пользователь
 
Регистрация: 07.11.2010
Сообщений: 28
Восклицание Перемотка с использованием bass.dll

Для перемотки использую TrackBar. Для вопроизведения - BASS.
Код OnChange TrackBar-a:
Код:
BASS_ChannelSetPosition(Имя потока, ScrollBar1.Position, 0);
Код OnTimer:
Код:
sTrackBar1.Max := i556;
sTrackBar1.Position := BASS_ChannelGetPosition(strs[i], BASS_POS_BYTE);
Звук очень сильно искажается. Если убрать событие OnChange то все норм, но и перемотка не идет. Если убрать строку
Код:
sTrackBar1.Position := BASS_ChannelGetPosition(strs[i], BASS_POS_BYTE);
то перематывать можно, и звук норм,но TrackBar не следит за прогрессом.
Что делать?
WinMen вне форума Ответить с цитированием
Старый 30.04.2011, 23:06   #2
WinMen
Пользователь
 
Регистрация: 07.11.2010
Сообщений: 28
По умолчанию

Неужели никто не может помочь?(
WinMen вне форума Ответить с цитированием
Старый 03.05.2011, 10:52   #3
WinMen
Пользователь
 
Регистрация: 07.11.2010
Сообщений: 28
По умолчанию

Надеюсь на помощь.
WinMen вне форума Ответить с цитированием
Старый 05.05.2011, 09:43   #4
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

вот посмотри
Код:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, bass;

type
  TForm3 = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button4: TButton;
    ScrollBar1: TScrollBar;
    Timer1: TTimer;
    OpenDialog1: TOpenDialog;
    procedure ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
      var ScrollPos: Integer);
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;
  track:Boolean;
  stream:HSTREAM;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute=false then exit else   begin
Label1.Caption:=ExtractFileName(OpenDialog1.FileName);
ScrollBar1.Position:=0;
end;

end;

procedure TForm3.Button2Click(Sender: TObject);
begin
if stream<>0 then
BASS_StreamFree(stream);
stream:=BASS_StreamCreateFile(false,PChar(OpenDialog1.FileName), 0,0,BASS_UNICODE);
ScrollBar1.Max:=BASS_ChannelGetLength(stream,0);

BASS_ChannelPlay(stream, false);

end;

procedure TForm3.Button4Click(Sender: TObject);
begin
BASS_ChannelStop(stream);
BASS_ChannelSetPosition(stream,0,0);
end;

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
BASS_Free;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
// тут только сделай инициализацию потока
end;

procedure TForm3.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin
if ScrollCode=scEndScroll then  begin
track:=false;
BASS_ChannelSetPosition(stream, ScrollBar1.Position, 0) end else track:=true;
end;

procedure TForm3.Timer1Timer(Sender: TObject);
begin
if track=true then
ScrollBar1.Position:=BASS_ChannelGetPosition(stream, 0);
end;

end.
cargo29 вне форума Ответить с цитированием
Старый 05.05.2011, 20:11   #5
WinMen
Пользователь
 
Регистрация: 07.11.2010
Сообщений: 28
По умолчанию

То же самое
WinMen вне форума Ответить с цитированием
Старый 05.05.2011, 20:13   #6
WinMen
Пользователь
 
Регистрация: 07.11.2010
Сообщений: 28
По умолчанию

А можно исходник ваш?
WinMen вне форума Ответить с цитированием
Старый 06.05.2011, 12:22   #7
Exception
Пользователь
 
Регистрация: 31.12.2007
Сообщений: 37
По умолчанию

Вот смотрите мою реализацию, там все по таймеру с перемоткой этой, копайтесь и разбирайтесь.
http://forum.sources.ru/index.php?showtopic=324763
Exception вне форума Ответить с цитированием
Старый 07.05.2011, 21:55   #8
WinMen
Пользователь
 
Регистрация: 07.11.2010
Сообщений: 28
По умолчанию

Спасибо! Посмотрю сейчас
WinMen вне форума Ответить с цитированием
Старый 16.05.2011, 01:23   #9
Kovax
Пользователь
 
Регистрация: 21.12.2010
Сообщений: 28
По умолчанию

то, что писал cargo29, то по его коду все нормально работает. Обратите внимание на процедуру
Код:
procedure TForm3.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin
if ScrollCode=scEndScroll then  begin
track:=false;
BASS_ChannelSetPosition(stream, ScrollBar1.Position, 0) end else track:=true;
end;
Процедура OnScroll а не OnChange.

Последний раз редактировалось Kovax; 16.05.2011 в 01:26.
Kovax вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
bass.dll larry Общие вопросы C/C++ 1 09.11.2009 13:23
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
BASS DLL ygy Мультимедиа в Delphi 4 29.09.2009 04:39
BASS.DLL VintProg Мультимедиа в Delphi 2 21.09.2009 16:36
bass.dll Elem Мультимедиа в Delphi 18 19.07.2009 11:04