В этой лекции о Flatpack Records мы рассмотрим новую возможность Macromedia Flash MX, позволяющую динамически загружать MP3-файлы. В предыдущих версиях Flash при необходимости проигрывать MP3 внутри SWF приходилось использовать один из двух методов:
Для добавления звука на веб-сайт Flash MX этого больше не требует. Flash может вызывать внешние MP3-файлы с сервера и загружать их в главный фильм по запросу. Мы используем эту новую возможность на сайте Flatpack Records. Пользователи заходят на сайты своих любимых групп, чтобы прослушать новые песни любимых артистов, и нам хочется верить, что сайт Flatpack Records не является исключением.
Как правило, для прослушивания внешнего аудиоматериала на сайте, созданном не во Flash MX, нужно использовать надстройки, такие как RealOne Player или QuickTime, которые также должны быть установлены на пользовательских компьютерах.
На сайте Flatpack Records мы не хотим озадачиваться дополнительными надстройками, так как для просмотра сайта у пользователя уже должен быть установлен Flash Player 6. С его помощью можно прослушивать музыку на нашем сайте. Все пользователи, не имеющие Flash Player 6, должны быть предупреждены об этом перед входом на сайт Flatpack, и им должна быть предложена ссылка на сайт, с которого можно загрузить данный проигрыватель.
MP3 стал индустриальным стандартом высококачественного сжатия звука и наиболее распространенным форматом среди пользователей интернета, что подтверждается популярностью многих сайтов загрузки MP3-файлов. Этот формат больше всего подходит для нашего сайта.
Flash MX предоставляет два метода загрузки MP3: потоковый и не потоковый. Мы подробно расскажем о каждом из методов.
При непотоковом воспроизведении во Flash целиком загружается MP3-файл, а потом уже начинается воспроизведение. Этот способ лучше использовать, если необходимо высокое качество звука и недопустимо прерывание воспроизведения. Но в данном случае перед тем, как можно будет прослушивать файл (в случае с обычным модемным соединением), должно будет пройти немало времени. Пользователь будет вынужден ждать, пока файл загрузится полностью. По этой причине непотоковое воспроизведение обычно применяется к файлам небольшого размера, таким как озвучивание нажатия клавиш, но не к относительно большим файлам с музыкой.
Непотоковое воспроизведение полезно использовать для звуков событий, которые в фильме повторяются, так как их необходимо загружать на компьютер пользователя лишь один раз и сохранять локально до тех пор, пока Flash не вызовет их снова.
Потоковое воспроизведение начинается во время текущей загрузки файла без ожидания полной загрузки нужного содержимого с сайта. Это очень полезно при работе с большими звуковыми файлами, такими как файлы с музыкой. Преимущество здесь заключается в том, что посетителю сайта не нужно ждать полной загрузки файла. Воспроизведение начинается сразу после соединения с MP3-файлом и буферизации достаточной части воспроизводимого файла во Flash.
Недостатком этого способа является то, что звуковой файл должен воспроизводиться с определенной частотой передачи битов, в зависимости от скорости соединения пользователя. Если посетитель сайта использует для подключения модем 56k, ему нужно будет выбрать MP3-файл со скоростью передачи битов примерно 24
Для наглядности ниже приведены скорости передачи битов для воспроизведения MP3-файлов в соотношении с различными скоростями соединения.

Это идеализированные значения скорости передачи битов, а соединения, особенно модемные, весьма далеки от идеала. Теоретически можно получить скорость передачи битов в 40kbps на модеме 56k, но немногие пользователи смогут поддерживать такую скорость в течение воспроизведения четырехминутной песни. В случае с ADSL-соединением можно получить более высокую скорость передачи битов (около 250
Помните также, что при потоковой загрузке звук удаляется после воспроизведения, и для повторного проигрывания требуется новая загрузка. Здесь невозможно сделать replay или reused.
Существует набор приложений для кодирования MP3-файлов, а также бесчисленное множество кодировщиков в интернете для пользователей PC - попробуйте поискать по строке поиска "MP3 encoders" на http://download.com. В качестве альтернативы можно зайти на http://tucows.blueyonder.co.uk/mmeddia/cdrip95.html. К радости пользователей Mac, одним из лучших является продукт, им хорошо знакомый -
Использовать
iTunes и выберите Edit > Preferences: Щелкните на ярлыке Importing в верхней части диалогового окна Preferences и выберите Custom из ниспадающего списка Configuration. После этого нажмите OK.
Очень важно правильно установить частоту воспроизведения, так как в процессе тестирования выяснилось, что Flash "не любит" частоты воспроизведения, превышающие 22,050 кГц. Когда я впервые попробовал использовать рассматриваемый подход, я использовал несколько файлов
Как правило, нужно оставлять параметр Stereo Mode на значении Joint Stereo. Это улучшает качество звука без увеличения размера файла, в особенности при низкой скорости передачи битов. Joint Stereo позволяет одному каналу обрабатывать информацию, которая была изначально идентична в обоих каналах, в то время как другой канал передает исходную информацию. Научное обоснование в данном контексте не имеет особой важности, и будет вполне достаточно сказать, что с данными настройками все будет работать немного лучше.

iTunes в соответствующую папку в месте расположения файлов вашего веб-сайта. Файл будет находиться там до тех пор, пока вы не вызовете его из Flash.Файлы MP3 загружаются в SWF с использованием нового метода loadSound. В качестве примера ниже приведен сценарий для загрузки MP3-файла с именем friends_on_tv_56.mp3 в папке с именем audio.
mySoundObject = new Sound();
mySoundObject.loadSound("audio/friends_on_tv_56.mp3", true);
Объект Sound (в данном случае с именем mySoundObject ) выступает в роли контейнера аудиофайла MP3. MP3-файл с этого момента будет управляться ссылкой на имя mySoundObject. Последний параметр команды определяет, является ли воспроизведение звука потоковым. В данном случае эта опция установлена на значение true, поэтому при наличии достаточной скорости подключения, файл начнет воспроизводиться сразу после начала загрузки.
Посмотрим, как этот метод используется на практике применительно к сайту Flatpack Records. Чтобы вникнуть в суть рассматриваемого в данном параграфе материала, откройте файл flatpackrecords.swf и поэкспериментируйте с областью с аудиоданными.
В области звуковых данных в главном flatpackrecords.fla в фильме audio есть кадр с именем mp3.

Эта область содержит три звуковых дорожки группы Banthafodder с четырьмя различными параметрами загрузки для каждого файла. Я выбрал эти параметры для подгонки под три наиболее распространенных типа соединений, с помощью которых пользователи будут подключаться к сайту. Четвертый параметр 160kbps download дает пользователю возможность выбрать загрузку высококачественной версии звуковой дорожки, даже если он использует низкоскоростное соединение (если длительность загрузки не имеет значения).

ProgressBar с именем инстанса progressBar. Он будет предоставлять пользователю информацию о процессе загрузки звукового файла или потока. Рядом находится динамическое текстовое поле, информирующее пользователя о текущем состоянии звуковых файлов. Это поле имеет имя переменной loadingText и отображает три различных возможных состояния: поток, загрузка и воспроизведение.actions/labels фильма audio.progressBar._visible = false;
//
function progress(loadingTarget) {
progressBar._visible = true;
progressBar.setLoadTarget(loadingTarget);
this.onEnterFrame = function() {
if ((progressBar.getPercentComplete() == 100)
(playing == false)) {
this.onEnterFrame = undefined;
loadingTarget.start();
playing = true;
progressBar._visible = false;
if (loadingtext == "downloading") {
loadingtext = "playing";
}
}
};
}
Первая функция вам знакома, она реализует индикатор загрузки, однако в ней присутствуют некоторые особенности. Как и ранее, она используется для отслеживания входящей loadingTarget, которая, в данном случае, является MP3-файлом, загружаемым в звуковой объект. Следующий фрагмент выполняется в каждом кадре, проверяя, полностью ли загружен loadingTarget, и вопсроизводится ли аудиодорожка. Разберем эту часть кода последовательно.
this.onEnterFrame = undefined;
Как мы уже видели, это удаляет код onEnterFrame, что позволяет избежать ненужных проверок и сохранить дополнительное процессорное время. После этого имеем следующую строку.
loadingTarget.start ();
Она просто устанавливает звуковой объект на воспроизведение (игнорируется, если звуковой файл воспроизводится в потоковом режиме).
playing = true; progressBar._visible = fales;
Эти строки изменяют состояние флажка playing и делают компонент ProgressBar невидимым. Файл загружен! Этот блок кода заканчивается так.
if (loadingtext == "downeloading") {
loadingtext = "playing";
}
Эти строки просто меняют вывод динамического текстового поля для информирования пользователя о том, что аудиодорожка полностью загружена и начала воспроизводиться.
function loadStream(fileName) {
mp3 = new Sound();
mp3.stop();
mp3.loadSound("audio/" + fileName, true);
stream = true;
loadingtext = "streaming";
progress (mp3);
}
function downloadMp3(fileName) {
mp3 = new Sound();
mp3.stop();
mp3.loadSound("audio" + fileName, false);
stream = false;
playing = false;
loadingtext = "downloading";
progress (mp3);
}
Обе функции в первых строках создают новый звуковой объект. Следующая строка mp3.stop(); останавливает воспроизведение звука. Зачем останавливать воспроизведение, которое на самом деле еще не началось? Это делается потому, что пользователь мог сначала нажать на другую кнопку, в случае чего возможно начало воспроизведения звука в звуковом объекте mp3. Эта команда будет останавливать воспроизведение предыдущего звука перед началом загрузки нового MP3-файла в звуковой объект.
Следующие строки в обеих функциях отличаются друг от друга: одна из них реализует потоковое воспроизведение, а другая - загрузку файла. Как мы упоминали ранее, необходимыми параметрами для метода loadSound являются следующие.
mySoundObject.loadSound ("path/mp3 filename", "streaming flag") ;
С их помощью функция loadStream устанавливает потоковое воспроизведение (true), а функция downloadMp3 устанавливает этот параметр на значение false. Легко и просто. Следующие несколько строк устанавливают несколько переменных, относящихся к предыдущей функции, перед непосредственным вызовом функции progress. Код для кнопок будет просто вызывать одну из этих двух функций, и все необходимые действия будут осуществляться с помощью этой функции.
loadStream или downloadMp3, после чего ей передается соответствующее имя MP3-файла.Sound вызывает MP3-файл и настраивает потоковое воспроизведение соответствующим образом.progress, после чего ей передается имя звукового объекта.Теперь мы разобрали этот процесс, и обеспечить его работу посредством написания кода для кнопок довольно просто.
actions/labels фильма audio, которая устанавливает функции потокового воспроизведения/загрузки для каждой из кнопок.friends56k.onRelease = function() {
loadStream("friends_on_tv_56.mp3")
};
friendsISDN.onRelease = function() {
loadStream("friends_on_tv_isdn.mp3");
};
friendsADSL.onRelease = function() {
loadStream("friends_on_tv_adsl.mp3");
};
friendsDownload.onRelease = function() {
downloadMp3("friends_on_tv_adsl.mp3");
};
gender56k.onRelease = function() {
loadStream("gender_fiasco_56.mp3");
};
genderISDN.onRelease = function() {
loadStream("gender_fiasco_isdn.mp3");
};
genderADSL.onRelease = function() {
loadStream("gender_fiasco_adsl.mp3");
};
genderDownload.onRelease = function() {
downloadMp3("gender_fiasco_adsl.mp3");
};
yrRecord56k.onRelease = function() {
loadStream("your_record_56.mp3");
};
yrRecordlSDN.onRelease = function() {
loadStream("your_record_isdn.mp3");
};
yrRecordADSL.onRelease = function() {
loadStream("your_record_adsl.mp3");
};
yrRecordDownload.onRelease = function() {
downloadMp3("your_record_adsl.mp3");
};
Каждая кнопка вызывает одну из двух функций, передавая каждый раз определенный файл. Если пользователь щелкает на одной из кнопок потокового воспроизведения, динамический текст рядом с индикатором загрузки будет сообщать пользователю о том, что дорожка воспроизводится в потоковом режиме:

Если пользователь выбирает кнопку загрузки 160

По окончании загрузки файла начинается его воспроизведение, и текст опять меняется для отражения этого процесса.

Так как мы предоставили пользователю возможность выбора между тремя параметрами соединения, нам необходимы три MP3-файла для каждой звуковой дорожки, закодированных на соответствующих скоростях передачи битов для удовлетворения соответствующему выбору пользователя. Эти файлы необходимо назвать соответствующим образом и поместить их на сервере в папке, которая будет легко доступна для ActionScript. Вы можете посмотреть на организацию файлов Flatpack на компакт-диске, где отражена структура, которую необходимо использовать на сервере. Открыв компакт-диск в Windows Explorer или в окне Finder, вы увидите, что все файлы MP3 названы в логическом порядке и находятся в своей собственной папке Audio.

Управление данной структурой является очень важным аспектом, так как с ее помощью реализуется управление самим сайтом. Если другим разработчикам необходимо будет обновлять файлы по прошествии некоторого времени, как, собственно говоря, обычно и бывает на сайте музыкальных коллективов, они могут легко и быстро идентифицировать имя и расположение файлов и выяснить, к каким кнопкам они относятся в главном интерфейсе. Посмотрев работу этого сайта в режиме online, вы увидите, что даже файлы для потокового воспроизведения со скоростью 56k имеют достаточно приличное качество, и ничем не отличаются от потокового воспроизведения файлов Real Media на такой же скорости. MP3-технология также имеет преимущество при потоковом воспроизведении по более широкополосным каналам. Линия ADSL может легко воспроизводить в потоковом режиме файл MP3 с качеством компакт-диска.
Если вы никогда не загружали MP3-файл из интернета, то имейте в виду, что, как правило, он загружается прямо на ваш жесткий диск. Стандартные файлы для загрузки обычно преобразованы в ZIP-архивы (для PC) или в SIT (для Macintosh), что, как правило, вызывает открытие браузером менеджера загрузки или предоставления возможности сохранения. При работе с сайтом Flatpack Records этого не происходит, так как MP3-файл загружается перед началом воспроизведения. Может, это звучит несколько банально, но помните про авторские права на файлы в сети. Использование Flash Player 6 для воспроизведения музыки позволяет пользователю проигрывать или осуществлять предварительное прослушивание файла без непосредственного владения правами на него и создавать копии материала с качеством компакт-диска.
Если вы хотите разрешить пользователю загрузку файла (на жесткий диск), используйте для этого getURL c целевой ссылкой _blank на файл MP3, ZIP или SIT.
Последняя часть звуковой составляющей Flatpack Records содержит две различные звуковые дорожки для фонового воспроизведения на выбор пользователя. При загрузке MP3 аудиоданные воспроизводились, загружая MP3 в звуковые объекты, которые содержались в отдельных фильмах. При использовании этого метода звук исчезает, когда пользователь покидает определенный раздел сайта. Это идеально для раздела, в котором загружаются MP3, так как пользователю нужно будет прекращать воспроизведение проигрываемого аудио при выборе другой звуковой дорожки, однако в случае с фоновой темой звук должен проигрываться постоянно, независимо от того, в какой части сайта находится пользователь.
Для определения звукового объекта в предыдущих звуковых разделах использовалась следующая команда.
mp3 = new Sound();
Если заменить эту строку на _root.mp3 = new Sound();, звуковой объект будет создан в корневой временной шкале и, следовательно, проигрываться постоянно, даже при покидании пользователем временной шкалы с текущим фильмом. Посмотрим, как это работает на практике.
marker и waveholder. Пустой фильм с именем инстанса waveholder используется для содержания рисунка JPEG, отображающего создаваемые звуковым файлом колебания (взято из Macromedia SoundEdit 16). Фильм slider (с именем инстанса marker ) будет сопровождать колебания в синхронизации с музыкой для создания эффекта головки воспроизведения, как обычно бывает в программах для редактирования звука._root.backing.stop();
marker._visible = false;
function progress(loadingTarget) {
progressBar._visible = true;
progressBar.setLoadTarget(loadingTarget);
this.onEnterFrame = function() {
if ((progressBar.getPercentComplete() == 100)) {
this.onEnterFrame = undefined;
loadingTarget.start(0, 999);
progressBar._visible = false;
marker._visible = true;
marker. onEnterFrame = function() {
this._x = waveholder._x+(waveholder._width*
К(_root.backing.position)/(_root.backing.duration));
};
_root.soundcontrol._visible = true;
_root. soundPlay = true;
}
};
}
function playBackingTrack(imageFile, audioFile) {
_root.backing.stop();
_root.backing = new Sound();
loadMovie("images/"+imageFile, waveholder);
_root.backing.loadSound("audio/"+audioFile, false);
progress(_root.backing);
}
darkTheme.onRelease = function() {
playBackingTrack("bm_img1.jpg", "bm1.mp3");
};
lightTheme.onRelease = function() {
playBackingTrack("bm_img2.jpg", "bm2.mp3");
};
Обратите внимание на функцию progress: строка loadingTarget.start(0, 999); просто дает команду MP3 на начало воспроизведения после полной загрузки файла, которое будет повторяться 999 раз. Этого будет достаточно для любого посетителя сайта.
onEnterFrame.marker._visible = true;
marker.onEnterFrame = function() {
this._x = waveholder._x+(waveholder._width*
К(_root.backing.position)/(_root.backing.duration));
};
Здесь onEnterFrame использует три параметра для определения позиции головки воспроизведения.
Головка воспроизведения соотносится с шириной изображения звуковых волн так же, как _root.backing .position относится к _root.backing.duration. В представлении с помощью псевдокода это выглядит так.
playhead._x / waveformwidth = position / duration.
Для получения позиции головки воспроизведения playhead._x нам нужно умножить обе стороны этого уравнения на waveformwidth следующим образом.
playhead._x = waveformwidth * (position / duration)
Непосредственно в ActionScript использован код, указанный ниже. Обратите внимание, что мы добавили позицию _x фильма waveholder в начале уравнения.
this._x = waveholder._x+(waveholder._width* К(_root.backing.position)/(_root.backing.duration));
soundcontrol, что позволяет пользователю отключать звук и перезапускать его (при повторном нажатии), а также устанавливает флажок soundPlay на значение, соответствующее воспроизведению звука. Через некоторое время мы подробно изучим эту кнопку. А сейчас закончим рассмотрение того, что реализуется в остальной части кода.playBackingTrack.function playBackingTrack(imageFile, audioFile) {
_root.backing.stop();
_root.backing = new Sound();
loadMovie("images/"+imageFile, waveholder);
_root.backing.loadSound("audio/"+audioFile, false);
progress(_root.backing);
}
Большая часть этого кода вам уже знакома из предыдущих упражнений. Первая часть останавливает воспроизведение любой фоновой музыки, которая может уже проигрываться, и определяет звуковой объект _root.backing. Это позволяет избежать наложения звуков.
waveholder. Функция заканчивается вызовом функции progress для обеспечения работы компонента ProgressBar. Код окончательно активируется при щелчке пользователем на одной из двух кнопок (с именами инстансов darkTheme и lightTheme ).darkTheme.onRelease = function() {
playBackingTrack("bm_img1.jpg", "bm1.mp3");
};
lightTheme.onRelease - function() {
playBackingTrack("bm_img2.jpg", "bm2.mp3");
};
Кнопка управления звуком представляет собой переключатель, используемый для включения и выключения фоновой музыки.

Этот символ (становится видимым сразу после загрузки фоновой музыки - помните код, с которым мы недавно имели дело?) является двухкадровым фильмом. В кадре 1 находится рисунок, означающий воспроизведение звука, а второй кадр содержит рисунок, соответствующий отключенному звуку.
![]() |
![]() |
Код, управляющий рисунками и звуком, находится целиком в кадре 1 корневой временной шкалы.
soundcontrol._visible = false;
soundcontrol.onRelease = function() {
if (_root.soundPlay == true) {
_root.backing.stop(); soundcontrol.gotoAndStop(2);
_root.soundPlay = false;
} else if (_root.soundPlay == false) {
_root.backing.start(0, 999);
soundcontrol.gotoAndStop(1);
_root.soundPlay = true;
}
};
Вы могли заметить, что этот код похож на код для кнопки воспроизведения/паузы, использованный в одном из упражнений с видеоданными в предыдущей лекции. Мы проверяем состояние soundPlay (установлена в предыдущем упражнении) и в зависимости от результата:
Обратите внимание на строку кода _root.backing.start(0, 999);. Я зверским образом заставил пользователей слушать эту музыку 999 раз!
Хорошим продолжением начатого в данном случае было бы предоставление пользователю регулятора громкости. Это делается с помощью метода setVolume, при этом громкость звука разбивается на уровни от 0 до 100 (100 является громкостью по умолчанию). Ниже показано, как уменьшить громкость звука вдвое.
mySoundObject.setVolume (50);
Мы затронули лишь то, что можно сделать применительно к аудиоданным на вашем сайте. Раздел загрузки показывает, насколько легко можно добавлять звуковые файлы MP3 на сайт в интернетe, чтобы пользователь мог прослушивать их в потоковом режиме. Рассмотрев фоновый звуковой файл, мы показали, как можно реализовать непрерывное воспроизведение звука во всех разделах сайта, а также динамическую загрузку изображения JPEG. Представьте себе, насколько интересным может быть ваш сайт, если скомбинировать различные подходы с правильно подобранной музыкой!
Итак, вы узнали, что методы динамической загрузки во Flash открывают новые возможности для веб-дизайна. Неоспоримым преимуществом здесь является то, что пользователю не нужны какие-либо другие надстройки, поэтому не имеет значения, установлены ли у них программы Real Player, Windows Media или QuickTime; повсеместно распространенная надстройка Flash теперь может реализовывать очень многие возможности. Неплохо для надстройки, размер которой составляет лишь 746K для Mac и всего 383K для PC.
Рассмотрим весь материал, использованный нами на сайте Flatpack:
Для начала можно загрузить 10 различных фонов. Если сохранить их внутри FLA, это добавит до 171K. Далее мы имеем дело с обложками альбомов и фотодневником, в которых содержатся регулярно обновляемые изображения (в фотодневнике - ежедневно). Во Flash 5 нужно было открывать файл Flash и заново импортировать каждое изображение с последующим повторным экспортом и загрузкой SWF. Представьте, что это нужно проделывать с дневником тура каждый день! Наш подход намного проще. Любой пользователь с базовыми знаниями об оптимизации JPEG и загрузке сможет обновлять сайт.
В разделе с видеоданными видеофильм Banthafodder доступен для просмотра как в формате для низкоскоростных соединений, так и в высококачественном формате для соединений с высокими скоростями. Размеры версий фильма соответственно равны 264Kб и 2,2 Мб, поэтому, в случае непосредственного использования этих файлов в SWF в виде части главной страницы, загрузка сайта резко замедлялась бы. Видеодневник по своей работе похож на фотодневник, причем каждый фильм имеет размер около 150Kб. Видеомикшер занимает 232Kб, а калейдоскоп SWF имеет размер 108Kб. В целом, размер всего видеосодержимого был уменьшен благодаря эффективности Sorensen Spark, однако все же равен 2,6 Мб.
Наконец, Flash может осуществлять импорт MP3-файлов тогда и так, как это требуется. Если бы мы напрямую добавили на сайт все звуковые файлы, это прибавило бы к имеющемуся размеру еще порядка 8 Мб. Очевидно, что если бы вы поместили все это в один файл SWF, никто бы не дождался их загрузки, и были бы чрезвычайно расстроены, будучи заинтересованными в тематике сайта! Однако здесь пользователи могут выбирать, какие файлы MP3 они хотят прослушать на сайте и загружать их. В предыдущих версиях Flash, при необходимости импортировать MP3-файлы, нужно было добавлять их во Flash и кодировать их в виде SWF. Этот метод приемлем, однако он подразумевает, что каждый, кто будет обновлять сайт, должен иметь Flash и соответствующие знания о его использовании, а не только возможность использования !
Итак, мы создали сайт размером всего лишь 24Kб, так как он не содержит картинок, видео или звуковых данных при загрузке. Общий размер динамического медиа-содержимого равен 10 Мб - максимум возможностей при минимуме загружаемого объема.
В этой лекции о Flatpack Records мы рассмотрим новую возможность Macromedia Flash MX, позволяющую динамически загружать MP3-файлы. В предыдущих версиях Flash при необходимости проигрывать MP3 внутри SWF приходилось использовать один из двух методов:
Для добавления звука на веб-сайт Flash MX этого больше не требует. Flash может вызывать внешние MP3-файлы с сервера и загружать их в главный фильм по запросу. Мы используем эту новую возможность на сайте Flatpack Records. Пользователи заходят на сайты своих любимых групп, чтобы прослушать новые песни любимых артистов, и нам хочется верить, что сайт Flatpack Records не является исключением.
Как правило, для прослушивания внешнего аудиоматериала на сайте, созданном не во Flash MX, нужно использовать надстройки, такие как RealOne Player или QuickTime, которые также должны быть установлены на пользовательских компьютерах.
На сайте Flatpack Records мы не хотим озадачиваться дополнительными надстройками, так как для просмотра сайта у пользователя уже должен быть установлен Flash Player 6. С его помощью можно прослушивать музыку на нашем сайте. Все пользователи, не имеющие Flash Player 6, должны быть предупреждены об этом перед входом на сайт Flatpack, и им должна быть предложена ссылка на сайт, с которого можно загрузить данный проигрыватель.
MP3 стал индустриальным стандартом высококачественного сжатия звука и наиболее распространенным форматом среди пользователей интернета, что подтверждается популярностью многих сайтов загрузки MP3-файлов. Этот формат больше всего подходит для нашего сайта.
Flash MX предоставляет два метода загрузки MP3: потоковый и не потоковый. Мы подробно расскажем о каждом из методов.
При непотоковом воспроизведении во Flash целиком загружается MP3-файл, а потом уже начинается воспроизведение. Этот способ лучше использовать, если необходимо высокое качество звука и недопустимо прерывание воспроизведения. Но в данном случае перед тем, как можно будет прослушивать файл (в случае с обычным модемным соединением), должно будет пройти немало времени. Пользователь будет вынужден ждать, пока файл загрузится полностью. По этой причине непотоковое воспроизведение обычно применяется к файлам небольшого размера, таким как озвучивание нажатия клавиш, но не к относительно большим файлам с музыкой.
Непотоковое воспроизведение полезно использовать для звуков событий, которые в фильме повторяются, так как их необходимо загружать на компьютер пользователя лишь один раз и сохранять локально до тех пор, пока Flash не вызовет их снова.
Потоковое воспроизведение начинается во время текущей загрузки файла без ожидания полной загрузки нужного содержимого с сайта. Это очень полезно при работе с большими звуковыми файлами, такими как файлы с музыкой. Преимущество здесь заключается в том, что посетителю сайта не нужно ждать полной загрузки файла. Воспроизведение начинается сразу после соединения с MP3-файлом и буферизации достаточной части воспроизводимого файла во Flash.
Недостатком этого способа является то, что звуковой файл должен воспроизводиться с определенной частотой передачи битов, в зависимости от скорости соединения пользователя. Если посетитель сайта использует для подключения модем 56k, ему нужно будет выбрать MP3-файл со скоростью передачи битов примерно 24
Для наглядности ниже приведены скорости передачи битов для воспроизведения MP3-файлов в соотношении с различными скоростями соединения.

Это идеализированные значения скорости передачи битов, а соединения, особенно модемные, весьма далеки от идеала. Теоретически можно получить скорость передачи битов в 40kbps на модеме 56k, но немногие пользователи смогут поддерживать такую скорость в течение воспроизведения четырехминутной песни. В случае с ADSL-соединением можно получить более высокую скорость передачи битов (около 250
Помните также, что при потоковой загрузке звук удаляется после воспроизведения, и для повторного проигрывания требуется новая загрузка. Здесь невозможно сделать replay или reused.
Существует набор приложений для кодирования MP3-файлов, а также бесчисленное множество кодировщиков в интернете для пользователей PC - попробуйте поискать по строке поиска "MP3 encoders" на http://download.com. В качестве альтернативы можно зайти на http://tucows.blueyonder.co.uk/mmeddia/cdrip95.html. К радости пользователей Mac, одним из лучших является продукт, им хорошо знакомый -
Использовать
iTunes и выберите Edit > Preferences: Щелкните на ярлыке Importing в верхней части диалогового окна Preferences и выберите Custom из ниспадающего списка Configuration. После этого нажмите OK.
Очень важно правильно установить частоту воспроизведения, так как в процессе тестирования выяснилось, что Flash "не любит" частоты воспроизведения, превышающие 22,050 кГц. Когда я впервые попробовал использовать рассматриваемый подход, я использовал несколько файлов
Как правило, нужно оставлять параметр Stereo Mode на значении Joint Stereo. Это улучшает качество звука без увеличения размера файла, в особенности при низкой скорости передачи битов. Joint Stereo позволяет одному каналу обрабатывать информацию, которая была изначально идентична в обоих каналах, в то время как другой канал передает исходную информацию. Научное обоснование в данном контексте не имеет особой важности, и будет вполне достаточно сказать, что с данными настройками все будет работать немного лучше.

iTunes в соответствующую папку в месте расположения файлов вашего веб-сайта. Файл будет находиться там до тех пор, пока вы не вызовете его из Flash.Файлы MP3 загружаются в SWF с использованием нового метода loadSound. В качестве примера ниже приведен сценарий для загрузки MP3-файла с именем friends_on_tv_56.mp3 в папке с именем audio.
mySoundObject = new Sound();
mySoundObject.loadSound("audio/friends_on_tv_56.mp3", true);
Объект Sound (в данном случае с именем mySoundObject ) выступает в роли контейнера аудиофайла MP3. MP3-файл с этого момента будет управляться ссылкой на имя mySoundObject. Последний параметр команды определяет, является ли воспроизведение звука потоковым. В данном случае эта опция установлена на значение true, поэтому при наличии достаточной скорости подключения, файл начнет воспроизводиться сразу после начала загрузки.
Посмотрим, как этот метод используется на практике применительно к сайту Flatpack Records. Чтобы вникнуть в суть рассматриваемого в данном параграфе материала, откройте файл flatpackrecords.swf и поэкспериментируйте с областью с аудиоданными.
В области звуковых данных в главном flatpackrecords.fla в фильме audio есть кадр с именем mp3.

Эта область содержит три звуковых дорожки группы Banthafodder с четырьмя различными параметрами загрузки для каждого файла. Я выбрал эти параметры для подгонки под три наиболее распространенных типа соединений, с помощью которых пользователи будут подключаться к сайту. Четвертый параметр 160kbps download дает пользователю возможность выбрать загрузку высококачественной версии звуковой дорожки, даже если он использует низкоскоростное соединение (если длительность загрузки не имеет значения).

ProgressBar с именем инстанса progressBar. Он будет предоставлять пользователю информацию о процессе загрузки звукового файла или потока. Рядом находится динамическое текстовое поле, информирующее пользователя о текущем состоянии звуковых файлов. Это поле имеет имя переменной loadingText и отображает три различных возможных состояния: поток, загрузка и воспроизведение.actions/labels фильма audio.progressBar._visible = false;
//
function progress(loadingTarget) {
progressBar._visible = true;
progressBar.setLoadTarget(loadingTarget);
this.onEnterFrame = function() {
if ((progressBar.getPercentComplete() == 100)
(playing == false)) {
this.onEnterFrame = undefined;
loadingTarget.start();
playing = true;
progressBar._visible = false;
if (loadingtext == "downloading") {
loadingtext = "playing";
}
}
};
}
Первая функция вам знакома, она реализует индикатор загрузки, однако в ней присутствуют некоторые особенности. Как и ранее, она используется для отслеживания входящей loadingTarget, которая, в данном случае, является MP3-файлом, загружаемым в звуковой объект. Следующий фрагмент выполняется в каждом кадре, проверяя, полностью ли загружен loadingTarget, и вопсроизводится ли аудиодорожка. Разберем эту часть кода последовательно.
this.onEnterFrame = undefined;
Как мы уже видели, это удаляет код onEnterFrame, что позволяет избежать ненужных проверок и сохранить дополнительное процессорное время. После этого имеем следующую строку.
loadingTarget.start ();
Она просто устанавливает звуковой объект на воспроизведение (игнорируется, если звуковой файл воспроизводится в потоковом режиме).
playing = true; progressBar._visible = fales;
Эти строки изменяют состояние флажка playing и делают компонент ProgressBar невидимым. Файл загружен! Этот блок кода заканчивается так.
if (loadingtext == "downeloading") {
loadingtext = "playing";
}
Эти строки просто меняют вывод динамического текстового поля для информирования пользователя о том, что аудиодорожка полностью загружена и начала воспроизводиться.
function loadStream(fileName) {
mp3 = new Sound();
mp3.stop();
mp3.loadSound("audio/" + fileName, true);
stream = true;
loadingtext = "streaming";
progress (mp3);
}
function downloadMp3(fileName) {
mp3 = new Sound();
mp3.stop();
mp3.loadSound("audio" + fileName, false);
stream = false;
playing = false;
loadingtext = "downloading";
progress (mp3);
}
Обе функции в первых строках создают новый звуковой объект. Следующая строка mp3.stop(); останавливает воспроизведение звука. Зачем останавливать воспроизведение, которое на самом деле еще не началось? Это делается потому, что пользователь мог сначала нажать на другую кнопку, в случае чего возможно начало воспроизведения звука в звуковом объекте mp3. Эта команда будет останавливать воспроизведение предыдущего звука перед началом загрузки нового MP3-файла в звуковой объект.
Следующие строки в обеих функциях отличаются друг от друга: одна из них реализует потоковое воспроизведение, а другая - загрузку файла. Как мы упоминали ранее, необходимыми параметрами для метода loadSound являются следующие.
mySoundObject.loadSound ("path/mp3 filename", "streaming flag") ;
С их помощью функция loadStream устанавливает потоковое воспроизведение (true), а функция downloadMp3 устанавливает этот параметр на значение false. Легко и просто. Следующие несколько строк устанавливают несколько переменных, относящихся к предыдущей функции, перед непосредственным вызовом функции progress. Код для кнопок будет просто вызывать одну из этих двух функций, и все необходимые действия будут осуществляться с помощью этой функции.
loadStream или downloadMp3, после чего ей передается соответствующее имя MP3-файла.Sound вызывает MP3-файл и настраивает потоковое воспроизведение соответствующим образом.progress, после чего ей передается имя звукового объекта.Теперь мы разобрали этот процесс, и обеспечить его работу посредством написания кода для кнопок довольно просто.
actions/labels фильма audio, которая устанавливает функции потокового воспроизведения/загрузки для каждой из кнопок.friends56k.onRelease = function() {
loadStream("friends_on_tv_56.mp3")
};
friendsISDN.onRelease = function() {
loadStream("friends_on_tv_isdn.mp3");
};
friendsADSL.onRelease = function() {
loadStream("friends_on_tv_adsl.mp3");
};
friendsDownload.onRelease = function() {
downloadMp3("friends_on_tv_adsl.mp3");
};
gender56k.onRelease = function() {
loadStream("gender_fiasco_56.mp3");
};
genderISDN.onRelease = function() {
loadStream("gender_fiasco_isdn.mp3");
};
genderADSL.onRelease = function() {
loadStream("gender_fiasco_adsl.mp3");
};
genderDownload.onRelease = function() {
downloadMp3("gender_fiasco_adsl.mp3");
};
yrRecord56k.onRelease = function() {
loadStream("your_record_56.mp3");
};
yrRecordlSDN.onRelease = function() {
loadStream("your_record_isdn.mp3");
};
yrRecordADSL.onRelease = function() {
loadStream("your_record_adsl.mp3");
};
yrRecordDownload.onRelease = function() {
downloadMp3("your_record_adsl.mp3");
};
Каждая кнопка вызывает одну из двух функций, передавая каждый раз определенный файл. Если пользователь щелкает на одной из кнопок потокового воспроизведения, динамический текст рядом с индикатором загрузки будет сообщать пользователю о том, что дорожка воспроизводится в потоковом режиме:

Если пользователь выбирает кнопку загрузки 160

По окончании загрузки файла начинается его воспроизведение, и текст опять меняется для отражения этого процесса.

Так как мы предоставили пользователю возможность выбора между тремя параметрами соединения, нам необходимы три MP3-файла для каждой звуковой дорожки, закодированных на соответствующих скоростях передачи битов для удовлетворения соответствующему выбору пользователя. Эти файлы необходимо назвать соответствующим образом и поместить их на сервере в папке, которая будет легко доступна для ActionScript. Вы можете посмотреть на организацию файлов Flatpack на компакт-диске, где отражена структура, которую необходимо использовать на сервере. Открыв компакт-диск в Windows Explorer или в окне Finder, вы увидите, что все файлы MP3 названы в логическом порядке и находятся в своей собственной папке Audio.

Управление данной структурой является очень важным аспектом, так как с ее помощью реализуется управление самим сайтом. Если другим разработчикам необходимо будет обновлять файлы по прошествии некоторого времени, как, собственно говоря, обычно и бывает на сайте музыкальных коллективов, они могут легко и быстро идентифицировать имя и расположение файлов и выяснить, к каким кнопкам они относятся в главном интерфейсе. Посмотрев работу этого сайта в режиме online, вы увидите, что даже файлы для потокового воспроизведения со скоростью 56k имеют достаточно приличное качество, и ничем не отличаются от потокового воспроизведения файлов Real Media на такой же скорости. MP3-технология также имеет преимущество при потоковом воспроизведении по более широкополосным каналам. Линия ADSL может легко воспроизводить в потоковом режиме файл MP3 с качеством компакт-диска.
Если вы никогда не загружали MP3-файл из интернета, то имейте в виду, что, как правило, он загружается прямо на ваш жесткий диск. Стандартные файлы для загрузки обычно преобразованы в ZIP-архивы (для PC) или в SIT (для Macintosh), что, как правило, вызывает открытие браузером менеджера загрузки или предоставления возможности сохранения. При работе с сайтом Flatpack Records этого не происходит, так как MP3-файл загружается перед началом воспроизведения. Может, это звучит несколько банально, но помните про авторские права на файлы в сети. Использование Flash Player 6 для воспроизведения музыки позволяет пользователю проигрывать или осуществлять предварительное прослушивание файла без непосредственного владения правами на него и создавать копии материала с качеством компакт-диска.
Если вы хотите разрешить пользователю загрузку файла (на жесткий диск), используйте для этого getURL c целевой ссылкой _blank на файл MP3, ZIP или SIT.
Последняя часть звуковой составляющей Flatpack Records содержит две различные звуковые дорожки для фонового воспроизведения на выбор пользователя. При загрузке MP3 аудиоданные воспроизводились, загружая MP3 в звуковые объекты, которые содержались в отдельных фильмах. При использовании этого метода звук исчезает, когда пользователь покидает определенный раздел сайта. Это идеально для раздела, в котором загружаются MP3, так как пользователю нужно будет прекращать воспроизведение проигрываемого аудио при выборе другой звуковой дорожки, однако в случае с фоновой темой звук должен проигрываться постоянно, независимо от того, в какой части сайта находится пользователь.
Для определения звукового объекта в предыдущих звуковых разделах использовалась следующая команда.
mp3 = new Sound();
Если заменить эту строку на _root.mp3 = new Sound();, звуковой объект будет создан в корневой временной шкале и, следовательно, проигрываться постоянно, даже при покидании пользователем временной шкалы с текущим фильмом. Посмотрим, как это работает на практике.
marker и waveholder. Пустой фильм с именем инстанса waveholder используется для содержания рисунка JPEG, отображающего создаваемые звуковым файлом колебания (взято из Macromedia SoundEdit 16). Фильм slider (с именем инстанса marker ) будет сопровождать колебания в синхронизации с музыкой для создания эффекта головки воспроизведения, как обычно бывает в программах для редактирования звука._root.backing.stop();
marker._visible = false;
function progress(loadingTarget) {
progressBar._visible = true;
progressBar.setLoadTarget(loadingTarget);
this.onEnterFrame = function() {
if ((progressBar.getPercentComplete() == 100)) {
this.onEnterFrame = undefined;
loadingTarget.start(0, 999);
progressBar._visible = false;
marker._visible = true;
marker. onEnterFrame = function() {
this._x = waveholder._x+(waveholder._width*
К(_root.backing.position)/(_root.backing.duration));
};
_root.soundcontrol._visible = true;
_root. soundPlay = true;
}
};
}
function playBackingTrack(imageFile, audioFile) {
_root.backing.stop();
_root.backing = new Sound();
loadMovie("images/"+imageFile, waveholder);
_root.backing.loadSound("audio/"+audioFile, false);
progress(_root.backing);
}
darkTheme.onRelease = function() {
playBackingTrack("bm_img1.jpg", "bm1.mp3");
};
lightTheme.onRelease = function() {
playBackingTrack("bm_img2.jpg", "bm2.mp3");
};
Обратите внимание на функцию progress: строка loadingTarget.start(0, 999); просто дает команду MP3 на начало воспроизведения после полной загрузки файла, которое будет повторяться 999 раз. Этого будет достаточно для любого посетителя сайта.
onEnterFrame.marker._visible = true;
marker.onEnterFrame = function() {
this._x = waveholder._x+(waveholder._width*
К(_root.backing.position)/(_root.backing.duration));
};
Здесь onEnterFrame использует три параметра для определения позиции головки воспроизведения.
Головка воспроизведения соотносится с шириной изображения звуковых волн так же, как _root.backing .position относится к _root.backing.duration. В представлении с помощью псевдокода это выглядит так.
playhead._x / waveformwidth = position / duration.
Для получения позиции головки воспроизведения playhead._x нам нужно умножить обе стороны этого уравнения на waveformwidth следующим образом.
playhead._x = waveformwidth * (position / duration)
Непосредственно в ActionScript использован код, указанный ниже. Обратите внимание, что мы добавили позицию _x фильма waveholder в начале уравнения.
this._x = waveholder._x+(waveholder._width* К(_root.backing.position)/(_root.backing.duration));
soundcontrol, что позволяет пользователю отключать звук и перезапускать его (при повторном нажатии), а также устанавливает флажок soundPlay на значение, соответствующее воспроизведению звука. Через некоторое время мы подробно изучим эту кнопку. А сейчас закончим рассмотрение того, что реализуется в остальной части кода.playBackingTrack.function playBackingTrack(imageFile, audioFile) {
_root.backing.stop();
_root.backing = new Sound();
loadMovie("images/"+imageFile, waveholder);
_root.backing.loadSound("audio/"+audioFile, false);
progress(_root.backing);
}
Большая часть этого кода вам уже знакома из предыдущих упражнений. Первая часть останавливает воспроизведение любой фоновой музыки, которая может уже проигрываться, и определяет звуковой объект _root.backing. Это позволяет избежать наложения звуков.
waveholder. Функция заканчивается вызовом функции progress для обеспечения работы компонента ProgressBar. Код окончательно активируется при щелчке пользователем на одной из двух кнопок (с именами инстансов darkTheme и lightTheme ).darkTheme.onRelease = function() {
playBackingTrack("bm_img1.jpg", "bm1.mp3");
};
lightTheme.onRelease - function() {
playBackingTrack("bm_img2.jpg", "bm2.mp3");
};
Кнопка управления звуком представляет собой переключатель, используемый для включения и выключения фоновой музыки.

Этот символ (становится видимым сразу после загрузки фоновой музыки - помните код, с которым мы недавно имели дело?) является двухкадровым фильмом. В кадре 1 находится рисунок, означающий воспроизведение звука, а второй кадр содержит рисунок, соответствующий отключенному звуку.
![]() |
![]() |
Код, управляющий рисунками и звуком, находится целиком в кадре 1 корневой временной шкалы.
soundcontrol._visible = false;
soundcontrol.onRelease = function() {
if (_root.soundPlay == true) {
_root.backing.stop(); soundcontrol.gotoAndStop(2);
_root.soundPlay = false;
} else if (_root.soundPlay == false) {
_root.backing.start(0, 999);
soundcontrol.gotoAndStop(1);
_root.soundPlay = true;
}
};
Вы могли заметить, что этот код похож на код для кнопки воспроизведения/паузы, использованный в одном из упражнений с видеоданными в предыдущей лекции. Мы проверяем состояние soundPlay (установлена в предыдущем упражнении) и в зависимости от результата:
Обратите внимание на строку кода _root.backing.start(0, 999);. Я зверским образом заставил пользователей слушать эту музыку 999 раз!
Хорошим продолжением начатого в данном случае было бы предоставление пользователю регулятора громкости. Это делается с помощью метода setVolume, при этом громкость звука разбивается на уровни от 0 до 100 (100 является громкостью по умолчанию). Ниже показано, как уменьшить громкость звука вдвое.
mySoundObject.setVolume (50);
Мы затронули лишь то, что можно сделать применительно к аудиоданным на вашем сайте. Раздел загрузки показывает, насколько легко можно добавлять звуковые файлы MP3 на сайт в интернетe, чтобы пользователь мог прослушивать их в потоковом режиме. Рассмотрев фоновый звуковой файл, мы показали, как можно реализовать непрерывное воспроизведение звука во всех разделах сайта, а также динамическую загрузку изображения JPEG. Представьте себе, насколько интересным может быть ваш сайт, если скомбинировать различные подходы с правильно подобранной музыкой!
Итак, вы узнали, что методы динамической загрузки во Flash открывают новые возможности для веб-дизайна. Неоспоримым преимуществом здесь является то, что пользователю не нужны какие-либо другие надстройки, поэтому не имеет значения, установлены ли у них программы Real Player, Windows Media или QuickTime; повсеместно распространенная надстройка Flash теперь может реализовывать очень многие возможности. Неплохо для надстройки, размер которой составляет лишь 746K для Mac и всего 383K для PC.
Рассмотрим весь материал, использованный нами на сайте Flatpack:
Для начала можно загрузить 10 различных фонов. Если сохранить их внутри FLA, это добавит до 171K. Далее мы имеем дело с обложками альбомов и фотодневником, в которых содержатся регулярно обновляемые изображения (в фотодневнике - ежедневно). Во Flash 5 нужно было открывать файл Flash и заново импортировать каждое изображение с последующим повторным экспортом и загрузкой SWF. Представьте, что это нужно проделывать с дневником тура каждый день! Наш подход намного проще. Любой пользователь с базовыми знаниями об оптимизации JPEG и загрузке сможет обновлять сайт.
В разделе с видеоданными видеофильм Banthafodder доступен для просмотра как в формате для низкоскоростных соединений, так и в высококачественном формате для соединений с высокими скоростями. Размеры версий фильма соответственно равны 264Kб и 2,2 Мб, поэтому, в случае непосредственного использования этих файлов в SWF в виде части главной страницы, загрузка сайта резко замедлялась бы. Видеодневник по своей работе похож на фотодневник, причем каждый фильм имеет размер около 150Kб. Видеомикшер занимает 232Kб, а калейдоскоп SWF имеет размер 108Kб. В целом, размер всего видеосодержимого был уменьшен благодаря эффективности Sorensen Spark, однако все же равен 2,6 Мб.
Наконец, Flash может осуществлять импорт MP3-файлов тогда и так, как это требуется. Если бы мы напрямую добавили на сайт все звуковые файлы, это прибавило бы к имеющемуся размеру еще порядка 8 Мб. Очевидно, что если бы вы поместили все это в один файл SWF, никто бы не дождался их загрузки, и были бы чрезвычайно расстроены, будучи заинтересованными в тематике сайта! Однако здесь пользователи могут выбирать, какие файлы MP3 они хотят прослушать на сайте и загружать их. В предыдущих версиях Flash, при необходимости импортировать MP3-файлы, нужно было добавлять их во Flash и кодировать их в виде SWF. Этот метод приемлем, однако он подразумевает, что каждый, кто будет обновлять сайт, должен иметь Flash и соответствующие знания о его использовании, а не только возможность использования !
Итак, мы создали сайт размером всего лишь 24Kб, так как он не содержит картинок, видео или звуковых данных при загрузке. Общий размер динамического медиа-содержимого равен 10 Мб - максимум возможностей при минимуме загружаемого объема.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.