Форум программистов, компьютерный форум, киберфорум
Наши страницы
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Illusive man
0 / 0 / 1
Регистрация: 10.09.2015
Сообщений: 29
#1

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

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

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

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

Плавное затухание светодиода
Плавное затухание светодиода с использованием таймера(ну или ШИМ) для МК...

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

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

Плавное появление и затухание формы
Ребят облазил все темы, не получается почему то. Вставляю вот этот код:...

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

16
Chilipalmer777
14 / 14 / 11
Регистрация: 20.03.2016
Сообщений: 168
17.04.2016, 00:17 #2
в зависимости от события - нужно написать обработчик события...
0
Illusive man
0 / 0 / 1
Регистрация: 10.09.2015
Сообщений: 29
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_
128 / 116 / 150
Регистрация: 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 / 11
Регистрация: 20.03.2016
Сообщений: 168
18.04.2016, 07:44 #5
Illusive man, я реализовал "затухание" через использование класса MediaPlayer.
В нем гораздо больше возможностей, чем в SoundPlayer'e.
0
Cyber_Monster_
128 / 116 / 150
Регистрация: 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 / 1
Регистрация: 10.09.2015
Сообщений: 29
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_
128 / 116 / 150
Регистрация: 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 / 1
Регистрация: 10.09.2015
Сообщений: 29
22.04.2016, 18:55  [ТС] #9
Cyber_Monster_, А как использовать то? Не понимаю.
0
Cyber_Monster_
128 / 116 / 150
Регистрация: 22.03.2016
Сообщений: 475
22.04.2016, 23:46 #10
Внимание: приведенные ниже догадки могут быть неверны.
Кликните здесь для просмотра всего текста
1) Создаете диспетчер метод - dispatcher.FromThread(Thread)
2) Вызываем метод Yield() для необходимого объекта


Добавлено через 10 минут
http://www.cyberforum.ru/wpf-silverlight/thread306685.html
0
Chilipalmer777
14 / 14 / 11
Регистрация: 20.03.2016
Сообщений: 168
23.04.2016, 00:25 #11
Cyber_Monster_, а я просто в цикле "плавно"(в течение нескольких секунд) уменьшил Volume, да и всё.
Проверено - работает.
0
Cyber_Monster_
128 / 116 / 150
Регистрация: 22.03.2016
Сообщений: 475
23.04.2016, 00:28 #12
Тоже можно)) Прицепить к тику таймера.
0
Illusive man
0 / 0 / 1
Регистрация: 10.09.2015
Сообщений: 29
23.04.2016, 10:00  [ТС] #13
Chilipalmer777, идея с таймером то ясна, тут другая ошибка. Когда процедуру следующую вызываю, то ошибка вылетает: "Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток."
0
Chilipalmer777
14 / 14 / 11
Регистрация: 20.03.2016
Сообщений: 168
23.04.2016, 21:47 #14
Illusive man, я идею с таймером не давал, я делал проще.
Используя класс MediaPlayer, у меня всё нормально получилось, проблем с потоками не было, т.к. параметр Volume изменялся мною в цикле с определенной задержкой(для "плавности затухания" звука).
0
Illusive man
0 / 0 / 1
Регистрация: 10.09.2015
Сообщений: 29
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
Chilipalmer777
14 / 14 / 11
Регистрация: 20.03.2016
Сообщений: 168
24.04.2016, 00:39 #16
Illusive man, я делал так:
Pascal
1
2
3
4
5
 Player.Play(); {Воспроизводим файл}
  while player.Volume<>0 do begin
   sleep(1000);
   player.Volume -= 0.1; // или так: player.Volume := player.Volume - 0.1;
  end;
При необходимости можешь поменять значение в Sleep на то которое тебе больше подходит.
0
Cyber_Monster_
128 / 116 / 150
Регистрация: 22.03.2016
Сообщений: 475
24.04.2016, 01:33 #17
Цитата Сообщение от Illusive man Посмотреть сообщение
А не подскажете тогда, почему здесь ошибка вылетает?
Думаю существует несколько решений:
1) Можно попробовать передать плеер по параметру в функцию. (Window3)
2) Может просто ввести два плеера и на каждый по дорожке.
0
24.04.2016, 01:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2016, 01:33
Привет! Вот еще темы с решениями:

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

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

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

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


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

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

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