Универсальный проигрыватель WinMedia
Универсальный проигрыватель WinMedia
- Содержание
- Введение.
- 1 Разработка системного проекта.
- 1.1 Назначение разработки.
- 1.2 Требования к функциональным характеристикам.
- 1.3 Требования к надежности и безопасности.
- 1.4 Требования к составу и параметрам технических средств.
- 1.5 Требования к информационной и программной совместимости.
- 2 Разработка технического проекта.
- 2.1 Построение диаграммы потоков данных.
- 2.2 Проектирование модели данных.
- 2.3 Детальное проектирование программного обеспечения.
- 3 Реализация.
- 3.1 Обоснование выбора средств разработки.
- 3.2 Описание основных программных модулей.
- 4 Тестирование программного продукта.
- Заключение.
- Приложение А
- Приложение Б.
- Библиография.6
- Введение
- На сегодняшний день деятельность людей всё в большей степени зависит от их информированности, способности эффективно использовать информацию. Наступило время, когда профессионал - юрист, инженер, экономист, социолог, журналист - уже с трудом справляются с потоком информации. Специалисту, чтобы на должном уровне выполнять свои обязанности, необходимы инструментарии и методология его применения для обработки информации. Это сравнимо с использованием средств передвижения: человек может пешком преодолевать любое расстояние, но современный темп жизни просто немыслим без применения автомобиля, поезда, самолёта и т.д. То же самое происходит в области информации: теоретически человек может сам переработать без компьютера любую информацию, но сделает это эффективнее с использованием специальных компьютерных технологий.
- Развитие эффективных способов воспроизведения музыкальной информации(без потери качества) тоже не стояло на месте: появившиеся виниловые пластинки были вскоре заменены на магнитные кассеты, последние в свою очередь быстро сменились оптическими дисками. Все это никак несмогло обойти персональный компьютер. Существует множество форматов хранения музыки и видео(mp3,wav,avi самые популярные из них). В данном курсовом проекте создается программа Универсальный проигрыватель Win media для воспроизведения аудио-, видео-форматов на компьютере.
- 1 Разработка системного проекта
- 1.1 Назначение разработки
Универсальный проигрыватель Win media позволяет воспроизвести аудио-, видео-форматы, вести мультимедиа библиотеку, сохранять плейлисты. Проигрыватель обладает интуитивно понятным интерфейсом и прост в эксплуатации. На рисунке 1 Программа представлена виде начальной контекстной диаграммы потоков данных:
Рисунок 1 - Диаграмма потоков данных
1.2 Требования к функциональным характеристикам Универсальный проигрыватель Win media должен воспроизводить популярные мультимедиа форматы (wav, mp3, mpg, wma, avi, mpeg). После запуска программы необходимо указать необходимый мультимедиа файл с помощью окна открытия файла либо указать плейлист. Открытые файлы записываются в плейлист и сохраняются на жесткий диск. В последствии можно будет вновь загрузить сохраненный плейлист. 1.3 Требования к надежности Универсальный проигрыватель Win media должен корректно воспроизводить мультимедиа файлы и бесперебойно работать на протяжении всего сеанса работы(воспроизведение мультимедиа файла) 1.4 Требования к составу и параметрам технических средств Для нормального функционирования Универсальный проигрыватель Win media необходима следующая минимальная конфигурация ПК: - частота процессора: 800 Мгц - объем оперативной памяти: 64 мб - необходимый объем свободного дискового пространства: 10 мб и размер базы данных. - разрешение монитора: 800x600 - наличие CD-ROM или FDD. 1.5 Требования к информационной и программной совместимости Данная программа предназначена для работы в следующих операционных системах: Windows 98 SE/2000/XP. 2. Разработка технического проекта 2.1 Построение диаграммы потоков данных Целью построения диаграммы потоков данных является отображение процессов существующих в системе и связи между этими процессами, а так же процесс преобразования входных данных в выходной результат. Основные элементы диаграммы потоков данных: - Внешняя сущность - представляющая собой материальный предмет или физическое лицо, который является источником или приемником данных. Определение некоторого объекта в качестве внешней сущности указывает на то, что она находится за пределами границ анализируемой ИС. - Система и подсистема. При построении модели сложной ИС она может быть представлена в самом общем виде на так называемой контекстной диаграмме в виде одной системы как единого целого, либо может быть декомпозирована на ряд подсистем. - Процесс - представляет собой преобразование входных потоков данных в выходные в соответствии с определенным алгоритмом. Физически процесс может быть реализован различными способами: это может быть подразделение организации, выполняющее обработку входных документов и выпуск отчетов, программа, аппаратно реализованное логическое устройство и т.д. - Накопитель данных - представляет собой абстрактное устройство для хранения информации, которую можно в любой момент поместить в накопитель и спустя некоторое время извлечь, причем способы помещения и извлечения могут быть любыми. Накопитель данных может быть реализован физически в виде таблицы в оперативной памяти, файла на магнитном носителе и т.д. Накопитель данных в общем случае является прообразом базы данных и описание хранящихся в нем данных должно быть увязано с информационной моделью. - Поток данных - определяет информацию, передаваемую через некоторое соединение от источника к преемнику. Реальный поток данных может быть информацией, передаваемой по кабелю между двумя устройствами, пересылаемыми по почте письмами, магнитными лентами или дискетами, переносимыми с одного компьютера на другой и т.д. Внешними сущностями в Универсальном проигрывателе Win media являются медиа файл, пользователь и сам плеер. Задачей пользователя является: указание мультимедиа файла (процесс 1.2), занесение фалов в мультимедиа библиотеку(процесс 1.3). Задачей плеера является открытие мультимедиа файла(процесс 1.5) и его воспроизведение (процесс 1.10). При открытии пользователем нового файла автоматически создается плейлист. При добавлении пользователем файла в мультимедиа библиотеку информация о файле записывается в библиотеку. Впоследствии файлы из базы данных можно добавить в текущий плейлист. Диаграмма потоков данных изображена на рисунке 2. 2.2 Проектирование модели данных На основании диаграммы потоков данных строится концептуальная модель данных. В ней отображается подробное описание структуры данных, связи между объектами данных, структура этих связей. Структура модели данных универсального проигрывателя Win media: Таблица “библиотека мультимедиа файлов” - содержит информацию о добавленных в библиотеку мультимедиа файлах Поле “Код” - уникальный идентификатор записи таблицы (ключевое поле) Поля “ Название композиции”, “Исполнитель”, “Альбом” - имеют строковый тип и используются для хранения Названия композиции, Исполнителя и альбома мультимедиа файла. Поле “Жанр” имеет целочисленный тип и используется для хранения кода жанра к которому принадлежит композиция. Таблица “Жанры” - содержит перечень жанров. Поле “Код” - уникальный идентификатор каждой записи таблицы (ключевое поле) Поле “Жанр” - имеет строковый тип и содержит наименование жанра. Модель данных универсального проигрывателя Win media изображена на рисунке 3. 2.3 Детальное проектирование программного обеспечения Программа состоит из нескольких основных окон: Главного окна (в которой производится воспроизведение аудио файлов) и Видео окна (в которой производится воспроизведение видео фалов). На рисунке 4 представлена главная форма программы для воспроизведения аудио файлов Рисунок 4 - Форма приложения для воспроизведения аудио файлов. На рисунке 5 представлена форма программы для воспроизведения видео файлов Рисунок 5 - Форма приложения для воспроизведения видео файлов. На рисунке 6 представлена диаграмма последовательностей экранных форм. Символом 1 обозначено действие по вызову главной формы. Символом 2 обозначено действие по вызову файла справочной системы, для получения какой-либо справочной информации по программе. Символом 3 обозначено действие по вызову формы , отображающей сведения о программном продукте. Символом 4. действие по завершению работы программы На рисунке 7 представлена форма программы для редактирования/создания/сохранения плейлистов. Рисунок 7 - Форма приложения для редактирования/создания/сохранения плейлистов. На рисунке 8 представлена форма программы для изменение настроек проигрывателя. Рисунок 8 - форма программы для изменение настроек проигрывателя. 3. Реализация 3.1 Обоснование выбора средств разработки Для написания курсового проекта, я выбрал систему программирования Delphi 7.0. Delphi - объектно-ориентированная, визуальная среда программирования, относящаяся к классу RAD - (Rapid Application Development _ «Средство быстрой разработки приложений») средств CASE - технологии. Delphi сделала разработку мощных приложений быстрым процессом. При проектировании программы и добавлении на форму новых компонентов Delphi автоматически заносит необходимый программный код в модуль программы и подключает соответствующие библиотеки, избавляя разработчика от рутинной работы и позволяя сосредоточиться на написании Отличительной особенностью Delphi является богатая библиотека визуальных компонентов (VCL). Эта библиотека объектов включает в себя стандартные объекты построения пользовательского интерфейса, объекты управления данными, графические объекты, объекты мультимедиа, диалоги и объекты управления файлами. Еще Delphi позволяет добавить различные сторонние компоненты созданные сторонними разработчиками. В данной программе использовался компонент MMTOOL версии 7.0. Этот компонент позволяет облегчить создание программы для работы со звуком/видео. Так же плюсом в пользу использования Delphi является удобный отладчик, который позволяет анализировать работу программы во время ее исполнения. С его помощью можно последовательно выполнять отдельные операторы исходного текста последовательно, наблюдая при этом, как меняются значения различных переменных. 3.2 Описание основных программных модулей На рисунке 9 представлен алгоритм открытие файла Символом 1 обозначено начало процедуры. Символом 2 обозначены операторы открытия файла. Символом 3 обозначен оператор условия принадлежности мультимедиа файла к видео файлу. Символом 4 обозначен оператор воспроизведения файла в главной форме при значении «нет» в цикле под номером 3. Символом 5 обозначен оператор открытия файла в специальной форме для видео файлов при значении «да» в цикле под номером 3. Символом 5 обозначен оператор выхода из программы
На рисунке 10 представлен алгоритм занесения файла в библиотеку Символом 1 обозначено начало процедуры. Символом 2 обозначен открытие файла Символом 3 обозначен цикл с предусловием выдающий запрос записывать ли файл в базу данных. Символом 4 обозначен оператор, читающий информацию о файле. Символом 5 обозначен условный оператор, заносящий полученную информацию в библиотеку. Символом 6 обозначен оператор выхода из процедуры.
4 Тестирование программного продукта Целью проведения тестирования является проверка правильности работы универсального проигрывателя Win Media. Тестирование программы проводилось по мере написания ее модулей в процессе отладки, при стыковке написанных модулей и после окончания написания программы. Тестирование программы осуществлялось на следующей аппаратной платформе: Процессор: 2 Ггц Объем оперативной памяти 512 Мб Размер свободного дискового пространства 500 Мб Для тестирования программы использовались операционные системы: Windows XP SP2. Тестирование программы проводилось в следующем порядке: 1. Проверка соответствия программы техническому заданию. При этом проверялось наличие и корректность выполнения программой функций описанных в техническом задании. 2. Проверка правильности выполнения вычислений. Для этого вычисления были предварительно рассчитаны вручную, а после сверены с результатами программы. 3. Проверка работы программы с граничными значениями. Для этого при работе программы вводились граничные данные, на что в ответ от программы были получены сообщения о некорректности введенных данных и просьбе ввести их заново. 4. Определение времени выполнения программой расчетов. При этом тестировались наиболее ресурсоемкие задачи - непосредственное проведение тестирования и построение отчетов. При этом программа показала хорошие показатели. 5. Проверка защищенности данных с которыми оперирует программ от посторонних пользователей. При этом использовались попытки выполнить действия приводящие и изменениям данных: редактирование, удаление. В ответ на эти действия программа предлагала ввести пароль. При ложном вводе пароля программа отказывала в доступе на модификацию данных. 6. Проверка работы всех пунктов меню и вызова всех экранных форм. При этом были проверены пункты меню на соответствие функций выполняемых ими их описанию. 7. Проверка работы программы на компьютерах различной конфигурации. Помимо указанной выше тестовой конфигурации программа была протестирована на следующей платформе: - Процессор: 1200 Мгц - Объем оперативной памяти 256 Мб - Размер свободного дискового пространства 300 Мб - Для тестирования программы использовалась операционная система: Windows 2000. Заключение На курсовое проектирование мне была предложена задача: создание Универсального проигрывателя win media При разработке программного продукта была изучена предметная область для данной задачи, выявлены информационные потоки, на основании которых была построена диаграмма потоков данных. Универсальный проигрыватель win media позволяет: - Воспроизводить мультимедиа файлы различных форматов. - Создавать плейлисты. - Вести базу данных мультимедиа файлов. Приложение А (обязательное) Листинг программы. Программа RadLe unit UMain; interface uses Windows, Messages, ShellAPI, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Buttons, ComCtrls, StdCtrls, ExtCtrls, Menus, MMSystem, MMUtils, MMAbout, MMObj, MMDSPObj, MMWaveIO, MMMPType, MMMPEG, MMDesign, MMWavOut, MMDIBCv, MMLevel, MMConect, MMSpectr, MMHTimer, MMSlider, MMLEDS, MMPanel, MMSpin, MMLEDLbl, MMButton, MMWave, MMLabel, MMVolume, MMHook, MMPitch, MMAudio, MMWheel, MMAVI; type TMainForm = class(TForm) OpenDialog: TOpenDialog; WaveOut: TMMWaveOut; MMDesigner1: TMMDesigner; MMConnector1: TMMConnector; HiTimer: TMMHiTimer; MMPanel2: TMMPanel; ButtonPanel: TMMPanel; DisplayPanel: TMMPanel; MMPanel7: TMMPanel; MMLevelScale1: TMMLevelScale; digit: TMMLEDDigit; MMLevel2: TMMLevel; MMLevel1: TMMLevel; Label2: TLabel; Label3: TLabel; Label4: TLabel; MMSpectrum1: TMMSpectrum; ss1: TMMLEDDigit; ss2: TMMLEDDigit; mm1: TMMLEDDigit; mm2: TMMLEDDigit; btnStop: TMMSpeedButton; btnPlay: TMMSpeedButton; btnPause: TMMSpeedButton; btnOpen: TMMSpeedButton; btnPrev: TMMSpeedButton; btnSkipL: TMMSpeedButton; btnSkipR: TMMSpeedButton; btnNext: TMMSpeedButton; btnClose: TMMSpeedButton; btnMenu: TMMSpeedButton; btnIncVolume: TMMSpeedButton; btnDecVolume: TMMSpeedButton; Bevel1: TBevel; btnPlayList: TMMSpeedButton; Gauge: TMMLevel; Bevel2: TBevel; ledMode: TMMLEDMode; ledRate: TMMLEDPanel; Label18: TLabel; lblBitRate: TLabel; ledBitRate: TMMLEDPanel; lblLayer: TLabel; lblLayer2: TLabel; lblFile: TMMLEDLABEL; PopupMenu: TPopupMenu; Preferences1: TMenuItem; N1: TMenuItem; Play1: TMenuItem; Stop1: TMenuItem; Pause1: TMenuItem; N2: TMenuItem; Previous1: TMenuItem; Next1: TMenuItem; N3: TMenuItem; PlayList1: TMenuItem; WaveFile: TMMWaveFile; N4: TMenuItem; Info1: TMenuItem; ImageEOF: TImage; ImageState: TImage; MPEGFile: TMMMPEGFile; SpeedButton1: TSpeedButton; N5: TMenuItem; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure HiTimerTimer(Sender: TObject); procedure WaveOutStop(Sender: TObject); procedure btnCloseClick(Sender: TObject); procedure btnOpenClick(Sender: TObject); procedure btnStopClick(Sender: TObject); procedure btnPauseClick(Sender: TObject); procedure btnPlayClick(Sender: TObject); procedure btnPrevClick(Sender: TObject); procedure btnSkipLClick(Sender: TObject); procedure btnSkipRClick(Sender: TObject); procedure btnNextClick(Sender: TObject); procedure btnDecVolumeClick(Sender: TObject); procedure btnIncVolumeClick(Sender: TObject); procedure btnPlayListClick(Sender: TObject); procedure WaveOutStart(Sender: TObject); procedure MMPanelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure MMPanelMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer); procedure MMPanelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure GaugeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Приложение А (продолжение) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure btnMenuClick(Sender: TObject); procedure PopupMenuPopup(Sender: TObject); procedure PreferencesClick(Sender: TObject); procedure Info1Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure WaveOutPause(Sender: TObject); procedure WaveOutRestart(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure N5Click(Sender: TObject); public oMin, oSec: Word; Dragging: Boolean; DragStart: TPoint; Seeking: Boolean; OldTime,CurTime: Longint; PlayListName: TFileName; PlayList : TStringList; PlayIndex: integer; IncPlayList: Boolean; DisplayColor: TColor; TimeCnt : Longint; procedure LoadImage(Image: TImage; Name: PChar); procedure DrawTime(Time: Longint); procedure SetFileParams; function LoadFile(FileName: TFileName): Boolean; function AddFile(FileName: TFileName): Boolean; procedure SelectFile(index: integer); procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHitTest; procedure WMDropFiles(var Msg: TMessage); message WM_DropFiles; procedure LoadSettings; procedure SaveSettings; procedure DrawLevelBar(Sender: TObject; DIB: TMMDIBCanvas; Rect: TRect; nSpots,Peak: integer); end; var MainForm: TMainForm; implementation {$R *.DFM} {$R IMAGE.RES} uses upref,ulist, UMe, UVideo; const REGBASENAME = 'Software\SwiftSoft\MPEGPlay'; procedure TMainForm.WMNCHitTest(var Msg: TWMNCHitTest); begin inherited; { is the click in the client area? } if (Msg.Result = htClient) then { if so, make Windows think it's } Msg.Result := htCaption; { on the caption bar. } end; procedure TMainForm.LoadImage(Image: TImage; Name: PChar); begin with Image.Picture do begin { load the bitmap } Bitmap.Handle := LoadBitmap(hInstance,Name); Приложение А (продолжение) { change the black/white resource to a colored bitmap } ChangeColors(Bitmap,False,DisplayColor,clBlack,clBlack); end; end; procedure TMainForm.LoadSettings; var L,T: integer; begin try L := (Screen.Width-Width) div 2; T := (Screen.Height-Height) div 2; Left := GetFromRegistry(HKEY_CURRENT_USER, REGBASENAME, 'Left', L); Top := GetFromRegistry(HKEY_CURRENT_USER, REGBASENAME, 'Top', T); WaveOut.NumBuffers := GetFromRegistry(HKEY_CURRENT_USER, REGBASENAME, 'Buffers', WaveOut.NumBuffers); WaveOut.BufferSize := GetFromRegistry(HKEY_CURRENT_USER, REGBASENAME, 'BufferSize', WaveOut.BufferSize); WaveOut.DeviceID := GetFromRegistry(HKEY_CURRENT_USER, REGBASENAME, 'DeviceID', WaveOut.DeviceID); WaveOut.CallBackMode := GetFromRegistry(HKEY_CURRENT_USER, REGBASENAME, 'CBMode', WaveOut.CallBackMode); except end; end; procedure TMainForm.SaveSettings; begin SaveInRegistry(HKEY_CURRENT_USER, REGBASENAME, 'Left', Left); SaveInRegistry(HKEY_CURRENT_USER, REGBASENAME, 'Top', Top); SaveInRegistry(HKEY_CURRENT_USER, REGBASENAME, 'Buffers', WaveOut.NumBuffers); SaveInRegistry(HKEY_CURRENT_USER, REGBASENAME, 'BufferSize', WaveOut.BufferSize); SaveInRegistry(HKEY_CURRENT_USER, REGBASENAME, 'DeviceID', WaveOut.DeviceID); SaveInRegistry(HKEY_CURRENT_USER, REGBASENAME, 'CBMode', WaveOut.CallBackMode); end; procedure TMainForm.FormCreate(Sender: TObject); begin MMLevel1.DIBCanvas.BackGroundBitmap.LoadFromResourceName(hInstance,'BM_BAR1'); MMLevel2.DIBCanvas.BackGroundBitmap.LoadFromResourceName(hInstance,'BM_BAR1'); MMSpectrum1.DIBCanvas.BackGroundBitmap.LoadFromResourceName(hInstance,'BM_BAR2'); MMLevel1.DIBCanvas.PaletteRealize := True; MMLevel2.DIBCanvas.PaletteRealize := True; MMSpectrum1.DIBCanvas.PaletteRealize := True; DragAcceptFiles(Handle,True); PlayListName := 'noname.m3u'; PlayList := TStringList.Create; PlayIndex := 0; DisplayColor := clLime; LoadImage(ImageEOF,'BM_EOF'); LoadImage(ImageState,'BM_PLAY'); LoadSettings; MMLevel1.OnDrawBar := DrawLevelBar; MMLevel2.OnDrawBar := DrawLevelBar; MMSpectrum1.OnDrawBar := DrawLevelBar; end; procedure TMainForm.FormDestroy(Sender: TObject); begin PlayList.Free; end; procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin IncPlayList := False; WaveOut.Close; Приложение А (продолжение) SaveSettings; end; procedure TMainForm.FormShow(Sender: TObject); begin if (ParamStr(1) <> '') then if LoadFile(ParamStr(1)) then begin btnPlayClick(nil); end else MessageDlg(ParamStr(1)+' is not a valid Audiofile',mtError, [mbOK],0); end; procedure TMainForm.WMDropFiles(var Msg: TMessage); var i,cnt: integer; Buf: array[0..255]of Char; begin try cnt := DragQueryFile(Msg.wParam,$FFFFFFFF,@Buf,255); if (cnt > 0) then begin IncPlayList := False; WaveOut.Stop; PlayList.Clear; for i := 0 to cnt-1 do begin DragQueryFile(Msg.wParam,i,@Buf,255); if not AddFile(StrPas(Buf)) then MessageDlg(StrPas(Buf)+' is not a valid Audiofile',mtError, [mbOK],0); end; PlayIndex := 0; SelectFile(0); if (PlayList.Count > 0) then btnPlayClick(nil); end; finally DragFinish(Msg.wParam); end; end; {-- TMainForm -----------------------------------------------------------} procedure TMainForm.DrawTime(Time: Longint); Var Hour, Min, Sec, MSec: Word; begin { Display the "Time" } TimeDecode(Time, Hour, Min, Sec, MSec); if (oSec <> Sec) then begin ss1.Value := Sec; oSec := Sec; end; if (oMin <> Min) then begin mm1.Value := Min; oMin := Min; end; end; {-- TMainForm -----------------------------------------------------------} procedure TMainForm.SetFileParams; begin Приложение А (продолжение) if not MpegFile.Empty then with MpegFile do begin ss1.Enabled := True; ss2.Enabled := True; mm1.Enabled := True; mm2.Enabled := True; digit.Enabled:= True; lblFile.Caption := IntToStr(PlayIndex+1)+':'+UpperCase(ExtractFileName(Filename)); ledRate.Value := PlaybackRate div 1000; ledRate.Enabled := True; lblLayer.Visible := True; lblLayer2.Visible := True; case Layer of 1: lblLayer2.Caption := 'I'; 2: lblLayer2.Caption := 'II'; 3: lblLayer2.Caption := 'III'; end; if (Mode = smJointStereo) or (Mode = smStereo) then ledMode.Mode := mStereo else ledMode.Mode := mMono; ledMode.Enabled := True; ledBitRate.Value := BitRate; ledBitRate.Enabled := True; lblBitRate.Caption := 'KBit/s'; end else if not WaveFile.Wave.Empty then with WaveFile.Wave do begin ss1.Enabled := True; ss2.Enabled := True; mm1.Enabled := True; mm2.Enabled := True; digit.Enabled:= True; lblFile.Caption := IntToStr(PlayIndex+1)+':'+UpperCase(ExtractFileName(Filename)); ledRate.Value := SampleRate div 1000; ledRate.Enabled := True; lblLayer.Visible := False; lblLayer2.Visible := False; ledMode.Mode := Mode; ledMode.Enabled := True; ledBitRate.Value := BitLength; ledBitRate.Enabled := True; lblBitRate.Caption := 'Bit'; end else begin ss1.Enabled := False; ss2.Enabled := False; mm1.Enabled := False; mm2.Enabled := False; digit.Enabled:= False; lblFile.Caption := 'Нет Файла'; ledRate.Enabled := False; lblLayer.Visible := False; lblLayer2.Visible := False; ledMode.Enabled := False; ledBitRate.Enabled:= False; end; Приложение А (продолжение) end; {-- TMainForm -----------------------------------------------------------} procedure TMainForm.HiTimerTimer(Sender: TObject); var Time: Longint; begin MMConnector1.Trigger; inc(TimeCnt); if (TimeCnt mod 5 = 0) and (wosPlay in Waveout.State) and not Seeking then begin Time := WaveOut.Position; inc(CurTime,Time-OldTime); DrawTime(CurTime); OldTime := Time; if not MpegFile.Empty then begin Gauge.Value := MulDiv(MpegFile.Position, 100, MpegFile.Frames); ImageEOF.Visible := MpegFile.Position >= MpegFile.Frames; end else begin Gauge.Value := MulDiv(WaveFile.Wave.Position, 100, WaveFile.Wave.DataSize); ImageEOF.Visible := WaveFile.Wave.Position >= WaveFile.Wave.DataSize; end; end; end; {-- TMainForm -----------------------------------------------------------} procedure TMainForm.WaveOutStart(Sender: TObject); begin TimeCnt := 0; HiTimer.Enabled := True; LoadImage(ImageState,'BM_PLAY'); ImageState.Visible := True; end; {-- TMainForm -----------------------------------------------------------} procedure TMainForm.WaveOutStop(Sender: TObject); begin HiTimer.Enabled := False; WaveOut.Close; Seeking := False; DrawTime(0); Gauge.Value := 0; ImageEOF.Visible := False; ImageState.Visible := False; if IncPlayList then begin if (PlayIndex < PlayList.Count-1) then begin inc(PlayIndex); SelectFile(PlayIndex); WaveOut.Start; end else begin PlayIndex := 0; SelectFile(PlayIndex); end; end; end; {-- TMainForm -----------------------------------------------------------} procedure TMainForm.WaveOutPause(Sender: TObject); Приложение А (продолжение) begin LoadImage(ImageState,'BM_PAUSE'); end; {-- TMainForm -----------------------------------------------------------} procedure TMainForm.WaveOutRestart(Sender: TObject); begin LoadImage(ImageState,'BM_PLAY'); end; {-- TMainForm -----------------------------------------------------------} function TMainForm.LoadFile(FileName: TFileName): Boolean; begin Result := False; if (FileName <> '') and FileExists(FileName) then begin PlayIndex := 0; PlayList.Clear; MpegFile.FileName := ''; WaveFile.Wave.FileName := ''; if IsMpegFile(FileName) or wioIsWaveFile(FileName, RIFF_FILE) then begin PlayListName := 'noname.m3u'; PlayList.Add(FileName); end else begin PlayListName := FileName; LoadPlayList(FileName,PlayList); end; Result := (PlayList.Count > 0); SelectFile(0); end; caption := filename; end; {-- TMainForm -----------------------------------------------------------} function TMainForm.AddFile(FileName: TFileName): Boolean; begin Result := False; if (FileName <> '') and FileExists(FileName) then begin if IsMpegFile(FileName) or wioIsWaveFile(FileName, RIFF_FILE) then begin PlayList.Add(FileName); Result := True; end else begin Result := LoadPlayList(FileName,PlayList); end; end; end; {-- TMainForm -----------------------------------------------------------} procedure TMainForm.SelectFile(index: integer); var FileName: TFileName; begin MpegFile.FileName := ''; WaveFile.Wave.FileName := ''; if (index >= 0) and (index < PlayList.Count) then begin FileName := PlayList[index]; Приложение А (продолжение) if (FileName <> '') and FileExists(FileName) then begin if IsMpegFile(FileName) then begin MpegFile.FileName := FileName; WaveOut.Input := MpegFile; end else if wioIsWaveFile(FileName, RIFF_FILE) then begin WaveFile.Wave.FileName := FileName; WaveOut.Input := WaveFile; end end; CurTime := 0; OldTime := 0; end; SetFileParams; end; {-- TMainForm -----------------------------------------------------------}
Страницы: 1, 2
|