forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   Как проиграть звук один раз? (http://forum.boolean.name/showthread.php?t=3440)

mr.DIMAS 24.05.2007 17:58

Как проиграть звук один раз?
 
В: Как проиграть звук один раз?
О: Легко! Достаточно создать переменную звука и переменную для звукового канала и присвоить каналу нужный для проигрывания звук. Делается это так:

Код:


sound=LoadSound("s.wav");Загружаем в переменную звук
Local channel_sound; Создаем канал для звука
If ChannelPlaying(channel_sound)=0 Then channel_sound=PlaySound(sound)

Поясняю как все это работает:
1) Создается переменная в которую загружается звук.

2) Затем объявляется переменная для звукового канала, переменная может быть и Local и Global в зависимости от того как и где вы хотите использовать канал.

3) Далее конструкцией If мы проверяем действительно ли канал находится вне проигрывания звука, если это так то присваиваем каналу проигранный звук.
Тем самым мы можем добится того что звук не будет проигрыватся раньше чем канал закончит его проигрывать, и не будет эффекта эхо за проигранным звуком.
Надеюсь все понятно.

Если что НЕ понятно то напишите сдесь, разъясню.

Надеюсь чем-то кому нибудь помог.

Diplomat 24.05.2007 20:48

Re: Как проиграть звук один раз?
 
Молодец. Желаение помогать другим похвально.

Необходимо тем не менее внести полную ясность в вопрос.

0. Чтоб проиграть звук один раз, достаточно один раз вызвать
PlaySound( ХендлЗагруженноговЗвука ) - и ничего более

1. Если речь идёт о размещении конструкции
[blitz]If ChannelPlaying(channel_sound)=0 Then channel_sound=PlaySound(sound)[/blitz] в цикле (зацикленные музыкальные отрывки, стрельба очередями, звук двигателя и т.п.) то термин "один раз" здесь очевидно не вполне уместен.

2. Если нужно просто и незамысловато зациклить звук, можно сделать это интуитивно: командой LoopSound()

3. Наконец, если LoopSound() не обеспечивает необходимой тактической гибкости, то вызывать ChannelPlaying() следует не слишком часто, т.к. это неизбежно приведет к жутЬким тормозам.

4. В итоге, конструкция приобретает приблизительно такой вид:
[blitz]
...
IF CheckChannelDelay<Millisecs() THEN
CheckChannelDelay=Millisecs()+DelayInMillisecs
IF ChannelPlaying(channel_sound)=False THEN channel_sound=PlaySound(sound)
END IF
...[/blitz]

P.S. Мы не упоминаем возможность циклить что-либо с помощью PlayMusic() вследствие нестабильности и тормозности сей команды.

mr.DIMAS 24.05.2007 22:42

Re: Как проиграть звук один раз?
 
Цитата:

Необходимо тем не менее внести полную ясность в вопрос.
Да я немного закрутил. Но спасиб за дополнение


Часовой пояс GMT +4, время: 18:40.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot