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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2009, 23:46   #1
NBSTUDIO
Пользователь
 
Регистрация: 20.02.2009
Сообщений: 28
Стрелка Перемотка (прокрутка) в плеере

Всем здрасте! ЕСть такая проблема: при перемотке (используется TrackBar) некорректно ведет себя время файла, т.е время файла идет при проигрывании высвечивает в Label а как только перемотаешь оно останавливается. Как узнать полностью время проигрываемого аудиофайла и чтоб при перемотке оно и в label автоматически прокручивалось (как в винамп), используются стандартные ком-ненты. Может кто сталкивался с подобной проблемой, помогите ее решить!!!
NBSTUDIO вне форума Ответить с цитированием
Старый 03.05.2009, 00:28   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

при открытии нового трека:
Код:
 TrackBar1.Max:=MediaPlayer1.Length;
таймер для отлова изменения(короче просто таймер):
Код:
TrackBar1.Position:=MediaPlayer1.Position;
так же тут можно и вывод в лейбл приделать
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.05.2009, 11:03   #3
NBSTUDIO
Пользователь
 
Регистрация: 20.02.2009
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
при открытии нового трека:
Код:
 TrackBar1.Max:=MediaPlayer1.Length;
таймер для отлова изменения(короче просто таймер):
Код:
TrackBar1.Position:=MediaPlayer1.Position;
так же тут можно и вывод в лейбл приделать
это да, но как сделать чтобы время выводилось в соотношении мин:сек т.е. 0:00 ? В моем плеере для этого участвует таймер с таким кодом:

procedure TForm1.Timer2Timer(Sender: TObject);
begin
// изменить счетчик времени
if sec < 59
then inc(sec)
else begin
sec :=0;
inc(min);
end;

// вывести время воспроизведения
Label2.Caption := IntToStr(min)+':';
if sec < 10
then Label2.Caption :=
Label2.Caption +'0'+ IntToStr(sec)
else Label2.Caption :=
Label2.Caption + IntToStr(sec);

// если воспроизведение текущей композиции
// не завершено
if MediaPlayer1.Position < MediaPlayer1.Length
then exit;

// воспроизведение текущей композиции
// закончено
Timer1.Enabled := False; // остановить таймер
MediaPlayer1.Stop; // остановить плеер
TrackBar1.Position:=0;
Timer1.Enabled:=true;

end;

но тут чето неправильно, время начинает идти как только запускается воспроизведение файла, а при паузе или перемотке оно не изменяется, а продолжает идти дальше! че ж делать ?
NBSTUDIO вне форума Ответить с цитированием
Старый 03.05.2009, 11:40   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в таймере для расчета времени берите значение из МедиаПлеера
а не сами отсчитывайте
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.05.2009, 15:33   #5
NBSTUDIO
Пользователь
 
Регистрация: 20.02.2009
Сообщений: 28
По умолчанию

дело в том, что если брать из медиплеера т.е. MediaPlayer.Length оно выдает значение не в секундах! а в каких то цифрах
типа 1239 потом 2135 и так далее каждую секунду вместо 00, 01 как обычно секунд.
NBSTUDIO вне форума Ответить с цитированием
Старый 03.05.2009, 16:54   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это называется милисекунды
и перевести в секунды это все проще простого

а вот еще, может пригодится
Цитата:
Determines the format used to specify position information.

type TMPTimeFormats = (tfMilliseconds, tfHMS, tfMSF, tfFrames, tfSMPTE24, tfSMPTE25, tfSMPTE30, tfSMPTE30Drop, tfBytes, tfSamples, tfTMSF);
property TimeFormat: TMPTimeFormats;

Description

TimeFormat determines how the StartPos, Length, Position, Start, and EndPos properties are interpreted. For example, if Position is 180 and TimeFormat is tfMilliseconds, the current position is 180 milliseconds into the medium. If Position is 180 and TimeFormat is tfMSF, the current position is 180 minutes into the medium.

Not all formats are supported by every device. When trying to set an unsupported format, the assignment is ignored.

The current timing information is always passed in a 4-byte integer. In some formats, the timing information returned is not really one integer, but single bytes of information packed in the long integer.

The TMPTimeFormats type defines the time formats for a multimedia device used with a TMediaPlayer. The following table lists the possible values for the TMPTimeFormats type:

