Форум программистов, компьютерный форум, киберфорум
Наши страницы

PascalABC.NET

Войти
Регистрация
Восстановить пароль
 
 
Illusive man
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 25
#1

Как можно реализовать плавное затухание музыки при каком-либо событии? - PascalABC.NET

16.04.2016, 19:59. Просмотров 416. Ответов 16
Метки нет (Все метки)

Собственно, вопрос в заголовке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2016, 19:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как можно реализовать плавное затухание музыки при каком-либо событии? (PascalABC.NET):

В каком событии DataGridView можно описать фильтрацию? - C#
Здравствуйте! У меня вопрос, есть ли такое событие у элемента DataGridView в котором модно описать фильтрацию. Мне нужно, чтобы фильтрация...

Плавное затухание label - C#
Здравствуйте. Собственно, суть в сабже. Хочу сделать так, что бы по нажатию кнопки label стал зелёным, а потом плавно пропал.

Как реализовать срабатывание Callback функции при событии? - C++
Совсем запутался. Вот есть у меня callback функция предположим. Она принимает своим параметром другую функцию, в которой прописан нужный...

Плавное появление и затухание формы - Delphi
Ребят облазил все темы, не получается почему то. Вставляю вот этот код: procedure TForm1.FormClose(Sender: TObject; var Action:...

Atmega8 - плавное разгорание/затухание светодиода - AVR
Всем привет! Как же давно я не писала прошивку, а под рукой сейчас по этому вопросу нет примеров. Может кто-то подскажет? Есть...

При каком событии формы в неё загружаются данные? - MS Access
Можно ли до загрузки данных подменить источник? При каком событии записи в форму попадают?

16
Chilipalmer777
14 / 14 / 8
Регистрация: 20.03.2016
Сообщений: 168
17.04.2016, 00:17 #2
в зависимости от события - нужно написать обработчик события...
0
Illusive man
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 25
17.04.2016, 00:26  [ТС] #3
Chilipalmer777, Ну вот, например, у меня есть такой случай. Когда я вызываю следующую процедуру, то нужно, чтобы музыка плавно прекращала звучать и начинала играть другая. Как это сделать?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure Window2; forward;
procedure Window1;
begin
  BackgroundSound := new system.Media.SoundPlayer; 
  BackgroundSound.SoundLocation := 'sounds/BackgroundMusic1.wav';  
  BackgroundSound.Play;
  Pic := Picture.Create(1280, 768);
  Pic.Load('images/1.bmp');
  Pic.Draw(0, 0);
  Btn := new ButtonABC(540, 670, 200, 50, 'Текст кнопки', clWhite); 
  Btn.OnClick += Window2;
end;
 
procedure Window2;
begin
  BackgroundSound.SoundLocation := 'sounds/BackgroundMusic2.wav';  
  BackgroundSound.Play;
end;
0
Cyber_Monster_
125 / 113 / 81
Регистрация: 22.03.2016
Сообщений: 475
17.04.2016, 16:48 #4
Думаю вам нужно посмотреть тут:
https://msdn.microsoft.com/en-us/library/ee663260(v=vs.85).aspx
0
Chilipalmer777
14 / 14 / 8
Регистрация: 20.03.2016
Сообщений: 168
18.04.2016, 07:44 #5
Illusive man, я реализовал "затухание" через использование класса MediaPlayer.
В нем гораздо больше возможностей, чем в SoundPlayer'e.
0
Cyber_Monster_
125 / 113 / 81
Регистрация: 22.03.2016
Сообщений: 475
18.04.2016, 15:18 #6
Цитата Сообщение от Chilipalmer777 Посмотреть сообщение
я реализовал "затухание" через использование класса MediaPlayer.
Вот ссылка, про плеер: https://msdn.microsoft.com/ru-ru/lib...v=vs.110).aspx
0
Illusive man
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 25
18.04.2016, 22:47  [ТС] #7
Исправил свой код на такой:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
uses
  ABCButtons, GraphABC, Events, ABCObjects, PresentationCore in 'PresentationCore.dll';
 
const
  WindowWidth = 1280;
  WindowHeight = 768;
  WindowFixedSize = true;
 
 
var
  Sound: System.Windows.Media.MediaPlayer;  
  Btn1: ButtonABC;
 
procedure init;
begin
  Window.Center;
  SetWindowSize(WindowWidth, WindowHeight);
  CenterWindow;
  SetWindowIsFixedSize(WindowFixedSize);
end;
 
procedure Window2; forward;
 
procedure Window1;
begin
  Sound := new System.Windows.Media.MediaPlayer;
  Sound.Open(new System.Uri('sounds/Music1.wav', System.UriKind.Relative));
  Sound.Play;  //В этом окне начинает звучать первая музыка.
  Btn1 := new ButtonABC(10, 735, 1260, 25, 'Открыть второе окно (Выключить музыку)', clWhite);
  Btn1.OnClick += Window2;
end;
 
procedure Window3; forward;
 
procedure Window2;
begin
  Sound.Stop; //Здесь она останавливается.
  Btn1.Destroy;  
  Btn1 := new ButtonABC(10, 735, 1260, 25, 'Открыть третье окно (Включить вторую музыку)', clWhite);
  Btn1.OnClick += Window3;  //После перехода на третье окно включается вторая.
end;
 
procedure Window3;
begin
  Sound.Open(new System.Uri('sounds/Music2.wav', System.UriKind.Relative)); //вторая музыка
  Sound.Play;
  Btn1.Destroy;  
end;
 
begin
  init;
  Window1;
end.
При нажатии кнопки перехода на второе окно появилась ошибка следующего содержания: "Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток.". Прочёл, что это решается использованием класса Dispatcher, но не разобрался как его применить. Спасибо за помощь.
0
Cyber_Monster_
125 / 113 / 81
Регистрация: 22.03.2016
Сообщений: 475
19.04.2016, 00:15 #8
Цитата Сообщение от Illusive man Посмотреть сообщение
Прочёл, что это решается использованием класса Dispatcher, но не разобрался как его применить.
Предполагаю, что вам необходимо использовать: https://msdn.microsoft.com/ru-ru/library/hh965189(v=vs.110).aspx
0
Illusive man
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 25
22.04.2016, 18:55  [ТС] #9
Cyber_Monster_, А как использовать то? Не понимаю.
0
Cyber_Monster_
125 / 113 / 81
Регистрация: 22.03.2016
Сообщений: 475
22.04.2016, 23:46 #10
Внимание: приведенные ниже догадки могут быть неверны.
Кликните здесь для просмотра всего текста
1) Создаете диспетчер метод - dispatcher.FromThread(Thread)
2) Вызываем метод Yield() для необходимого объекта


