MIDI без тормозов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
HiddenMan
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 13.12.2006 (Ср) 20:58
Откуда: от туда

MIDI без тормозов

Сообщение HiddenMan » 17.06.2009 (Ср) 20:21

Здравствуйте.
Такая проблема: во время работы программы нужно проиграть миди, но в этот момент прога немного подвисает (секунды на полторы), что нежелательно.

Вопрос: как этого можно избежать?

Код: Выделить всё
i = mciSendString("close mid1", 0&, 0, 0)
i = mciSendString("open " & FileName & " type sequencer alias mid1", 0&, 0, 0)
i = mciSendString("status mid1 length", Mssg, 255, 0)
i = mciSendString("play mid1 from 0", 0&, 0, 0)

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: MIDI без тормозов

Сообщение JohnK » 18.06.2009 (Чт) 22:13

Нужно смотреть весь код, может у тебя там что-то подвисает.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

HiddenMan
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 13.12.2006 (Ср) 20:58
Откуда: от туда

Re: MIDI без тормозов

Сообщение HiddenMan » 18.06.2009 (Чт) 22:25

Задержка происходит точно после i = mciSendString("open " & FileName & " type sequencer alias mid1", 0&, 0, 0)
С уважением, я.

HiddenMan
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 13.12.2006 (Ср) 20:58
Откуда: от туда

Re: MIDI без тормозов

Сообщение HiddenMan » 18.06.2009 (Чт) 22:30

Может как то в отдельном потоке это всё реализовать :/ только ходят слухи, что у VB6 проблемы с потоками.
С уважением, я.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: MIDI без тормозов

Сообщение iGrok » 18.06.2009 (Чт) 22:44

HiddenMan писал(а):Может как то в отдельном потоке это всё реализовать :/ только ходят слухи, что у VB6 проблемы с потоками.

Простое решение: А почему бы тебе не вынести загрузку midiшек в самое начало, а когда надо просто сделать play ?
label:
cli
jmp label

HiddenMan
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 13.12.2006 (Ср) 20:58
Откуда: от туда

Re: MIDI без тормозов

Сообщение HiddenMan » 18.06.2009 (Чт) 22:52

Дело в том, что их несколько и они должны включаться одна за другой в случайном порядке в то время как юзер остервенело долбит по клавишам.
С уважением, я.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: MIDI без тормозов

Сообщение JohnK » 18.06.2009 (Чт) 23:05

А что тебе подгрузить их все в начале, я думаю альясов придумать не составит особого труда.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

HiddenMan
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 13.12.2006 (Ср) 20:58
Откуда: от туда

Re: MIDI без тормозов

Сообщение HiddenMan » 18.06.2009 (Чт) 23:19

надо бы попробовать...
спасибо за наводку :)
С уважением, я.

HiddenMan
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 13.12.2006 (Ср) 20:58
Откуда: от туда

Re: MIDI без тормозов

Сообщение HiddenMan » 19.06.2009 (Пт) 0:04

Да ужжж!
Загружается она конечно как большая :)
(секунд 15)
но зато музыки переключаются уже без тормозов, что и требовалось.

Товарищи iGrok и JohnK, ещё раз БОЛЬШАЯ СПАСИБА :)
С уважением, я.

vladikcomper
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 18.03.2009 (Ср) 17:13

Re: MIDI без тормозов

Сообщение vladikcomper » 19.06.2009 (Пт) 23:01

А зачем вообще ждать? Есть способ воспроизведения MIDI без зависаний.
Есть библиотека quartz.dll, которая если не ошибаюсь является DirectShow. Она позволяет воспроизводить WAV, WMA, MP3 и MIDI, без каких-либо зависаний.
Работать с ней просто. Вот моя статья про ее использование:
http://vladikcomper.narod.ru/prog_codes_view.htm?23

HiddenMan
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 13.12.2006 (Ср) 20:58
Откуда: от туда

Re: MIDI без тормозов

Сообщение HiddenMan » 20.06.2009 (Сб) 22:33

Влад, статью я почитал, вот только я не знаю входит эта либа в стандартную комплектацию вин98 или нет, короче не проверял ещё.
А всё таки как она работает? Видимо есть какой то более продвинутый способ проиграть миди чем юзать mciSendString :\
Что это за способ?
Кто знает?
С уважением, я.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: MIDI без тормозов

Сообщение iGrok » 20.06.2009 (Сб) 23:05

HiddenMan писал(а):Влад, статью я почитал, вот только я не знаю входит эта либа в стандартную комплектацию вин98 или нет, короче не проверял ещё.
А всё таки как она работает? Видимо есть какой то более продвинутый способ проиграть миди чем юзать mciSendString :\
Что это за способ?
Кто знает?

quartz.dll есть в win98. Работу не проверял, но она есть, и VB с ней работать может.

З.Ы. А способ этот - как раз юзать quartz.dll. )
Либо, если копать глубже, разбирать midi-файлы "по нотам", и отдавать соответствующие команды драйверу синтезатора.
label:
cli
jmp label

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: MIDI без тормозов

Сообщение Proxy » 20.06.2009 (Сб) 23:21

Если не секрет: для чего ориентироваться на совместимость с Win98? Она ещё где-то юзабельна?
Follow the white rabbit.

HiddenMan
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 13.12.2006 (Ср) 20:58
Откуда: от туда

Re: MIDI без тормозов

Сообщение HiddenMan » 21.06.2009 (Вс) 0:07

Win98? Она ещё где-то юзабельна?

Кое где люди ещё с 95 не слезли :)))
С уважением, я.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: MIDI без тормозов

Сообщение Proxy » 21.06.2009 (Вс) 21:56

Можно доверить воспроизведение midi отдельному процессу (это как временное решение). Написать параллельный exe проект для воспроизведения midi, создать одно единственное окно (это временное решение, повторяюсь) в нём, и через сообщения организовать начало воспроизведения той или иной midi, закрытия вспомогательной программы. Если вспомогательно приложение ещё не загрузилось - оно просто не отреагирует на сообщение, никаких подвисаний не будет.
Follow the white rabbit.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: MIDI без тормозов

Сообщение iGrok » 21.06.2009 (Вс) 23:09

Proxy писал(а):Можно доверить воспроизведение midi отдельному процессу (это как временное решение). Написать параллельный exe проект для воспроизведения midi, создать одно единственное окно (это временное решение, повторяюсь) в нём, и через сообщения организовать начало воспроизведения той или иной midi, закрытия вспомогательной программы. Если вспомогательно приложение ещё не загрузилось - оно просто не отреагирует на сообщение, никаких подвисаний не будет.

Бррррр.. Зачем???? 0_O
Куда тебя понесло вообще?
Приемлемое решение же уже дано. Даже нормальное, правильное решение уже дано. Зачем ты этого монстра предлагаешь?
label:
cli
jmp label

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: MIDI без тормозов

Сообщение Proxy » 22.06.2009 (Пн) 10:17

Просто пока разбираешься с quartz.dll можно как временное(!) решение сделать вот так.

Кстати: где можно почитать про работу с MIDI-набором аудиокарты? Точней как опросить карту о имеющихся наборах, открыть канал и передать некоторую последовательность нот (тон/дилэй) на воспроизведение (несколько стримов). Поиск что-то не сильно помог (не знаю как корректно запрос сформулировать).
Follow the white rabbit.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: MIDI без тормозов

Сообщение Mikle » 22.06.2009 (Пн) 10:35

Можно воспроизводить через DirectMusic, тогда доступен выбор миди синтезатора, в том числе аппаратного, если есть. А по умолчанию воспроизводится через MS Sinth, он звучит довольно прилично и, главное, на всех звучках одинаково. Вот пример:
Вложения
midi.zip
(11.6 Кб) Скачиваний: 70

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: MIDI без тормозов

Сообщение Proxy » 22.06.2009 (Пн) 10:55

Спасибо, посмотрю.
Follow the white rabbit.

vladikcomper
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 18.03.2009 (Ср) 17:13

Re: MIDI без тормозов

Сообщение vladikcomper » 23.06.2009 (Вт) 1:15

Mikle писал(а):Можно воспроизводить через DirectMusic

Ну, это думаю, лишнее.
1) Уменьшится совместимость. Например, в DirectX11 нет файлов dx7vb.dll и dx8vb.dll, при попытке их установить и зарегистрировать, система выдает ошибку. Проверено на Windows 7 RC.
2) DirectMusic, может, хорош в играх, для полноценного использования DirectX. Но он синтезирует музыку через Программный синтезатор, что звучит не всегда хорошо (это, конечно, мягко сказано).
3) А Quartz.dll он есть, был и будет. И в Вин98, и Вин7. К тому же сам могучий Windows Media Player его юзает. :wink:
Последний раз редактировалось vladikcomper 23.06.2009 (Вт) 23:10, всего редактировалось 1 раз.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: MIDI без тормозов

Сообщение Mikle » 23.06.2009 (Вт) 15:10

vladikcomper писал(а):нет файлов dx7vb.dll и dx8vb.dll, при попытке их установить и зарегистрировать, система выдает ошибку. Проверено на Windows 7 RC.

А у меня без проблем на Win7 dx8vb.dll зарегистрировалась.
vladikcomper писал(а):Но он синтезирует музыку через Программный синтезатор, что звучит все всегда хорошо

Он позволяет выбрать любой синтезатор.
vladikcomper писал(а):А Quartz.dll он есть, был и будет.

Ничего против него не имею.

vladikcomper
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 18.03.2009 (Ср) 17:13

Re: MIDI без тормозов

Сообщение vladikcomper » 23.06.2009 (Вт) 23:29

Mikle писал(а):А у меня без проблем на Win7 dx8vb.dll зарегистрировалась.

Я пытался зарегистрировать dx7vb.dll - не получилось, решил тогда, что и dx8vb.dll не пойдет.
Как бы то ни было, DMusic - не совсем подходящий вариант.
Quartz.dll - универсальнее и мощнее, он поддерживает больше форматов, работать с ним проще.
Я тоже ничего не имею против DMusic, просто есть способ проще и лучше.
Впрочем, пускай HiddenMan сам выбирает, мы предложили ему способы.

P.S.: Извиняюсь за свою жуткую ошибку:
Я написал:
Но он синтезирует музыку через Программный синтезатор, что звучит все всегда хорошо

Вместо:
Но он синтезирует музыку через Программный синтезатор, что звучит не всегда хорошо

Про возможность выбора синтезатора не знал, я бросил изучение DMusic на начальных стадиях, после неудачного переноса одного примера в мою игру.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 70

    TopList