Вопрос:
Как заставить TMediaPlayer проигрывать одно и тоже
бесконечно? AVI например?
Ответ:
В примере AVI файл проигрывается снова и снова -
используем событие MediaPlayer'а Notify
Пример:
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
with MediaPlayer1 do
if NotifyValue = nvSuccessful then
begin
Notify := True;
Play;
end;
end;
Вопрос:
Как при проигрывании музыки с Audio CD показывать
сколько прошло минут и секунд?
Ответ:
В примере время выводится по таймеру.
Пример:
uses MMSystem;
procedure TForm1.Timer1Timer(Sender: TObject);
var
Trk : Word;
Min : Word;
Sec : Word;
begin
with MediaPlayer1 do
begin
Trk := MCI_TMSF_TRACK(Position);
Min := MCI_TMSF_MINUTE(Position);
Sec := MCI_TMSF_SECOND(Position);
Label1.Caption := Format('%.2d',[Trk]);
Label2.Caption := Format('%.2d:%.2d',[Min,Sec]);
end;
end;
Ivanuts
Vasiliy 1.11.2001 ivanuts@altavista.net
Чтобы выполнить звук в Вашем приложении,
необходимо воспользоваться функцией API PlaySound.
При этом Вы можете вызывать и проигрывать как
предопределенные системные звуки, так и
собственные (записанные в файлах или
расположенные в определенных ячейках памяти).
Проигрывая звуки, Вы можете также определить
поведение Вашего приложения путем определения
способа проигрывания звука - Синхронно, Асинхронно;
что определяет будет ли выполнение Вашего
приложения остановленно или нет на период
воспроизведения звука.
PlaySound(
pszSound : Variant, // Или имя файла, или
адрес памяти, или константа системного события
hmod : THandle, // Дескриптор источника
звука (должен быть 0, если fdwSound <> SND_RESOURCE
fdwSound : Word // Опция способа
воспроизведения звука
)
Определение флага способа проигрывания звука:
SND_APPLICATION
Выполнение звука, используя специальные
программы, асоциированные с файлами звуков.
SND_ALIAS
Использование в качестве параметра, переменной
события системы из системного реестра или WIN.INI
файла. Не используйте с SND_FILENAME или SND_RESOURCE.
SND_ASYNC
Запуск звука в асинхронном режиме. Для
завершения проигрывания асинхронно запущенного
звука, вызовите PlaySound с набором pszSound равному 0.
SND_FILENAME
Параметр pszSound должен иметь имя файла.
SND_LOOP
Неоднократное выполнение звука до вызова PlaySound с
набором параметров pszSound равному 0. Вы должны
также определить флаг SND_ASYNC, чтобы указать
асинхронное выполнение звука.
SND_MEMORY
Файл звуков события загружен в RAM. Параметр,
определенный pszSound должен указать на источник
звука в памяти.
SND_NODEFAULT
По умолчанию никакое заданное звуковое событие
не используется.
SND_NOSTOP
Определенное звуковое событие переходит к
следующему звуковому событию, которое уже
выполняется. Если звук нельзя выполнить, потому
что ресурс занят, функция немедленно возвращает
FALSE.
Если этот флаг не определен, PlaySound попытается
останавить исполняемый в настоящее время звук
так, чтобы приложение могло использовать новый
звук.
SND_NOWAIT
Если драйвер занят, функция немедленно прекратит
свою работу.
SND_PURGE
Звук может быть приостановлен до последующего
вызова. Если pszSound не 0, все определенные в функции
звуки приостанавливаются.
Вы должны также определить дескриптор звука,
чтобы приостановить события, назначенные SND_RESOURCE.
SND_RESOURCE
Параметр pszSound должен содержать идентификатор
ресурса; hmod должен идентифицировать источник,
который содержит ресурс.
SND_SYNC
Синхронное воспроизведение звукового события.
PlaySound заканчивает свое действие сразу после
завершения события.
В файл MyWave.rc пишешь:
MyWave RCDATA LOADONCALL MyWave.wav
Затем компилируешь
brcc32.exe MyWave.rc, получаешь MyWave.res.
В своей программе пишешь:
{$R MyWave.res}
procedure RetrieveMyWave;
var
hResource: THandle;
pData: Pointer;
begin
hResource:=LoadResource( hInstance, FindResource(hInstance, 'MyWave', RT_RCDATA));
try
pData := LockResource(hResource);
if pData = nil then raise Exception.Create('Cannot read MyWave');
// Здесь pData указывает на MyWave
// Теперь можно, например, проиграть его (Win32):
PlaySound('MyWave', 0, SND_MEMORY);
finally
FreeResource(hResource);
end;
end;