Добавлено через 10 минут
Ошибка: вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток.
0
Chilipalmer777
14 / 14 / 8
Регистрация: 20.03.2016
Сообщений: 168
23.04.2016, 00:25 #11
Cyber_Monster_, а я просто в цикле "плавно"(в течение нескольких секунд) уменьшил Volume, да и всё.
Проверено - работает.
0
Cyber_Monster_
125 / 113 / 81
Регистрация: 22.03.2016
Сообщений: 475
23.04.2016, 00:28 #12
Тоже можно)) Прицепить к тику таймера.
0
Illusive man
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 25
23.04.2016, 10:00  [ТС] #13
Chilipalmer777, идея с таймером то ясна, тут другая ошибка. Когда процедуру следующую вызываю, то ошибка вылетает: "Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток."
0
Chilipalmer777
14 / 14 / 8
Регистрация: 20.03.2016
Сообщений: 168
23.04.2016, 21:47 #14
Illusive man, я идею с таймером не давал, я делал проще.
Используя класс MediaPlayer, у меня всё нормально получилось, проблем с потоками не было, т.к. параметр Volume изменялся мною в цикле с определенной задержкой(для "плавности затухания" звука).
0
Illusive man
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 25
24.04.2016, 00:18  [ТС] #15
Chilipalmer777, А не подскажете тогда, почему здесь ошибка вылетает?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
uses
  ABCButtons, GraphABC, Events, ABCObjects, PresentationCore in 'PresentationCore.dll', WindowsBase in 'WindowsBase.dll';
 
const
  WindowWidth = 1280;
  WindowHeight = 768;
  WindowFixedSize = true;
 
var
  Sound: System.Windows.Media.MediaPlayer;  
  Btn1: ButtonABC;
 
procedure init;
begin
  Window.Center;
  SetWindowSize(WindowWidth, WindowHeight);
  CenterWindow;
  SetWindowIsFixedSize(WindowFixedSize);
end;
 
procedure Window2; forward;
 
procedure Window1;
begin
  Sound := new System.Windows.Media.MediaPlayer;
  Sound.Open(new System.Uri('Music1.wav', System.UriKind.Relative));
  Sound.Play;  //В этом окне начинает звучать первая музыка.
  for var i := 100 downto 65 do //до 65 потому что в моём случае музыку уже не слышно на этом уровне
  begin
    Sound.Volume :=  Sound.volume * (i / 100);
    sleep(500); end;
  Sound.stop;
  Btn1 := new ButtonABC(10, 735, 1260, 25, 'Открыть второе окно', clWhite);
  Btn1.OnClick += Window2;
end;
 
procedure Window3; forward;
 
procedure Window2;
begin
  Btn1.Destroy;  
  Btn1 := new ButtonABC(10, 735, 1260, 25, 'Открыть третье окно (Включить вторую музыку)', clWhite);
  Btn1.OnClick += Window3; 
end;
 
procedure Window3;
begin
  Sound.Open(new System.Uri('Music2.wav', System.UriKind.Relative)); //вторая музыка
  Sound.Play;
  Btn1.Destroy;  
end;
 
begin
  init;
  Window1;
end.
0
24.04.2016, 00:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2016, 00:18
Привет! Вот еще темы с ответами:

В каком событии задать активную ячейку для DGV при первичной загрузке? - C#
На форме имеем splitContainer, на одной из панелей (например Panel2) лежит DGV Хочу задать активной определенную ячейку при первичном...

Какие есть способы понять, при каком именно событии возникла ошибка? - MS Access
Экперимент с установкой Access Runtime 2013 параллельно с обычным Access 2007 привел к тому, что при открытии базы в 2007 версии...

Как и в каком событии показывать картинки одну за другой - C#
Есть различный файлы изображения, нужно написать функцию которая будет обновляться и поочереди показывать данныей файлы, своего рода...

Можно ли передать в функцию либо вектор, либо список, если да, то как? - C++
Можно ли передать в функцию либо вектор, либо список, если да, то как?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru