Sound
На определенном этапе при программировании, вам может понадобиться звуки,
которые играли в программе. Это может быть звуковым перезвон, который позволяет
пользователю, что задача завершена, или это может быть звуковые эффекты в игре.
Однако вы используете звук, вы должны знать, как загружать и воспроизводить
звуковые файлы частности. В данной главе объясняется, как загружать различные
различные звуковые файлы, и приводятся примеры о том, как играть эти звуковые
файлы из программы.
Wave файлы один из наиболее распространенных форматов звука на персональных
компьютерах, в связи с их создания объединить усилия между Microsoft и IBM .
Wave файлов, которые обычно имеют расширение файла *. WAV, являются родной
формат звука используется всеми компьютерами. Хотя этот формат не имеет
встроенной сжатия звуковых данных, это до сих пор используется для повседневных
целей.
Следующий пример
загружает звуковой файл называется Intro.wav и играет ее:
#SOUND_FILE = 1
If
InitSound()
LoadSound(#SOUND_FILE,
"Intro.wav")
PlaySound(#SOUND_FILE)
StartTime.l
= ElapsedMilliseconds()
Repeat
Delay(1)
Until ElapsedMilliseconds() > StartTime +
8000
End
EndIf
Этот пример, вероятно, не будут использоваться в реальной
программе, но она показывает, правильные шаги, необходимые для воспроизведения
звуковой файл. Во-первых, мы должны инициализировать звуковой среды, используя
InitSound() команды. Это правильно инициализирует все
аппаратные средства и программное обеспечение, необходимое для воспроизведения
файла. Если это возвращает истину, мы знаем, что он инициализирован должным
образом, и мы можем продолжить. Там нет смысла продолжать со звуком, если звук
инициализации сбой, компьютер, вероятно, не звуковой картой.
После инициализации сделано и проверено мы загружаем звуковой файл, используя LoadSound() команды (Helpfile: Справочное руководство -> 2D игры Библиотеки -> Звук -> LoadSound). Эта функция загружает в память звуковой ждала нас, чтобы воспроизвести его. LoadSound() команда принимает два параметра, первый номер PB, которые вы хотите быть связано с этой звуковой файл, и второй это строка, содержащая имя файла звука, который вы хотите загрузить.
Когда звуковой файл был загружен вы можете играть в любое время в вашей
программе, используя PlaySound() команду
(Helpfile: Справочное руководство->2D Games
Libraries->Sound->PlaySound).
Эта команда имеет один параметр, который
является число PB в звуковой файл, вы хотите играть.
Если вы внимательно посмотрите на пример файла волны вы увидите, я использовал довольно сложную петлю на конце программы. Это, чтобы остановить этот пример программы выхода слишком рано. При этом выход программы, все звуки, в настоящее время играет им будет остановиться и выгружается из памяти. Я не хочу, чтобы это произошло сразу, так что я закодированы этот цикл, чтобы дать программе 8 секунд, чтобы воспроизвести файл, а затем выйти. Вы, вероятно, никогда не увидите это в реальной программе, поскольку она, вероятно, основной цикл, чтобы сохранить программе живой , а звук проигрывается.
Иногда в своих программах вы можете не загружать внешние файлы
Wav, но файлы на самом деле содержится в вашей программе, с тем все это можно
распространять в виде одного файла. Это может быть сделано путем внедрения вашей
звуковой файл в DataSection, аналогичные вложения
изображений, как описано в главе 9 (включая графику в программе). Существует
одна разница однако, вместо CatchImage() команды, для
загрузки файлов из DataSection, мы используем CatchSound() команду, вот пример:
#SOUND_FILE = 1
If InitSound()
CatchSound(#SOUND_FILE, ?SoundFile)
PlaySound(#SOUND_FILE)
StartTime.l = ElapsedMilliseconds()
Repeat
Delay(1)
Until ElapsedMilliseconds() > StartTime +
8000
End
EndIf
DataSection
SoundFile:
IncludeBinary
"Intro.wav"
EndDataSection
Звуковой файл внедрен в DataSection с помощью
IncludeBinary команды точно так же, как и
изображение, и метка звуковой волны файла знаменует начало файла в памяти.
Чтобы загрузить этот звук из DataSection при запуске
программы, мы используем CatchSound() команду
(Helpfile: Справочное руководство по-> 2D игры Библиотеки->
Звук->CatchSound).
Эта команда имеет два параметра, первый
номер PB, который будут связан с этим звуком и второе, это адрес в памяти,
где этот звук файл должен быть загружен. Этот адрес будет этикетке адрес,
поскольку это означает, где звуковой файл в памяти. Чтобы получить адрес
используется знак вопроса напротив его названия, например ?SoundFile. Мы получили пути Wav файла , вы
можете использовать его, как и любой другой файл Wav, в данном случае, я играю
звук с помощью PlaySound() команды. Многие Wav
файлы могут быть внедрены в программу, нужно просто дать всем им уникальные
идентификаторы..
Изменение звука в реальном времени
Использование звуковой команды в библиотеке звука PureBasic,
можно сделать изменения громкости, звук баланса и скорость воспроизведения.
Том увеличивает или уменьшает громкость звука, панорамирования означает переход
звук из одного громкоговорителя в другой, как правило, с левой или правой и
изменение частоты, по сути ускорить, замедлить воспроизведение звукового
файла во время воспроизведения . Для демонстрации этих эффектов, я создал программу небольшой звуковой проигрыватель, который
использует изменение громкости, панорамирования и скорость воспроизведения.
Попробуйте его, открыть, загрузить звуковой файл, нажмите клавишу
воспроизведения и ручки трекбара.
Enumeration
#WINDOW_ROOT
#SOUND_FILE
#TEXT_FILE
#BUTTON_CHOOSE_FILE
#TEXT_VOLUME
#TRACKBAR_VOLUME
#TEXT_PAN
#TRACKBAR_PAN
#TEXT_FREQUENCY
#TRACKBAR_FREQUENCY
#BUTTON_PLAY_FILE
#BUTTON_STOP_FILE
EndEnumeration
Global FileName.s = ""
#FLAGS =
#PB_Window_SystemMenu | #PB_Window_ScreenCentered
If OpenWindow(#WINDOW_ROOT,
0, 0, 500, 250, "Sound Player", #FLAGS)
If
CreateGadgetList(WindowID(#WINDOW_ROOT))
TextGadget(#TEXT_FILE, 10,
10, 480, 20, "", #PB_Text_Border)
ButtonGadget(#BUTTON_CHOOSE_FILE,
10, 40, 150, 20, "Choose Wave File...")
TextGadget(#TEXT_VOLUME, 10, 70, 480, 20, "Volume")
TrackBarGadget(#TRACKBAR_VOLUME, 10, 90, 480, 20, 0, 100)
SetGadgetState(#TRACKBAR_VOLUME, 100)
TextGadget(#TEXT_PAN, 10, 120, 480, 20, "Pan")
TrackBarGadget(#TRACKBAR_PAN, 10, 140, 480, 20, 0, 200)
SetGadgetState(#TRACKBAR_PAN, 100)
TextGadget(#TEXT_FREQUENCY, 10, 170, 480, 20, "Frequency")
TrackBarGadget(#TRACKBAR_FREQUENCY, 10, 190, 480, 20, 100, 10000)
SetGadgetState(#TRACKBAR_FREQUENCY, 4400)
ButtonGadget(#BUTTON_PLAY_FILE, 10, 220, 100, 20, "Play File")
ButtonGadget(#BUTTON_STOP_FILE, 130, 220, 100, 20, "Stop Sound")
If InitSound()
Repeat
Event.l = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select
EventGadget()
Case #BUTTON_CHOOSE_FILE
FileName=OpenFileRequester("Choose","","Wave File
(*.wav)|*.wav",0)
If filename
<> ""
SetGadgetText(#TEXT_FILE,
GetFilePart(FileName))
LoadSound(#SOUND_FILE, filename)
EndIf
Case
#TRACKBAR_VOLUME
If filename
<> ""
SoundVolume(#SOUND_FILE,
GetGadgetState(#TRACKBAR_VOLUME))
EndIf
Case
#TRACKBAR_PAN
If filename <>
""
SoundPan(#SOUND_FILE, GetGadgetState(#TRACKBAR_PAN) -
100)
EndIf
Case
#TRACKBAR_FREQUENCY
If filename
<> ""
SoundFrequency(#SOUND_FILE,GetGadgetState(#TRACKBAR_FREQUENCY) *
10)
EndIf
Case
#BUTTON_PLAY_FILE
If filename
<> ""
PlaySound(#SOUND_FILE)
EndIf
Case
#BUTTON_STOP_FILE
If filename
<> ""
StopSound(#SOUND_FILE)
EndIf
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
EndIf
EndIf
End
Этот пример представляет три новые звуковые команды:
‘SoundVolume()’
Эта команда используется для
управления громкости загруженного звука. Это не меняет оригинальный звуковой
файл в любом случае, она лишь меняет громкость звука, когда она воспроизводится.
Для выполнения этой команды вы должны передать её двумя параметрами, первый
номер PB от звука, который вы хотите изменить И второе: уровень громкости
который вы хотите изменить. Уровень громкости - число в
диапазоне от 0 и до 100% изменяет от 0 до максимальной громкости.
‘SoundPan()’
Эта команда баланса
звука левого и правого каналов. Чтобы использовать эту команду нужно
передать два параметра. Первый номер PB от звука, который вы хотите для
панорамирования и вторым параметром является значение баланса. Это значение
баланса число которых колеблется от -100 до 100. Если вы используете
значение \-100, то звук полностью играет из левой колонки. Если вы используете
значение 100, то звук полностью играет из правой колонки.
‘SoundFrequency()’
Эта команда изменяет частоту
звука для воспроизведения. Частота звуковой волны, измеряется в герцах и
объясняется как количество колебаний в секунду. Например, вся музыка
хранится на компакт-диске оцифровывается в размере 44,1 кГц (килогерц). Это
означает, что сигнал содержащий звуковой информации на CD читается 44100
раз в секунду. Это необходимо в рамках резолюции для кодирования даже малейшего
изменения звука. Если звук кодируется на 44,1 кГц, и вы используете эту команду,
чтобы изменить свою частоту 22050 Гц, то, как только этот звук воспроизводится,
она будет воспроизводить на половине скорости оригинала. Чтобы использовать эту
команду в PureBasic Чтобы изменить частоту загруженных звук, вы передаете его
двумя параметрами. Первый номер PB от звука, который вы хотите изменить и второй
номер, который выражает новую частоту в Гц. Это второй параметр должен быть
между 1000 и до 100000.
Чтобы узнать больше о командах, которые манипулируют файлов волны, см.
звуковой библиотеки в файл помощи PureBasic
(Helpfile:Reference
Manual->2D Games Libraries->Sound).
Модуль Файлы
Эти типы файлов используются форматы, что представляет музыку с
использованием цифровых моделей. Внутри они хранят несколько страниц узорной
музыки данных в форме, аналогичной, что и таблицы. Эти модели содержат сведения
номера, номера инструмента и контроллера сообщения, которые говорят программа
чтения файла, когда для воспроизведения нот, используя то, что образцы и как
долго. Модуль файлов также проведет список, который определяет порядок, в
котором Для воспроизведения модели.
Количество
записей, которые могут звучать одновременно зависит от того, сколько треков Есть
в шаблон. Ранняя программ, которые были доступны позволяет пользователям
создавать свои собственные модули, используя четыре трека. Самым большим
преимуществом модулей над стандартных звуковых файлов является то, что модули
включают собственные сэмплы и должны звучать же от одного игрока к другому.
Модуль файлы часто называют трекер модулем и искусство
составления модулей называется слежения, просто потому, что первая программа,
которая позволяет пользователям создавать модули было называется Soundtracker.
Эта программа, хотя изначально плохо получил, был выпущен в общественное
достояние, и был клонирован много раз лучше спортивных характеристик и разные
названия, такие как Noisetracker или ProTracker , эти стали очень популярны
особенно в Commodore Amiga игры и демо-создателей. Программы, которые могут
создавать файлы модулей сегодня вместе известны как трекеры.
Модуль файлов может быть много различных расширений файлов, потому
что они приходят в разных форматах, эти расширения обычно показывают в программе
создателя файла. Модуль типы файлов, которые поддерживаются PureBasic являются:
FastTracker (‘*.xm’)
Scream
Tracker (‘*.s3m’)
Protracker(‘*.mod’)
Impulse Tracker (‘*.it’)
Эти различные типы модулей рассматриваются таким же образом, при погрузке и
играть в вашей программе PureBasic. Вот пример,
показывающий, как загружать и играть в любую из перечисленных выше типов
модулей:
#MODULE_FILE =
1
If InitSound()
;If InitModule()
LoadModule(#MODULE_FILE,
"Eighth.mod")
PlayModule(#MODULE_FILE)
StartTime.l =
ElapsedMilliseconds()
Repeat
Delay(1)
Until
ElapsedMilliseconds() > StartTime + 15000
StopModule(#MODULE_FILE)
End
;EndIf
EndIf
Во-первых, нам необходимо инициализировать здоровой окружающей среды,
как например волны файл с помощью InitSound()
команды. Далее, нам необходимо инициализировать модуль возможности
воспроизведения PureBasic используя функцию InitModule() команды. Обе эти команды должны быть проверены
для обеспечения того, чтобы оба инициализируется правильно.
После того как среда создана можно загрузить модуль с помощью LoadModule() команды
(Helpfile: Справочное
руководство по->2D игры Библиотеки-> модули-> LoadModule). Эта команда
имеет два параметра, первый номер PB, что вы хотите, связаны с этим модулем И
второе, это имя файла модуля должен быть загружен.
После его загрузки можно воспроизвести этот модуль в любое время, используя
PlayModule() команды
(Helpfile:
Справочное руководство по-> 2D игры Библиотеки-> модули->PlayModule).
Так же, как PlaySound() команду, на
этот раз принимает один параметр, который является число PB модуля вы хотите
играть.
Чтобы остановить модуль из игры вы можете использовать
StopModule() команды.
Недостатки использования модулей
Есть две большие минусы использования модулей в своих программах
PureBasic. Во-первых, не существует простой способ внедрения и загрузить из
памяти все модули, которые должны быть воспроизведены. Это означает, что вы
должны распространять все используемые файлы модулей вместе с исполняемым
файлом. Существуют, однако, пути сохранения модуля в исполняемый файл и
последующей записи на диск перед погрузкой и играть, но это немного громоздким.
Второй недостаток в том, что вы должны распространять файл Midas11.dll вместе с
вашей программой. Эта динамика связана библиотека загружается по команде InitModule() и будет ошибкой, если он не находит его. Вы
можете думать, что это не так плох, но лицензии связанных с использованием этого
Мидас библиотеке запрещает использовать его в коммерческих целях.
Эта лицензия также запрещает Midas11.dll файлы, который включен в
пакет PureBasic, поэтому вам придется скачать ее для себя от Audio System
веб-сайт Housemarque.
Чтобы узнать о других команд, которые могут использоваться для управления
файлами модуля, см. модуль библиотеки в файл помощи PureBasic
(Helpfile:Reference Manual->2D Games Libraries->Module).
Mp3
MP3 файлы быстро становится самой популярной звуковой формат всех времен, в основном благодаря тому, что формат MP3 является стандартом де-факто для практически всех скачиваемой музыки в Интернете.
MP3 файлы обрабатываются немного по-разному в PureBasic А для того, Чтобы
играть в них мы должны использовать команды из библиотеки ‘Movie’ library
(Helpfile:Reference Manual->General Libraries->Movie).
Это
может показаться немного странным, использование видео команд проигрывать
MP3-файлы, но видео команды способны гораздо больше, чем просто воспроизведение
фильмов. Видео библиотека предоставляет удобный способ для загрузки и играть
почти во всех средствах массовой информации, которые кодек, установленный на
компьютере. Вы можете не только играть видео форматы с помощью этих команд, но
вы можете также воспроизводить аудио форматы.
Вот список наиболее популярных форматов файлов, которые библиотека видео может играть, В зависимости от установленных кодеков Вы можете даже играть больше форматов, чем это показано в этом списке:
Movie Files:
Audio Video
Interleave (‘*.avi’)
MPEG Video
(‘*.mpg’)
Audio Files:
Midi Files (‘*.mid’)
MP3
Files (‘*.mp3’)
Ogg Vorbis (‘*.ogg’)
Wave Files (‘*.wav’)
Может показаться, что Библиотека Видео , подойдёт для всех ваших потребностей играть аудио и видео. И некоторые люди даже попросил, чтобы она была переименована в библиотеку Media, но надо помнить одну вещь , что если что-то и играет на компьютере, оно может не загружается и не играть на компьютере другого человека. Это потому, что могут быть различные плагины или кодеки установлены, (или нет) на других компьютерах. Однако, приведенный выше список, как представляется, довольно стандартным для большинства машин.
В следующем примере я использовал видео команды, чтобы создать простой MP3-плеер и обеспечить простой том, и пан контроля. Она не может соперничать WinAmp, но это дает вам представление о том, как легко медиаплееры создать в PureBasic.
Enumeration
#WINDOW_ROOT
#SOUND_FILE
#TEXT_FILE
#BUTTON_CHOOSE_FILE
#TEXT_VOLUME
#TRACKBAR_VOLUME
#TEXT_PAN
#TRACKBAR_PAN
#BUTTON_PLAY_FILE
#BUTTON_PAUSE_FILE
#BUTTON_STOP_FILE
EndEnumeration
Global FileName.s =
""
Global FilePaused.b = #False
#FLAGS = #PB_Window_SystemMenu |
#PB_Window_ScreenCentered
If OpenWindow(#WINDOW_ROOT, 0, 0,
500, 215, "MP3 Player", #FLAGS)
If
CreateGadgetList(WindowID(#WINDOW_ROOT))
TextGadget(#TEXT_FILE, 10,
10, 480, 20, "", #PB_Text_Border)
ButtonGadget(#BUTTON_CHOOSE_FILE, 10, 40, 150, 20, "Choose MP3
File...")
TextGadget(#TEXT_VOLUME, 10, 70, 480, 20,
"Volume")
TrackBarGadget(#TRACKBAR_VOLUME, 10, 90, 480, 20, 0,
100)
SetGadgetState(#TRACKBAR_VOLUME, 100)
TextGadget(#TEXT_PAN, 10, 120, 480, 20, "Pan")
TrackBarGadget(#TRACKBAR_PAN, 10, 140, 480, 20, 0, 200)
SetGadgetState(#TRACKBAR_PAN, 100)
ButtonGadget(#BUTTON_PLAY_FILE, 10, 180, 100, 20, "Play")
ButtonGadget(#BUTTON_PAUSE_FILE, 130, 180, 100, 20, "Pause")
ButtonGadget(#BUTTON_STOP_FILE, 250, 180, 100, 20, "Stop")
If InitMovie()
Repeat
Event.l =
WaitWindowEvent()
Select
Event
Case
#PB_Event_Gadget
Select
EventGadget()
Case
#BUTTON_CHOOSE_FILE
FileName=OpenFileRequester("Choose","","MP3
File
(*.mp3)|*.mp3",0)
If filename <>
""
SetGadgetText(#TEXT_FILE,
GetFilePart(FileName))
LoadMovie(#SOUND_FILE,
filename)
EndIf
Case
#TRACKBAR_VOLUME,
#TRACKBAR_PAN
If
filename <>
""
Volume.l =
GetGadgetState(#TRACKBAR_VOLUME)
Balance.l = GetGadgetState(#TRACKBAR_PAN) -
100
MovieAudio(#SOUND_FILE, Volume,
Balance)
EndIf
Case
#BUTTON_PLAY_FILE
If
filename <>
""
PlayMovie(#SOUND_FILE,
#Null)
FilePaused =
#False
SetGadgetText(#BUTTON_PAUSE_FILE,
"Pause")
EndIf
Case
#BUTTON_PAUSE_FILE
If
filename <>
""
If FilePaused
= #False
PauseMovie(#SOUND_FILE)
FilePaused =
#True
SetGadgetText(#BUTTON_PAUSE_FILE,
"Resume")
Else
ResumeMovie(#SOUND_FILE)
FilePaused =
#False
SetGadgetText(#BUTTON_PAUSE_FILE,
"Pause")
EndIf
EndIf
Case
#BUTTON_STOP_FILE
If
filename <>
""
StopMovie(#SOUND_FILE)
FilePaused =
#False
SetGadgetText(#BUTTON_PAUSE_FILE,
"Pause")
EndIf
EndSelect
EndSelect
Until Event =
#PB_Event_CloseWindow
EndIf
EndIf
EndIf
End
Глядя на этот небольшой пример, вы можете
увидеть, что для использования команды видео, вы должны инициализировать
природной среды, как волны файлов и модулей. Для инициализации фильм
используемые вами команды InitMovie() команды. После
этого был назван Вы можете использовать другие команды библиотеки видео. Как и
другие команды инициализации она должна быть проверена и, если он сломается, вы
не сможете продолжать использовать фильм команд.
Для загрузки видео (или в данном случае MP3-файл) мы используем LoadMovie() команды
(Helpfile: Справочное
руководство по-> Общие библиотеки-> Movie-> LoadMovie). Эта команда
имеет два параметра. Первый номер PB, что вы хотите, связанных с СМИ о загружать
и вторым параметром является строка, содержащая имя файла реальных средах для
загрузки файлов.
После того как средства массовой информации был загружен
мы можем воспроизвести его при помощи оператора PlayMovie() команды
(Helpfile: Справочное
руководство по->Общие библиотеки-> Movie-> PlayMovie).
Эта команда имеет два параметра, чтобы иметь возможность поддерживать
фильмы, а также аудио информации. Первым параметром является номер PB средств
массовой информации вы хотите играть, а второй параметр является идентификатором
OS из окна. Этот идентификатор ОС При воспроизведении фильма, потому что это
окно, где кино показывать будут оказаны. Если вы воспроизведения файла, который
состоит только аудио-данных (например, MP3), то вы можете использовать
встроенные в постоянном #Null Как идентификатор OS,
это не затем связать любое окно в воспроизведении файл:
...
PlayMovie(#SOUND_FILE,
#Null)
...
Кроме того, в примере я использовал PauseMovie() и
ResumeMovie() команды, они просты в использовании,
они оба принимают один параметр, который PB количество средств массовой
информации вы хотите, чтобы приостановить или возобновить.
Чтобы вы могли остановить воспроизведение файлов, я также использовал
StopMovie() команды в этом примере. Опять же, это
просто один использовать, как вам нужно всего лишь передать его одному
параметру. Это число PB средств массовой информации вы хотите остановить
воспроизведение.
Даже если это скелет медиа плеер
и он поддерживает только MP3, было бы тривиальная задача, чтобы перевести этот
код, чтобы сделать свой собственный медиа-проигрыватель способный решать все из
перечисленных форматов. Почему бы вам не попробовать?
Воспроизведение аудио CD является хорошим способом обеспечить высокое качество музыки Для любой игры или приложения, которые необходимо музыки. Есть много инструментов, доступных в Интернете, для создания и записи своего музыку на CD. Использование CD Предоставлять музыка это замечательная идея, потому что играть в них требует очень мало системных ресурсов и качества является фантастической.
Вот пример, который использует AudioCD библиотека PureBasic, чтобы создать очень простой проигрыватель компакт-дисков:
Enumeration
#WINDOW_ROOT
#BUTTON_PREVIOUS
#BUTTON_PLAY
#BUTTON_STOP
#BUTTON_NEXT
#BUTTON_EJECT
#TEXT_STATUS
#PROGRESS_SONG
#LIST_TRACKS
EndEnumeration
;Global variables, etc.
Global
NumberOfTracks.l
Global CurrentTrack.l
;Convert
seconds into a String containing minutes
Procedure.s
ConvertToMin(Seconds.l)
ProcedureReturn Str(Seconds / 60) + ":" +
Str(Seconds % 60)
EndProcedure
;Set the current
track
Procedure UpdateStatusText(Track.l)
If NumberOfTracks
> 0
TrackLength.l = AudioCDTrackLength(Track)
TrackLengthString.s = ConvertToMin(TrackLength)
TrackTimings.s = " ("
+ TrackLengthString + ")"
SetGadgetText(#TEXT_STATUS, "Track: " +
Str(Track) + TrackTimings)
SetGadgetState(#PROGRESS_SONG,
0)
If AudioCDStatus() > 0
TimeElapsed.l = AudioCDTrackSeconds()
TrackTimings.s=" ("+ConvertToMin(TimeElapsed)+" /
"+TrackLengthString+")"
SetGadgetText(#TEXT_STATUS,
"Track: " + Str(Track) + TrackTimings)
Progress.f =
(100 / TrackLength) * TimeElapsed
SetGadgetState(#PROGRESS_SONG, Progress)
EndIf
SetGadgetState(#LIST_TRACKS, Track -
1)
Else
SetGadgetText(#TEXT_STATUS, "Please
insert an Audio CD")
EndIf
EndProcedure
;Move to next track
Procedure
NextTrack()
If CurrentTrack <
NumberOfTracks
CurrentTrack +
1
UpdateStatusText(CurrentTrack)
If
AudioCDStatus() > 0
PlayAudioCD(CurrentTrack,
NumberOfTracks)
EndIf
EndIf
EndProcedure
;Move to previous track
Procedure
PreviousTrack()
If CurrentTrack > 1
CurrentTrack -
1
UpdateStatusText(CurrentTrack)
If
AudioCDStatus() > 0
PlayAudioCD(CurrentTrack, NumberOfTracks)
EndIf
EndIf
EndProcedure
;Populate the list to show all tracks on a
disc
Procedure
PopulateTrackListing()
ClearGadgetItemList(#LIST_TRACKS)
NumberOfTracks
= AudioCDTracks()
If NumberOfTracks > 0
For x.l = 1
To NumberOfTracks
TrackLength.s =
ConvertToMin(AudioCDTrackLength(x))
AddGadgetItem(#LIST_TRACKS,
-1, "Track "+Str(x)+" ("+TrackLength+")")
Next
x
If CurrentTrack = 0
CurrentTrack = 1
EndIf
Else
CurrentTrack =
0
EndIf
EndProcedure
#FLAGS =
#PB_Window_SystemMenu | #PB_Window_ScreenCentered
If
OpenWindow(#WINDOW_ROOT, 0, 0, 320, 250, "CD Player", #FLAGS)
If
CreateGadgetList(WindowID(#WINDOW_ROOT))
ButtonGadget(#BUTTON_PREVIOUS, 10,
10, 60, 20, "Previous")
ButtonGadget(#BUTTON_PLAY, 70, 10, 60, 20,
"Play")
ButtonGadget(#BUTTON_STOP, 130, 10, 60, 20,
"Stop")
ButtonGadget(#BUTTON_NEXT, 190, 10, 60, 20,
"Next")
ButtonGadget(#BUTTON_EJECT, 250, 10, 60, 20,
"Eject")
TextGadget(#TEXT_STATUS, 10, 40, 300, 20, "",
#PB_Text_Center)
ProgressBarGadget(#PROGRESS_SONG,10,65,300,10,0,100,#PB_ProgressBar_Smooth)
ListViewGadget(#LIST_TRACKS,
10, 90, 300, 150)
If InitAudioCD()
PopulateTrackListing()
StartTime.l =
ElapsedMilliseconds()
Repeat
Event.l = WindowEvent()
Select Event
Case #PB_Event_Gadget
Select
EventGadget()
Case
#BUTTON_PREVIOUS
PreviousTrack()
Case
#BUTTON_PLAY
If NumberOfTracks >
0
PlayAudioCD(CurrentTrack,
NumberOfTracks)
EndIf
Case
#BUTTON_STOP
StopAudioCD()
Case
#BUTTON_NEXT
NextTrack()
Case
#BUTTON_EJECT
EjectAudioCD(#True)
PopulateTrackListing()
Case
#LIST_TRACKS
If EventType() =
#PB_EventType_LeftDoubleClick
CurrentTrack = GetGadgetState(#LIST_TRACKS) +
1
UpdateStatusText(CurrentTrack)
PlayAudioCD(CurrentTrack, NumberOfTracks)
EndIf
EndSelect
EndSelect
CurrentTime.l = ElapsedMilliseconds()
If CurrentTime
> StartTime + 1000
PopulateTrackListing()
UpdateStatusText(CurrentTrack)
StartTime.l =
ElapsedMilliseconds()
EndIf
Delay(1)
Until Event =
#PB_Event_CloseWindow
StopAudioCD()
EndIf
EndIf
EndIf
End
Этот пример очень простой CD-плеер, который
обеспечивает минимум функций по контролю и воспроизведению по списку. О бо
всей AudioCD библиотеке команд, которые могут быть использованы, читайте
более подробно в файле помощи PureBasic
(Helpfile: Справочное
руководство по-> Общие библиотеки-> AudioCD).
Чтобы использовать AudioCD команды для начала вы должны
инициализировать необходимые ресурсы, чтобы иметь возможность играть CD. Для
этого мы используем InitAudioCD () команды.
Эта команда должна
быть проверена, чтобы определить, если она была успешной или нет.
Заодно Возвращаемое значение этой команды является количество CD
дисков, подключенных к компьютеру и из которых доступны для использования в
целях воспроизведения музыки. Если возвращаемое значение равно 0, значит
компьютер либо не имеет CD привода или еще одна проблема была выявлена, который
препятствует работе компакт-дисков с музыкой.
Если возвращаемое значение выше 0,то все должно быть хорошо.
После того как аудио CD была инициализирована, вы можете
использовать все другие команды, доступные в AudioCD библиотеке...
Вот список тех команд, которые я использовал в своем примере проигрыватель компакт-дисков:
‘PlayAudioCD()’
Эта команда используется для
воспроизведения трека на текущем CD, который вставляется в дисковод. Эта команда
имеет два параметра. Первый трек Чтобы начать игру. А второй трек для остановки
воспроизведения после окончания. Так, например, если я назвал команду наподобие
следующей:
PlayAudioCD(1, 3)
Трек 1 начнет игру, а затем продолжить играть трек 2 и далее. Остановить после проигрывания трека 3.
‘StopAudioCD()’
Эта команда может быть
использован для остановки воспроизведение любого трека компакт-диска.
‘EjectAudioCD()’
Эта команда откроет или
закроет лоток на CD диске в зависимости от того, какой
параметр передается ей. Эта команда принимает только один параметр, и если
это параметр 1 лоток привода откроется, остановка воспроизведения и
извлечения CD.
Если параметр 0 привод лоток закроется, загрузкой
CD, который помещен в нем.
‘AudioCDStatus()’
Эта команда не имеет
параметров, но возвращает результат, который дает в реальном времени статус CD в
приводе. Если вы вызываете эту команду и возвращает 1, то диск не готов, это
означает, что диск не содержит ни CD или что лоток дисковода в настоящее время
закрыт. Если эта команда возвращает значение 0 , значит CD был обнаружен
правильно и находится в приводе CD, но не играет. Если эта команда возвращает
значение, которое выше 0, значит компакт-дисков играет CD дорожки. Число,
которое было фактически вернулись, это трек номер, который воспроизводится
‘AudioCDTracks()’
Эта команда не принимает
никаких параметров и при вызове, возвращает количество треков на CD загружается,
которые доступны для воспроизведения.
‘AudioCDTrackLength()’
Эта команда требует один
параметр И это номер трека из загруженного диска. Имея эту
информацию, команда вернет длину дорожки в секундах.
‘AudioCDTrackSeconds()’
Эта команда не
принимает никаких параметров. При вызове, она вернет количество времени, в
секундах с начала проигрывания трека CD.
Если вы посмотрите внимательнее к моему примеру проигрыватель компакт-дисков, я использовал команду WindowEvent () вместо WaitWindowEvent (). Это означает, что основной цикл будет работать всегда, независимо от обнаружено событие или нет. Мне нужна чтобы программа делала обновления статуса текста и графического пользовательского интерфейса CD. Если бы я не использовать эту команду, статус текст будет обновляться только если событие было обнаружено, что может быть или нет.
WindowEvent () и WaitWindowEvent () - более подробно описаны в главе 9
(Понимание Events).
PureBasic форум
http://purebasic.info/phpBB2/
Визуальный
редактор Visual
web