среда, 23 сентября 2009 г.

Звук: медиаплеер

Одним из классических примеров при изучении программирования является медиаплеер. Но поскольку это не учебник, а блог, то до проигрывания звука в hiasm мы добрались только сейчас. С точки зрения практики, не думаю, что кто-то станет реально делать медиаплеер даже для себя, потому что их навалом в Интернете. Однако познакомиться с проигрыванием звука в hiasm будет очень полезно.

На панели компонентов есть целая вкладка "Мультимедиа", на которой находятся все инструменты для проигрывания звука в программе. Есть простые компоненты типа MediaPlayer или PlaySound, которые не позволяют гибко управлять звуком. Есть и профессиональные инструменты BASS, которые представлены множеством компонентов.

Здесь мы рассмотрим только несложные компоненты, потому что если рассматривать BASS, то пост получится ну очень большой, и вы, скорее всего, просто устанете.

Начнём работу со звуком с рассмотрения второго компонента на вкладке "Мультимедиа" - PlaySound. Он может только запустить звук WAV на проигрывание. Другие форматы компонент не понимает, других функций для звука тоже нет. Этот компонент хорош, если нужно просто издать какой-либо звук в программе, не более.



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

Также следует обратить внимание на параметр PlayType. Это - максимально возможное управление звуком. Например, можно зациклить проигрывание или сделать программу недоступной, пока звук проигрывается.

Ну а в параметр Sound можно загрузить звук, тогда имя файла будет не нужно, ведь такой звук будет сохраняться в самой программе и проигрываться из неё.

Теперь рассмотрим более сложный компонент - MediaPlayer (самый первый на вкладке "Мультимедиа"), в котором уже можно задавать позицию проигрывания, останваливать и приостанавливать проигрывание. Но этот компонент не позволяет сохранить в программе звук, а может проигрывать только из файла. Зато поддерживаются целых три формата звуковых файлов и даже видеоформат AVI!



Вам остаётся лишь проиписать имя файла в параметре FileName или подать его на точку данных FileName. А дальше - нажимать кнопки управления.

Когда дело доходит до установки позиции, то хочется, чтобы было так, как в стндартных проигрывателях: был ползунок, с помощью которого можно установить позицию. И для этого вам придётся познакомиться с новыми компонентами.

Во-первых, ползунок. Для примера взят тот, который находится в групее "Графические" на вкладке "Интерфейс". Если вы не можете его найти, то скопируйте код в hiasm (он будет немного ниже).

Ещё нам понадобится таймер, потому что у компонента MediaPlayer нет события, происходящего при изменении позиции проигрывания. У него есть только нижняя точка Position, с которой нужно регулярно снимать данные.
Таймер находится на вкладке "Контролы".

Ну и, конечно, нам понадобятся компоненты-инструменты (вкладка "Инструменты"). Какие и сколько - пока неизвестно. Как правило, это определяется при составлении схемы.
Итак, приступим.



Здесь, как вы видите, кнопки запуска и останова теперь не только запускают или останавливают проигрывание. При запуске сначала запускается проигрывание, но сразу же после этого устанавливается максимально возможное значение ползунка (точка doMax выведена из параметра Max) и включается таймер (интервал задани в его параметре Interval в миллисекундах). Важно при установке таймера на рабочее поле не забыть изменить его параметр Enable на False, иначе включаться он будет автоматически при запуске программы, а нам нужно только при запуске проигрывания.

Каждую секунду при проигрывании ползунок меняет своё положение в соответстсвии с текущей позицией проигрывания. А после остановки (хоть кнопкой "стоп", хоть по событию onEndPlay компонента MediaPlayer) таймер отключается.

Ну а при передвижении ползунка устанавливается позиция проигрывания. Причём параметр ползунка ScrollMode установлен в Up, чтобы позиция устанавливалась только после отпускания мыши над компонентом, а не при каждом его перемещении.

Напоследок рассмотрим компоненты для изменения громкости звука. Их два: Volume и VolControl. Первый устанавливает громкость звука во всей операционной системе Windows, а второй - громкость отдельных устройств.



При входе в программу сразу считывается громкость обоих каналов и выдаётся на ползунки (правда, они другой формы, потому что это уже не тот компонент, что мы использовали ранее). А затем с помощью ползунков можно установить громкость. Она берётся отдельно для левого и правого каналов, значение передаётся через точки свойства-данные. Помните, что максимальное значение громкости тут - 65535, и ползунки рассчитаны на такое.

Ну а с VolControl удобнее всего работать через массивы. У него есть две точки свойств: Volume и Mute. Первая содержит массив громкостей устройств, вторая - массив состояний (вкл/выкл). Ну а сами устройства можно посмотреть в параметре Device.



В этом примере происходит сбор всех значений громкостей и вывод в список.

5 комментариев:

  1. Ценная страничка, особенно в первой части. Можно запросто озвучить любую программу, причем звук спрятать внутри.

    ОтветитьУдалить
  2. Здравствуйте! У меня вопрос по компоненту MediaPlayer! Как пользоваться точкой данных FileName? Как вытащить от туда имя проигрываемого файла на надпись Label, ну или куда нибудь?

    ОтветитьУдалить
  3. С точки данных нельзя ничего считать, на неё можно только передать имя файла. Чтобы вывести имя файла на надпись, можно сделать так.

    ОтветитьУдалить
  4. А как быть с видео?

    ОтветитьУдалить
    Ответы
    1. Для видео нужно просто указать идентификатор окна, куда будет выводиться видео, а все функции компонента работают и с видео.

      Удалить