Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];

Вниз

Хочу проиграть трек с помощью 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.043 c
3-1176130175
jack128
2007-04-09 18:49
2007.07.08
Медленный фетч данных в FB


2-1181800938
Alvin
2007-06-14 10:02
2007.07.08
Отлов ошибок SQLconnection


15-1180611153
TUser
2007-05-31 15:32
2007.07.08
Очередной шпиёнский камень


6-1165483111
DmitryNekl
2006-12-07 12:18
2007.07.08
Трафик от конкретного приложения


4-1169703963
DIMAL
2007-01-25 08:46
2007.07.08
MIPS и FPS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский