mciSendString/DirectShow & Midi

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

mciSendString/DirectShow & Midi

Сообщение AstSV » 14.01.2007 (Вс) 15:54

Столкнулся с такими проблемами:
1)Запускаю Миди-файл при помощи mciSendString, останавливаю, и снова запускаю. И оказывается, что при втором запуске часть инструментов теряются!
При этом никакой обвязки нет вообще! Всего три последовательно выполненых команды: Play, Stop и Play. Такая же болезнь и у "родного" MMControl.

И проблема №2
2)Нашёл пример аудио-видеоплеера с DirectShow. Пытаюсь воспроизвести миди-файлы. И всё бы ничего, но вот беда - IMediaPosition возвращает текущее значение в миллисекундах. Подскажите, чего сделать, что бы получить текущию позицию в "родных" для миди-файла единицах?

P.S.: Нужен плеер, способный воспроизводить музыкальные файлы, с полосой прокрутки и что бы при воспроизведении миди "родное время" возвращал.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 14.01.2007 (Вс) 19:31

А теперь найди пример с DirectMusic, в DX SDK.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

AstSV
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 14.01.2007 (Вс) 15:37

Сообщение AstSV » 14.01.2007 (Вс) 20:26

Нашёл. Хороший пример. Что нужно сделать дальше? Там ничего не нашёл о IMediaPosition.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 14.01.2007 (Вс) 23:11

Что возвращает DirectMusicSegment8.GetLength?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

AstSV
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 14.01.2007 (Вс) 15:37

Сообщение AstSV » 14.01.2007 (Вс) 23:37

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

AstSV
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 14.01.2007 (Вс) 15:37

Сообщение AstSV » 14.01.2007 (Вс) 23:48

Вау! С mciSendStrig разобрался! После остановки, перед вторым запуском нужно спозиционировать к началу (seek to start), а затем начать воспроизведение с указанной позиции (play Midi from newPosition).


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

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот, Yandex-бот и гости: 6

    TopList  
cron