Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Воспроизведение муз. файлов формата ХМ


Автор: Letion 3.8.2010, 11:19
Здравствуйте, Уважаемые программисты! Я воспроизвожу муз.файлы формата *.хм в своей программе. Файлы грузятся из ресурсов. Вот код:
Код

 XMLoadFromRes('File1', 'XM');
 XMPlay;

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

Автор: Snowy 3.8.2010, 11:54
MiniFMOD играет всегда по кругу.
Так что нужно самому ловить момент, когда останавливать.
Если размер мелодии известен заранее, то можно просто выждать нужное время и дать стоп.
Если не известен, то периодически проверяем результат XMGetRow.
По мере воспроизведения эта циферка растёт.
Как только она снова сбрасывается на 0 - значит пошли сначала - нужно стопорить.

Автор: Letion 3.8.2010, 13:05
Цитата(Snowy @ 3.8.2010,  11:54)
периодически проверяем результат XMGetRow.
По мере воспроизведения эта циферка растёт.
Как только она снова сбрасывается на 0 - значит пошли сначала - нужно стопорить.

То есть получается код примерного плана? Просто никогда не работал с XMGetRow:
Код

 XMLoadFromRes('File1', 'XM');
 XMPlay;
if XMGetRow = 0 then XMStop;

Автор: Snowy 4.8.2010, 11:00
XMGetOrder возвращает номер воспроизводимой в данный момент страницы.
Как правило страницы идут по порядку, начиная с 0.
Пример, играем небольшой файлик. Так, из головы беру пример, что будет возвращать XMGetOrder:
0
1
2
3
4
3
4
5
6
0 - вот тут пошёл повтор - цепочка начинается заново
1

Код
var
  i, x: integer;
begin
  XMLoadFromRes('THEME', 'XM'); //загружаем мелодию из ресурса
  XMPlay; // запускаем воспроизведение
  i := -1;
  while i <> 0 do
  begin
    x := XMGetOrder; // текущая страница воспроизведения
    Sleep(100);
    if (x <> 0) or (i >= 0) then i := x; // i = x, если это не первая нулевая страница
  end;
  XMStop;

Автор: Letion 4.8.2010, 11:04
Спасибо! Попробую ближе к вечеру  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)