Value Time format

tfMilliseconds Milliseconds are stored as a 4-byte integer variable.
tfHMS Hours, minutes, and seconds packed into a 4-byte integer. From least significant to most significant byte, the data values are
Hours (least significant byte)
Minutes
Seconds
Unused (most significant byte)
tfMSF Minutes, seconds, and frames packed into a 4-byte integer. From least significant to most significant byte, the data values are
Minutes (least significant byte)

Seconds
Frames
Unused (most significant byte)
tfFrames Frames are stored as a 4-byte integer variable.
tfSMPTE24 24-frame SMPTE packs values in a 4-byte variable. From least significant to most significant byte, the data values are
Hours (least significant byte)
Minutes
Seconds
Frames (most significant byte)
SMPTE (Society of Motion Picture and Television Engineers) time is an absolute time format expressed in hours, minutes, seconds, and frames. The standard SMPTE division types are 24, 25, and 30 frames per second.

tfSMPTE25 25-frame SMPTE packs data into a 4-byte variable in the same order as 24-frame SMPTE.
tfSMPTE30 30-frame SMPTE packs data into the 4-byte variable in the same order as 24-frame SMPTE.
tfSMPTE30Drop 30-drop-frame SMPTE packs data into the 4-byte variable in the same order as 24-frame SMPTE.
tfBytes Bytes are stored as a 4-byte integer variable.
tfSamples Samples are stored as a 4-byte integer variable.
tfTMSF Tracks, minutes, seconds, and frames are packed in the 4-byte variable. From least significant to most significant byte, the data values are

Tracks (least significant byte)
Minutes
Seconds
Frames (most significant byte)

Note that MCI uses continuous track numbering.

Note: Functions provided with MCI to help decoding the 4-byte integer specified in a given time format are documented under MCI Macros for Encoding and Decoding Time Data in the MMSYSTEM.HLP Help file.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 03.05.2009 в 16:57.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.05.2009, 19:46   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Лучше так
Код:
function Mus2Str(n: longint): string;
var
s: string;
sec: longint;
min: longint;
begin
sec:=trunc(n/1000);
min:=trunc(sec/60);
sec:=sec-min*60;
if min<10 then s:='0'+inttostr(min) else s:=inttostr(min);
if sec<10 then s:=s+':0'+inttostr(sec)
else s:=s+':'+ inttostr(sec);
Result:=s;
end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 04.05.2009, 13:13   #8
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

если чесно MediaPlayer не так хорош, лучше использовать Bass.dll
т.к. по своему опыту знаю сделаешь "плеер" вроде играет всё ок, а потом захочится сделать визуальзацию, эквалайзер, а это уже MediaPlayer'у не подсилу...
Так что лучше убить время на изучение Bass.dll или ZuByBass.dll (Аудио Плеер за 10 мин...)
ZuBy вне форума Ответить с цитированием
Старый 04.05.2009, 16:09   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

мне лично не нравится таскать с собой ДЛЛ без нужды
а если чтото серьезное то да, он не годится
но для простой вещи то можно
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.05.2009, 20:04   #10
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Извиняюсь за глупый вопрос, но у меня не получается: при выводе этой процедуры в label
Цитата:
function Mus2Str(n: longint): string;
var
s: string;
sec: longint;
min: longint;
begin
sec:=trunc(n/1000);
min:=trunc(sec/60);
sec:=sec-min*60;
if min<10 then s:='0'+inttostr(min) else s:=inttostr(min);
if sec<10 then s:=s+':0'+inttostr(sec)
else s:=s+':'+ inttostr(sec);
Result:=s;
end;
Возникает ошибка! Я наверное не правильно вывожу в label:
Цитата:
Mus2Str(strtoint(Label1.caption));
Ошибки при компиляции не возникает, но при проигрывании выскакивает плохое сообщение. Как можно вывести в label без ошибки?
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перемотка в mp3 плеере Mazaxaka Мультимедиа в Delphi 21 27.02.2009 01:09
MediaPlayer перемотка с TrackBar Kaifun Мультимедиа в Delphi 2 09.12.2008 19:24
Перемотка в mP3 плеере lionman Мультимедиа в Delphi 3 27.10.2008 21:21
Перемотка в TMediaPlayer Kn793 Компоненты Delphi 0 10.07.2008 11:02