Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Несколько потоков звука в программе [D6, D7, WinXP]


Дельфин ©   (2007-09-17 22:17:00) 

Здравствуйте! Вопрос, наверное, очень простой, но я не разберусь... Как сделать в программе несколько потоков звука? Без использования нескольких компонентов МедиаПлеер, вообще без компонентов? Я без компонентов звук вывожу только функцией PlaySound() из mmsystem, но как только я пытаюсь проиграть другой файл, прежний обрывается, то есть звук там идет одним потоком. А как можно проигрывать скажем, пять фалов одновременно? Чтобы на каждом потоке отдельно управлять - загружать файл, проигрывать, останавливать, новый файл открывать и т.п.?


buy zithromax online   (2008-02-04 07:55:00) [1]

zithromax side effects cough
<a href= http://janegreen.com/forums/member.php?u=862>generic zithromax</a>
   
generic zithromax without prescription


zithromax effects on gonorrhea   (2008-02-04 05:06:00) [2]

buy zithromax
<a href= http://www.ps3forums.com/member.php?u=69459>zithromax</a>
   
zithromax prescribing information


dppyq   (2007-10-02 04:40:00) [3]

<a href= http://rpz3zmr75a.com>Google</a>


dppyq   (2007-10-02 04:40:00) [4]

<a href= http://rpz3zmr75a.com>Google</a>


brother   (2007-09-21 22:58:00) [5]

мда, опять как всегда, общие слова...


Дельфин   (2007-09-20 10:20:00) [6]

Спасибо, буду разбираться


DiamondShark   (2007-09-19 18:51:00) [7]


> Хотя я в вопросе явно вижу поиск альтернативы МедиаПлеер
> и PlaySound().

для проигрывания файлов.


DiamondShark   (2007-09-19 18:49:00) [8]


> Не сподобишься ли привести их, а ?

Непременно, сразу как напомнишь мне, где я в этой ветке употребил что-нибудь вроде:
"прямо таки напрашивается"
"Даже не задумывайся"
"выбор ... еще более очевиден"


> Особенно в явно неизвестных условиях окружения задачи автора

Что не помешало тебе охарактеризовать задачи как "риэлтаймовые".

Хотя я в вопросе явно вижу поиск альтернативы МедиаПлеер и PlaySound(). Это, видимо, такой род паранойи -- вчитываться в вопрос.


> "Несподобнеость", извини уж, буду вынужден трактовать как
> очередной приступ паранойи) ...

Хоть я и не знаю, что такое "Несподобнеость", но так и быть: считай как тебе заблагорассудится.


Сергей М.   (2007-09-19 17:44:00) [9]


> Я тоже ругаццо умею: "MCI".


Это я вижу)

Только вот не вижу я, любезный, тех самых "аргументов" в пользу MCI vs DirectAccess, на коих ты с пеной у рта настаивал, скажем, в ветке про NP vs Sockets)

Не сподобишься ли привести их, а ?
Особенно в явно неизвестных условиях окружения задачи автора ?

"Несподобнеость", извини уж, буду вынужден трактовать как очередной приступ паранойи) ...

p.s.

И не дожидайся, пока сюда заглянет Jeer (с) - с параноиками у него разговор жестче чем у меня)


Сергей М.   (2007-09-19 15:49:00) [10]


> рантаймовые


Пардон, "риэлтаймовые" конечно же.


Сергей М.   (2007-09-19 15:47:00) [11]


> Я тоже ругаццо умею: "MCI"


С чем тебя и поздравляю)

Но ASIO, равно впрочем как и ALSA, изначально "заточены" под такие рантаймовые задачи. В отличие от MCI.


DiamondShark   (2007-09-19 15:23:00) [12]

Вай, какие страшные слова.
Я тоже ругаццо умею: "MCI".


function MciPlayFile(Notify: HWND; const FileName: string): MCIDEVICEID;
var
 mciOpenParams: MCI_OPEN_PARMS;
 mciPlayParams: MCI_PLAY_PARMS;
 r: MCIERROR;
begin
 mciOpenParams.lpstrDeviceType := 'waveaudio';
 mciOpenParams.lpstrElementName := PChar(FileName);

 r := mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE or MCI_OPEN_ELEMENT, DWORD(@mciOpenParams));
 if r <> 0 then raise Exception.Create('O pula MCI_OPEN');

 Result := mciOpenParams.wDeviceID;

 mciPlayParams.dwCallback := Notify;
 r := mciSendCommand(Result, MCI_PLAY, MCI_NOTIFY, DWORD(@mciPlayParams));
 if r <> 0 then raise Exception.Create('O pula MCI_PLAY');
end;


При пользовании главное не забыть:
1. Обработать MM_MCINOTIFY и закрыть девайс
2. Файлы открываются эксклюзивно

Вот так можно пользоваться:


TForm1 = class(TForm)
 ...
 private
   procedure MMMciNotify(var Msg: TMessage); message MM_MCINOTIFY;
 ...
end;

...

procedure TForm1.Button1Click(Sender: TObject);
begin
 MciPlayFile(Handle, 'C:\WINNT\Media\Windows Logoff Sound.wav');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 MciPlayFile(Handle, 'C:\WINNT\Media\Windows Logon Sound.wav');
end;

procedure TForm1.MMMciNotify(var Msg: TMessage);
begin
 mciSendCommand(Msg.LParam, MCI_CLOSE, 0, 0)
end;


Нажимайте попеременно кнопочки, наслаждайтесь параллельным звучанием файлов.
Только не слишком резво, чтоб ошибку открытия не получить ;)
Ну, с этим Вы справитесь. Программировать умеете, да и справка по MCI под рукой.


Сергей М.   (2007-09-18 09:40:00) [13]


> Дельфин   (17.09.07 22:17)


см. DirectSound, ASIO


medved_68   (2007-09-18 08:17:00) [14]

Дельфинпочитай статью "Низкоуровневое программирование звука в Windows" в частности про набор интерфейсных функций звуковых устройств и погляди реализацию юнита mms. :)))


Rial   (2007-09-18 06:42:00) [15]

OpenAL, DirectSound, Bass - коючевые слова для поиска. :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо