Текущий архив: 2007.07.08;
Скачать: CL | DM;
Вниз
Хочу проиграть трек с помощью MMAudioPlayer1 в новом потоке (TTh) Найти похожие ветки
← →
XTD © (2007-06-14 16:34) [0]Привет всем!
Хочу проиграть трек с помощью MMAudioPlayer1 в новом потоке:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MPlayer, ToolWin, ComCtrls, Buttons, ExtCtrls, jpeg,
ActnMan, ActnColorMaps, Gauges, MMObj, MMDIBCv, MMSpectr,
MMDSPObj, MMConect, MMButton, MMLame, MMAudio, MMWPlay, MMAPlay, MMClrBtn,
MMLEDS, MMPanel, MMEnvelp, MMDelay, MMScroll, MMBmpLst, MMBmpBtn, MMHook,
MMFill, MMLight, MMSpGram, MMOscope, MMLevel, MMHTimer, MMLEDLbl, MMFFile,
MMFFEdit, MMDesign;
type
TForm1 = class(TForm)
ListBox1: TListBox;
MMAudioPlayer1: TMMAudioPlayer;
procedure ListBox1DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
NumTrek:Integer;
implementation
{$R *.dfm}
type
TMyThread=class(TThread)
private
//
protected
procedure Execute; override;
public
end;
//Pley в другом потоке
procedure TMyThread.Execute;
begin
if form1.ListBox1.Items[form1.ListBox1.itemindex] <> "" then
Begin
NumTrek := form1.ListBox1.itemindex;
form1.MMAudioPlayer1.LoadFromFile(form1.ListBox2.Items[form1.ListBox1.itemindex] );
form1.MMAudioPlayer1.Play();
End;
end;
{Проиграть трек из ЛистБокса по двойному клику в другом потоке}
procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
FS:=TMyThread.Create(false);
end;
Ошибок не выдает, трек не воспроизводится. Почему? Какие я сделал ошибки?
Буду благодарен за ответы...
← →
XTD © (2007-06-14 16:36) [1]Да, еще это в приват в классе ТФорм:
FS:TThread;
← →
XTD © (2007-06-15 09:15) [2]up
← →
Сергей М. © (2007-06-15 09:38) [3]Обращение к визуальным VCL-контролам в доп.потоке недопустимо.
К тому же нет гарантий корректности работы метода TMMAudioPlayer.Play в доп.потоке - это следует уточнить в док-кии к классу TMMAudioPlayer
← →
XTD © (2007-06-15 09:53) [4]Заметил такую странность:
Если в procedure TMyThread.Execute; запустить какой нить цикл, то звук прорывается, но не надолго.
← →
Сергей М. © (2007-06-15 10:03) [5]
> Если в procedure TMyThread.Execute; запустить какой нить
> цикл, то звук прорывается, но не надолго.
Значит метод Play выполняется асинхронно.
Где это чудо - TMMAudioPlayer - живет ?
← →
XTD © (2007-06-15 10:14) [6]Это отдельная компонента, могу поделится, все рабочее и много чего интересного...
← →
Сергей М. © (2007-06-15 10:24) [7]
> могу поделится
Оно мне без надобности.
А вот тебе не мешало бы внимательно изучить док-цию к компоненту, если она есть. Если нет, то изучить исходники хотя бы в части упомянутого тобой метода. А если нет ни того ни другого, то настоятельно рекомендую выбросить такой компонент в мусор.
← →
XTD © (2007-06-15 10:33) [8]Да, документации маловато...
Собственно говоря, почему я решил проигрывать треки в отдельном потоке:
Потому что при сворачивании окна плеера (да и всех остальных окон Win), происходит пауза при проигрывании в 1 сек.. Не найдя стандартного решения этой проблемы, решил использовать отдельный поток.
← →
Сергей М. © (2007-06-15 11:22) [9]
> Не найдя стандартного решения этой проблемы, решил использовать
> отдельный поток
А с чего ты взял, что вынос сабжа в доп.поток решит эту проблему ?
← →
XTD © (2007-06-15 12:22) [10]Думаю, что в отдельном потоке проигрыванию не будет ничего мешать.
Тут интересно почему возникает эта пауза в проигрывании?
← →
Сергей М. © (2007-06-15 12:40) [11]
> интересно почему возникает эта пауза в проигрывании?
>
Телепатор подсказывает, что работа компонента тесно завязана с оконными сообщениями.
> при сворачивании окна плеера
Что при этом у тебя в программе происходит в части обработки сопутствующих событий/сообщений - это только тебе ведомо. Но пока вся эта обработка не будет выполнена, ни одно из оконных сообщений, в получении которых заинтересован заинтересован компонент, обработано компонентом не будет.
← →
sniknik © (2007-06-15 12:44) [12]> Думаю, что в отдельном потоке проигрыванию не будет ничего мешать.
у тебя поток, как таковой не работает, просто запускает проигрывание и завершается т.к.
> метод Play выполняется асинхронно.
не говоря уж об прямых обращениях к форме из потока... нельзя так делать.
> Тут интересно почему возникает эта пауза в проигрывании?
а в "родных" демо к этим компонентам тоже пауза? тогда выкини их, или купи т.к. эта пауза может быть признаком "триальности" (тогда на сайте это должно быть отражено, по чему и можно принять решение)
Страницы: 1 вся ветка
Текущий архив: 2007.07.08;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.034 c