Параметры
|
Значения параметров
|
оптимальные
|
допустимые
|
Температура
|
20-22 °С
|
17-22 °С
|
Относительная влажность
|
40-60 %
|
до 75%
|
Скорость движения воздуха
|
0,1 м/с
|
не более 0,3 м/с
|
Для
обеспечения нормальных условий труда необходимо придерживаться вышеуказанных
данных. В целях поддержания температуры и влажности воздуха в помещении можно
использовать системы отопления, вентиляции и кондиционирования воздуха.
На исследуемом
предприятии температура воздуха, влажность и скорость движения воздуха держится
в рамках оптимальных параметров. Вредные вещества в воздухе рабочей зоны не
превышают предельной допустимой концентрации.
К современному
освещению помещений, где работают с вычислительной техникой, предъявляют
высокие требования как гигиенического, так и технического характера. Правильно
спроектированное и выполненное освещение обеспечивает высокий уровень
работоспособности, оказывает положительное психологическое воздействие,
способствует повышению производительности труда. Условия деятельности
пользователя в системе "человек-машина" связаны с явным преобладанием
зрительной информации – до 90% общего объема.
В помещениях с
компьютерной техникой применяется совмещенная система освещения. К таким
системам предъявляют следующие требования:
- соответствие
уровня освещенности рабочих мест характеру выполняе-мых зрительных работ;
- достаточно
равномерное распределение яркости на рабочих поверхнос-тях и в окружающем
пространстве;
- отсутствие
резких теней, прямой и отраженной блеклости;
- постоянство
освещенности во времени;
- оптимальная
направленность излучаемого осветительными приборами светового потока;
- долговечность,
экономичность, электро- и пожаробезопасность, эстетич-ность, удобство и
простота эксплуатации.
Для
искусственного освещения помещений с вычислительной техникой следует
использовать главным образом люминесцентные лампы, у которых высокая световая
отдача (до 75 лм/Вт и более); продолжительный срок службы (до 10 000 ч), малая
яркость светящейся поверхности, близкий к естественному спектр излучения, что
обеспечивает хорошую цветопередачу. Наиболее приемлемыми являются
люминесцентные лампы белого света и тепло-белого света мощностью 20, 40, 80 Вт.
Для исключения
засветки экранов дисплеев прямым световым потоком, светильники общего освещения
располагают сбоку от рабочего места, параллельно линии зрения оператора и стене
с окнами. Такое расположение светильников позволяет производить их
последовательное включение по мере необходимости и исключает раздражение глаз
чередующимися полосами света и тени, возникающее при поперечном расположении
светильников.
Для обеспечения
оптимальных условий зрительных работ пользователей дисплейных устройств
необходима определенная световая отделка помещения. Для внутренней отделки интерьера
помещений, где расположены ПЭВМ, должны использоваться диффузно-отражающие
материалы с коэффициентом отражения для потолка - 0,7 - 0,8; для стен - 0,5 -
0,6; для пола - 0,3 -0,5.
На рабочем месте программиста зрительные работы являются средней точности
и относятся к IV разряду, так как наименьший размер объекта различения
изменяется от 0,5 до 1,0 мм. Контраст объекта с фоном и характеристика фона
средние, поэтому зрительные работы относятся к подразделу «в». Поэтому норма
освещенности на
поверхности стола в зоне размещения рабочего документа должна быть 300 - 500
лк. Освещение не должно создавать бликов на поверхности экрана, а его
освещенность не должна быть более 300 лк.
Освещенность
рабочего места пользователя на исследуемом предприятии является совмещенной,
расположение рабочих мест исключает попадание прямых солнечных лучей на экран
дисплея и в глаза. В качестве источника искусственного освещения используют
лампы дневного света.
Правильно спроектированное
производственное освещение благотворно влияет на производственную среду,
оказывая положительное психологическое воздействие на работающего человека,
повышает безопасность труда и снижает травматизм.
Недостаточность
освещения приводит к напряжению зрения, ослабляет внимание, приводит к
наступлению преждевременной утомленности. Чрезмерно яркое освещение вызывает
ослепление, раздражение и резь в глазах. Неправильное направление света на
рабочем месте может создавать резкие тени, блики, дезориентировать работающего.
Все эти причины могут привести к несчастному случаю или профзаболеваниям,
поэтому столь важен правильный расчет освещенности.
Расчет
освещенности:
Рациональное
освещение рабочего места является одним из важнейших факторов, влияющих на
эффективность трудовой деятельности человека, предупреждающих травматизм и
профессиональные заболевания. Правильно организованное освещение создает
благоприятные условия труда, повышает работоспособность и производительность
труда. Освещение на рабочем месте программиста должно быть таким, чтобы
работник мог без напряжения зрения выполнять свою работу. Утомляемость органов
зрения зависит от ряда причин:
- недостаточность
освещенности;
- чрезмерная
освещенность;
- неправильное
направление света.
Недостаточность
освещения приводит к напряжению зрения, ослабляет внимание, приводит к
наступлению преждевременной утомленности. Чрезмерно яркое освещение вызывает
ослепление, раздражение и резь в глазах. Неправильное направление света на
рабочем месте может создавать резкие тени, блики, дезориентировать работающего.
Все эти причины могут привести к несчастному случаю или профзаболеваниям,
поэтому столь важен правильный расчет освещенности.
Расчет
освещенности рабочего места сводится к выбору системы освещения, определению
необходимого числа светильников, их типа и размещения. Процесс работы
программиста в таких условиях, когда естественное освещение недостаточно или
отсутствует. Исходя из этого, рассчитаем параметры искусственного освещения.
Искусственное
освещение выполняется посредством электрических источников света двух видов:
ламп накаливания и люминесцентных ламп. Будем использовать люминесцентные
лампы, которые по сравнению с лампами накаливания имеют существенные
преимущества:
- по
спектральному составу света они близки к дневному, естественному освещению;
- обладают более
высоким КПД (в 1.5-2 раза выше, чем КПД ламп нака-ливания);
- обладают
повышенной светоотдачей (в 3-4 раза выше, чем у ламп нака-ливания);
- более
длительный срок службы.
Расчет освещения производится
для комнаты площадью 36 м2 , ширина которой 4.9 м, высота - 4.2 м.
Воспользуемся методом светового потока.
Для определения
количества светильников определим световой поток, падающий на поверхность по
формуле:
,
где F -
рассчитываемый световой поток, Лм;
Е - нормированная
минимальная освещенность, Лк (определяется по таблице).
Работу
программиста, в соответствии с этой таблицей, можно отнести к разряду точных
работ, следовательно, минимальная освещенность будет Е = 300 Лк при
газоразрядных лампах;
S - площадь
освещаемого помещения ( в нашем случае S = 36 м2 );
Z - отношение
средней освещенности к минимальной (обычно принимается равным 1.1-1.2 , пусть Z
= 1.1);
К - коэффициент
запаса, учитывающий уменьшение светового потока лампы в результате загрязнения
светильников в процессе эксплуатации (его значение определяется по таблице
коэффициентов запаса для различных помещений и в нашем случае К = 1.5);
n - коэффициент
использования, (выражается отношением светового потока, падающего на расчетную
поверхность, к суммарному потоку всех ламп и исчисляется в долях единицы;
зависит от характеристик светильника, размеров помещения, окраски стен и
потолка, характеризуемых коэффициентами отражения от стен (Рс) и потолка (Рп)),
значение коэффициентов Рс и Рп определим по таблице зависимостей коэффициентов
отражения от характера поверхности: Рс=30%, Рп=50%. Значение n определим по
таблице коэффициентов использования различных светильников. Для этого вычислим
индекс помещения по формуле:
,
где S - площадь
помещения, S = 36 м2;
h - расчетная
высота подвеса, h = 3.39 м;
A - ширина
помещения, А = 4.9 м;
В - длина
помещения, В = 7.35 м.
Подставив
значения получим:
Зная индекс
помещения I, Рс и Рп, по таблице находим n = 0.28.
Подставим все
значения в формулу для определения светового потока F:
Лм
Для освещения
выбираем люминесцентные лампы типа ЛБ40-1, световой поток которых F = 4320 Лк.
Рассчитаем
необходимое количество ламп по формуле:
,
где N -
определяемое число ламп;
F - световой
поток, F = 63642,857 Лм;
Fл-
световой поток лампы, Fл = 4320 Лм.
шт.
При выборе
осветительных приборов используем светильники типа ОД. Каждый светильник
комплектуется двумя лампами. Размещаются светильники двумя рядами, по четыре в
каждом ряду.
Особое внимание к
пожарной безопасности является обоснованным, так как в случае пожара будет
нанесен значительный материальный ущерб (даже если в помещении находится один
компьютер), и возможна угроза жизни и здоровью людей.
Источниками
пожара при работе программиста с компьютером могут быть ЭВМ, электропроводка,
действующие системы отопления, вентиляции и кондиционирования воздуха, бытовые
приборы.
В современных ЭВМ
очень высокая плотность размещения элементов электронных схем. В непосредственной
близости друг от друга располагаются соединительные провода, коммутационные
кабели. При протекании по ним электрического тока выделяется значительное
количество теплоты, что может привести к повышению температуры отдельных узлов
до 80-100 °С. При этом возможно оплавление изоляции соединительных проводов, их
оголение и, как следствие, короткое замыкание, которое сопровождается
искрением, ведет к недопустимым перегрузкам элементов электронных схем.
Последние, перегреваясь, сгорают с разбрызгиванием искр.
Для отвода
избыточной теплоты от ЭВМ служат системы вентиляции и кондиционирования
воздуха. Однако постоянно действующие системы представляют дополнительную
пожарную опасность, так как, с одной стороны, они обеспечивают подачу
кислорода-окислителя, с другой стороны - при возникновении пожара быстро
распространяют огонь и продукты горения по всем устройствам.
Помещения, где
установлена вычислительная техника, относятся к категории «Д» – помещения, где
находятся твердые горючие и трудно горючие вещества и материалы в холодном
состоянии. Возможной причиной возникновения пожара может быть неисправность
электрооборудования. Для предупреждения этого необходимо проводить
профилактические осмотры оборудования.
Пожарная
профилактика - это комплекс организационных и технических мероприятий, направленных на
обеспечение безопасности людей, на предотвращение пожара, ограничение его
распространения, а также на создание условий для успешного тушения пожара.
При работе в
помещениях категории «Д» необходимо:
– выполнять правила
пожарной безопасности помещений для ЭВМ, хранилищ информации, установок
кондиционирования и систем энергопитания;
– выполнять
правила пожарной безопасности при ремонтно-профилактических работах;
– установить в
помещении систему автоматической пожарной сигнализации пожаротушения;
– хранить горючие
жидкости в металлической, плотно закрывающейся таре, и убирать по окончанию
работы в сейф;
– съемные узлы
ЭВМ необходимо ремонтировать в отдельном специальном помещении;
– использовать
низковольтовые паяльники, устанавливаемые на несгораемой подставке.
Обязательным
условием тушения пожара на ВЦ является отключение электричества. Для тушения
пожаров на ВЦ наиболее эффективно применение огнетушителей типа ОУ–5, ОП–5–01.
Преимуществом использования последнего является также и то, что в момент
тушения устройство может находиться под напряжением. Огнетушители располагаются
из расчета один на 40-50 м2 площади, но не менее двух в помещении.
В помещении может
быть установлена пожарная сигнализация – тепловые извещатели с плавкими
предохранителями. Это необходимо при большой концентрации средств
вычислительной техники.
В заключение
следует заметить, что современные производители вычислительной техники в
последнее время стараются максимально удовлетворить условиям безопасности и
удобства программиста при работе с компьютером, что служит значительному
снижению травматизма и профессиональных заболеваний. К таким нововведениям
можно отнести мониторы с низким уровнем электромагнитного излучения,
энергосберегающие функции оборудования (мониторов, процессоров, жестких
дисков), а также все время повышающуюся эргономичность компьютерной техники.
В результате проделанной работы была разработана и
реализована подсистема обработки и фильтрации звукового сигнала в составе системы
обработки аудиоинформации. Были разработаны и программно реализованы алгоритмы,
позволяющие изменять исходный звуковой сигнал с целью изменения характеристик
звучания. Были реализованы следующие методы обработки и фильтрации звукового
сигнала: изменение основных параметров цифрового звука (частота дискретизации,
битрейт, число каналов), редактирование темпа звука ,изменение общего уровня
громкости, эффекты возрастающей и затухающей громкости, эха и реверберации,
обращение звука. Также была реализована возможность изменения структуры
звукового сигнала: удаление, копирование, вставка.
В результате проделанной работы была программная оболочка,
позволяющая осуществить необходимые преобразования звуковых сигналов,
записанных в файле.
Разработанная подсистема является неотъемлемой часть
системы обработки аудиоинформации, предназначенной для обработки и кодирования
звуковых сигналов. Обработка позволяет преобразовать исходный звуковой сигнал
для получения необходимых характеристик его звучания перед началом кодирования.
Разработанная подсистема применяется к звуковым сигналам для их подготовки к
кодированию в соответствующей подсистеме. Посредством применения системы
обработки аудиоинформации можно преобразовать звуковые сигналы к требуемому
виду и сжать для уменьшения занимаемого ими размера.
Созданную систему следует рассматривать как
исследовательскую систему, предназначенную для выявления эмпирических
закономерностей в предметной области и дальнейшую разработку в направлении
большей автоматизации процесса преобразования звуковых сигналов.
1.
Аммерал
Л. Принципы программирования в машинной графике. - М.: Сол Систем, 1992.
2.
Крамер Г.
Математические методы статистики. – М.: Мир, 1975.
3.
Строустрап
Б. Язык программирования С++. – М.: Мир, 1994. – 278 с.
4.
Кнут Д.
Искусство программирования для ЭВМ. - М.: Мир, 1976. – Т. 1-3..
5.
Корн Г.,
Корн Т. Справочник по математике для научных работников и инженеров. - М.:
Наука, 1979. – 720с.
6.
Левкович
О.А., Шелкоплясов Е.С., Шелкоплясов Т.Н. Основы компьютерной грамотности:
Учебное пособие. – М.: ТетраСистемс, 2004.-528 с.
7.
ГОСТ
12.1.003-83. ССБТ. Шум, общие требования безопасности. – М.: Издательство
стандартов, 1985.
8.
ГОСТ
12.1.006–84. ССБТ. Электромагнитные поля радиочастот. Допустимые уровни на
рабочих местах и требования к проведению контроля. – М.: Издательство
стандартов, 1985.
9.
СанПиН
2.2.2.542-96. Гигиенические требования к видео-дисплейным терминалам,
персонально-вычислительным машинам и организация работ. – М.:
Госкомсанэпиднадзор России, 1996.
10. Налоговый кодекс РФ. – М.:
ГроссМедиа Ферлаг, 2004. – 432 с.
11. Климова Л.М. Pascal 7.0. Практическое программирование.
Решение типовых задач. – М.: Кудиц-Образ, 2000.- 527с.
12. Зимина Т.Ф., Стеценко И.В.
Турбо Паскаль 7.0. – Киев: БХВ, 1999 – 448с.
13. Баженова И.Ю. Delphi 5. Самоучитель программиста. – М.:
Кудиц-Образ, 2000.- 336с.
14. Баас Р., Фервай М. Delphi 3.0 – Киев: БХВ, 1999 – 448с.
Евгений Музыченко.
Часто задаваемые вопросы электронному созданию и обработке звука
Дмитрий Малышев.
Звук: немного теории.
Дмитрий Шмунк.
Восприятие и сжатие звука.
Александр
Радзишевский. Аналоговый блюз.
#"_Toc136613051">Александр
Радзишевский, Александр Чижов. Цифровой звук – обо всем по-порядку.
Евгений Музыченко.
Принципы цифрового звука.
Дмитрий Михайлов. Параметры
цифрового звука.
Дмитрий Михайлов. Обработка
звука – фильтры.
Максим Лядов. FAQ по звуку - свежий взгляд на звуковые вопросы и ответы.
Александр
Радзишевский. Пространственное звучание (3D-звук).
Александр
Радзишевский. Способы преобразования звука, звуковые эффекты.
Сергей Котов. Эффект реверберации - теория и практика.
Дмитрий Шмунк.
Восприятие и сжатие звука.
Дмитрий Шмунк.
Восприятие и сжатие звука.
30. Дмитрий
Шмунк. Восприятие и сжатие звука.
34.
ГОСТ 19.504-79 ЕСПД. Руководство программиста.
Требования к содержанию и оформлению. – М.: Издательство стандартов, 1979.
35. ГОСТ 19.701-90 ЕСПД. Схемы алгоритмов и программ. Правила выполнения. –
М.: Издательство стандартов, 1991.
36. ГОСТ 12.0.002-80 ССБТ. Термины и определения. – М.: Издательство
стандартов, 1980.
37. Соболева В.П. Методические указания по оформлению курсовых работ,
курсовых и дипломных проектов. – Ижевск: Издательство ИМИ, 2003.
38. Почерняев С.В., Килин И.В.
Методические указания по дипломному проектированию. – Ижевск: Издательство
ИжГТУ, 1994.
39. Технико-экономическое обоснование
дипломных проектов при разработке приборов и методов контроля качества. –
Ижевск: Издательство ИжГТУ, 2001.
П. 1.1. ТЕКСТ МОДУЛЯ MAIN.PAS
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, Spin,
MMSystem, ShellApi, FileUtils, AudioFormat,
PCM_Format, MP3_Format, EM1_Format, Menus, Help, AudioForm, MP3Form,
EffectsForm;
type
TMainForm = class(TForm)
OutDeviceComboBox: TComboBox;
InDeviceComboBox: TComboBox;
TrackBar: TTrackBar;
PlayButton: TSpeedButton;
PauseButton: TSpeedButton;
RecordButton: TSpeedButton;
OpenButton: TSpeedButton;
SaveButton: TSpeedButton;
TimePosition: TStaticText;
PositionSpinEdit: TSpinEdit;
OpenDialog: TOpenDialog;
Marker1: TBitBtn;
Marker2: TBitBtn;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
SetMarkerButton: TButton;
DeleteMarkersButton: TButton;
CopyButton: TBitBtn;
CutButton: TBitBtn;
ClearButton: TBitBtn;
PasteButton: TBitBtn;
PasteFileButton: TBitBtn;
DeleteButton: TBitBtn;
TabSheet3: TTabSheet;
SetSpeedText: TStaticText;
SetVolumeText: TStaticText;
EffectButton: TButton;
EffectBox: TComboBox;
PaintBox1: TPaintBox;
WaveOutButton: TSpeedButton;
WaveInButton: TSpeedButton;
PasteSilenceButton: TButton;
CopyToFileButton: TBitBtn;
UndoButton: TBitBtn;
HelpButton: TBitBtn;
SaveDialog: TSaveDialog;
TabSheet9: TTabSheet;
BrainWaveButton: TButton;
BWFreqEdit1: TSpinEdit;
StaticText15: TStaticText;
BWFreqEdit2: TSpinEdit;
StaticText16: TStaticText;
SSelButton: TBitBtn;
FSelButton: TBitBtn;
StaticText4: TStaticText;
UndoCheckBox: TCheckBox;
EMailButton: TSpeedButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
BitBtn1: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn2: TBitBtn;
BitBtn5: TBitBtn;
BitBtn6: TBitBtn;
BitBtn7: TBitBtn;
BitBtn8: TBitBtn;
BitBtn9: TBitBtn;
BitBtn10: TBitBtn;
Button1: TBitBtn;
Button2: TBitBtn;
Button6: TBitBtn;
BitBtn13: TBitBtn;
BitBtn14: TBitBtn;
BitBtn15: TBitBtn;
BitBtn16: TBitBtn;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N31: TMenuItem;
N30: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
N18: TMenuItem;
N19: TMenuItem;
N24: TMenuItem;
N20: TMenuItem;
N21: TMenuItem;
N22: TMenuItem;
N23: TMenuItem;
N25: TMenuItem;
N26: TMenuItem;
N27: TMenuItem;
N28: TMenuItem;
N29: TMenuItem;
N32: TMenuItem;
N33: TMenuItem;
N34: TMenuItem;
N35: TMenuItem;
N36: TMenuItem;
N37: TMenuItem;
N39: TMenuItem;
N40: TMenuItem;
N41: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N42: TMenuItem;
SilenceTime: TSpinEdit;
Memo1: TMemo;
PasteModeComboBox: TComboBox;
PasteModeText: TStaticText;
Left10Button: TButton;
StaticText17: TStaticText;
Right10Button: TButton;
SpeedEdit: TSpinEdit;
VolumeEdit: TSpinEdit;
ChangeVolumeBitBtn: TBitBtn;
ChangeSpeedButton: TBitBtn;
SetSpeedBitBtn: TBitBtn;
SetVolumeBitBtn: TBitBtn;
ReverseButton: TBitBtn;
NormalizeBitBtn: TBitBtn;
PageControl2: TPageControl;
TabSheet4: TTabSheet;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
nSamplesPerSecText: TStaticText;
nSamplesPerSecButton: TButton;
nSamplesBox: TComboBox;
nBitsBox: TComboBox;
nBitsPerSampleButton: TButton;
nBitsPerSampleText: TStaticText;
nChannelsText: TStaticText;
nChannelsButton: TButton;
nChannelsBox: TComboBox;
TabSheet5: TTabSheet;
ConstantBitrateComboBox: TComboBox;
StaticText1: TStaticText;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
AverageBitrateComboBox: TComboBox;
VariableBitRateComboBox: TComboBox;
StaticText2: TStaticText;
StaticText3: TStaticText;
StereoModeComboBox: TComboBox;
TabSheet6: TTabSheet;
PageControl3: TPageControl;
TabSheet7: TTabSheet;
StaticText5: TStaticText;
nResponsesEdit: TSpinEdit;
ResponseTimeEdit: TSpinEdit;
ResponseVolumeEdit: TSpinEdit;
StaticText6: TStaticText;
StaticText7: TStaticText;
StaticText8: TStaticText;
StaticText9: TStaticText;
TabSheet8: TTabSheet;
nEchosEdit: TSpinEdit;
DelayEdit: TSpinEdit;
EchoVolumeEdit: TSpinEdit;
StaticText10: TStaticText;
StaticText11: TStaticText;
StaticText12: TStaticText;
StaticText13: TStaticText;
StaticText14: TStaticText;
N43: TMenuItem;
MP31: TMenuItem;
N44: TMenuItem;
ButtonZoomIn: TBitBtn;
ButtonZoomOut: TBitBtn;
AudioOptionsButton: TBitBtn;
MP3OptionsButton: TBitBtn;
EffOptionsButton: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure OpenButtonClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure PlayButtonClick(Sender: TObject);
procedure PauseButtonClick(Sender: TObject);
procedure RecordButtonClick(Sender: TObject);
procedure TrackBarChange(Sender: TObject);
procedure PositionSpinEditChange(Sender: TObject);
procedure SaveButtonClick(Sender: TObject);
procedure SetMarkerButtonClick(Sender: TObject);
procedure DeleteMarkersButtonClick(Sender: TObject);
procedure CopyButtonClick(Sender: TObject);
procedure CutButtonClick(Sender: TObject);
procedure ClearButtonClick(Sender: TObject);
procedure PasteButtonClick(Sender: TObject);
procedure ReverseButtonClick(Sender: TObject);
procedure SetSpeedButtonClick(Sender: TObject);
procedure ChangePropertie(Sender: TObject);
procedure AboutButtonClick(Sender: TObject);
procedure HomePageLinkClick(Sender: TObject);
procedure SetVolumeButtonClick(Sender: TObject);
procedure DeleteButtonClick(Sender: TObject);
procedure NormalizeButtonClick(Sender: TObject);
procedure PasteSilenceButtonClick(Sender: TObject);
procedure SetSpeedBitBtnClick(Sender: TObject);
procedure ChangeSpeedButtonClick(Sender: TObject);
procedure SetVolumeBitBtnClick(Sender: TObject);
procedure ChangeVolumeBitBtnClick(Sender: TObject);
procedure NormalizeBitBtnClick(Sender: TObject);
procedure EffectButtonClick(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure WaveOutButtonClick(Sender: TObject);
procedure WaveInButtonClick(Sender: TObject);
procedure CopyToFileButtonClick(Sender: TObject);
procedure UndoButtonClick(Sender: TObject);
procedure EMailButtonClick(Sender: TObject);
procedure BrainWaveButtonClick(Sender: TObject);
procedure Left10ButtonClick(Sender: TObject);
procedure SSelButtonClick(Sender: TObject);
procedure HelpButtonClick(Sender: TObject);
procedure UndoCheckBoxClick(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N43Click(Sender: TObject);
procedure MP31Click(Sender: TObject);
procedure N44Click(Sender: TObject);
procedure ButtonZoomInClick(Sender: TObject);
procedure ButtonZoomOutClick(Sender: TObject);
procedure AudioOptionsButtonClick(Sender: TObject);
procedure MP3OptionsButtonClick(Sender: TObject);
procedure EffOptionsButtonClick(Sender: TObject);
private
{ Private declarations }
public
procedure SetAudioPosition;
procedure SetMarker;
procedure DeleteMarkers;
procedure PaintAudioGraph;
procedure SaveUndoInfo;
end;
type
TPlayThread = class(TThread)
public
WaveOut: HWaveOut;
procedure Execute; override;
end;
TRecordThread = class(TThread)
public
WaveIn: HWaveIn;
procedure Execute; override;
end;
var
MainForm: TMainForm;
SamplesPerPoint: Cardinal;
Status: String;
AudioPosition: Cardinal;
AudioData: TAudioData;
AudioClipBoard: TAudioData;
PlayThread: TPlayThread;
RecordThread: TRecordThread;
Selection: record
Start: Cardinal;
Finish: Cardinal;
StartExists: Boolean;
FinishExists: Boolean;
end;
UndoInfo: record
Selection: record
Start: Cardinal;
Finish: Cardinal;
StartExists: Boolean;
FinishExists: Boolean;
end;
AudioPosition: Cardinal;
AudioData: TAudioData;
end;
implementation
{$R *.dfm}
procedure TMainForm.FormCreate(Sender: TObject);
var
WaveOutCaps: TWaveOutCaps;
WaveInCaps: TWaveInCaps;
i: Cardinal;
begin
SamplesPerPoint := 16;
BorderIcons := BorderIcons - [biMaximize];
AudioData := TAudioData.Create;
AudioClipBoard := TAudioData.Create;
with AudioData do
begin
nChannels := 2;
nBitsPerSample := 16;
nSamplesPerSec := 44100;
Calculate_nBlockAlign;
end;
AudioPosition := 0;
if WaveOutGetNumDevs<>0 then
begin
for i := 0 to WaveOutGetNumDevs-1 do
begin
WaveOutGetDevCaps(i, @WaveOutCaps, SizeOf(TWaveOutCaps));
OutDeviceComboBox.Items.Add(PChar(@WaveOutCaps.szPname));
end;
OutDeviceComboBox.ItemIndex := 0;
end;
if WaveInGetNumDevs<>0 then
begin
for i := 0 to WaveInGetNumDevs-1 do
begin
WaveInGetDevCaps(i, @WaveInCaps, SizeOf(TWaveInCaps));
InDeviceComboBox.Items.Add(PChar(@WaveInCaps.szPname));
end;
InDeviceComboBox.ItemIndex := 0;
end;
AudioData.Calculate_nBlockAlign;
UndoInfo.AudioData := TAudioData.Create;
Status := 'starting';
end;
procedure TMainForm.SetAudioPosition;
var
AudioSize, Long: Cardinal;
S, S2: String;
begin
PaintBox1.Repaint;
with AudioData do AudioSize := Data.Size div nBlockAlign;
if AudioSize = 0 then Exit;
if AudioSize<TrackBar.Width then TrackBar.Max := AudioSize else
TrackBar.Max := TrackBar.Width;
with PositionSpinEdit do
begin
Value := AudioPosition;
MinValue := 0;
MaxValue := AudioSize;
end;
if TrackBar.Position <>
Round(AudioPosition*TrackBar.Max/AudioSize) then TrackBar.Position :=
Round(AudioPosition*TrackBar.Max/AudioSize);
S2 := '';
Long := Trunc(AudioPosition/AudioData.nSamplesPerSec);
Str(Trunc(Long/3600), S);
Long := Long - Trunc(Long/3600)*3600;
S2 := S2 + S +':';
Str(Trunc(Long/60), S);
Long := Long - Trunc(Long/60)*60;
if Length(S)=1 then S2 := S2 + '0';
S2 := S2 + S +':';
Str(Long, S);
if Length(S)=1 then S2 := S2 + '0';
S2 := S2 + S +' / ';
Long := Trunc(AudioSize/AudioData.nSamplesPerSec);
Str(Trunc(Long/3600), S);
Long := Long - Trunc(Long/3600)*3600;
S2 := S2 + S +':';
Str(Trunc(Long/60), S);
Long := Long - Trunc(Long/60)*60;
if Length(S)=1 then S2 := S2 + '0';
S2 := S2 + S +':';
Str(Long, S);
if Length(S)=1 then S2 := S2 + '0';
S2 := S2 + S + ' ';
if TimePosition.Caption<>S2 then TimePosition.Caption := S2;
{PaintBox1.Repaint;}
PaintAudioGraph;
end;
procedure TMainForm.SetMarker;
var
AudioSize: Cardinal;
begin
if (Status = 'starting') then Exit;
with AudioData do AudioSize := Data.Size div nBlockAlign;
with Selection do
begin
if (AudioPosition=Start)and(StartExists) or (AudioPosition=Finish)and(FinishExists)
then Exit;
if not StartExists then
begin
Start := AudioPosition;
StartExists := True;
Marker1.Left := 8+Round(Start*(TrackBar.Max-20)/AudioSize);
Marker1.Visible := True;
Exit;
end;
if (StartExists) and (not FinishExists) then
begin
if AudioPosition>Start then
Finish := AudioPosition
else
begin
Finish := Start;
Start := AudioPosition;
end;
FinishExists := True;
TrackBar.SelStart := Round(Start*TrackBar.Max/AudioSize);
TrackBar.SelEnd := Round(Finish*TrackBar.Max/AudioSize);
Marker1.Left := 8+Round(Start*(TrackBar.Max-20)/AudioSize);
Marker1.Visible := True;
Marker2.Left := 8+Round(Finish*(TrackBar.Max-20)/AudioSize);
Marker2.Visible := True;
PaintBox1.Repaint;
Exit;
end;
if (StartExists) and (FinishExists) then
begin
if AudioPosition<Start then
Start := AudioPosition
else
if AudioPosition>Finish then
Finish := AudioPosition;
TrackBar.SelStart := Round(Start*TrackBar.Max/AudioSize);
TrackBar.SelEnd := Round(Finish*TrackBar.Max/AudioSize);
Marker1.Left := 8+Round(Start*(TrackBar.Max-20)/AudioSize);
Marker1.Visible := True;
Marker2.Left := 8+Round(Finish*(TrackBar.Max-20)/AudioSize);
Marker2.Visible := True;
PaintBox1.Repaint;
Exit;
end;
end;
end;
procedure TMainForm.DeleteMarkers;
begin
Selection.StartExists := False;
Selection.FinishExists := False;
Marker1.Visible := False;
Marker2.Visible := False;
TrackBar.SelStart := 0;
TrackBar.SelEnd := 0;
PaintBox1.Repaint;
end;
procedure TMainForm.OpenButtonClick(Sender: TObject);
var
FileName, S, Ext: String;
i: Byte;
PCM: TPCMFile;
MP3: TMP3File;
EM1: TEM1File;
begin
if (Status<>'starting')and(Status<>'waiting') then Exit;
if OpenDialog.Execute then FileName := OpenDialog.FileName else Exit;
Status := 'opening';
AudioData.Data.Clear;
if GetFileAttributes(PChar(FileName)) and FILE_ATTRIBUTE_READONLY =
FILE_ATTRIBUTE_READONLY then
SetFileAttributes(PChar(FileName), GetFileAttributes(PChar(FileName))
xor FILE_ATTRIBUTE_READONLY);
Ext := ExtractFileExt(FileName);
for i := 1 to Length(Ext) do Ext[i] := UpCase(Ext[i]);
if Ext = '.WAV' then
begin
PCM := TPCMFile.Open(FileName);
PCM.ReadAudioData(AudioData);
PCM.Destroy;
end;
if Ext = '.MP3' then
begin
MP3 := TMP3File.Open(FileName);
MP3.ReadAudioData(AudioData);
MP3.Destroy;
end;
begin
EM1 := TEM1File.Open(FileName);
EM1.ReadAudioData(AudioData);
EM1.Destroy;
end;
Str(AudioData.nChannels, S);
AudioOptionsForm.nChannelsText.Caption := S + ' channels';
Str(AudioData.nBitsPerSample, S);
AudioOptionsForm.nBitsPerSampleText.Caption := S + ' bits';
Str(AudioData.nSamplesPerSec, S);
AudioOptionsForm.nSamplesPerSecText.Caption := S + ' Hz';
AudioPosition := 0;
AudioData.Calculate_nBlockAlign;
SetAudioPosition;
DeleteMarkers;
Status := 'waiting';
end;
procedure TMainForm.PlayButtonClick(Sender: TObject);
begin
if Status<>'waiting' then Exit;
if OutDeviceComboBox.ItemIndex = -1 then Exit;
if AudioPosition*AudioData.nBlockAlign >= AudioData.Data.Size then
Exit;
Status := 'playing';
PlayThread := TPlayThread.Create(False);
end;
procedure TPlayThread.Execute;
const
BlockSize = 1024*24;
var
hEvent: THandle;
WaveFormatEx: TWaveFormatEx;
WaveHdr: array [0..1] of TWaveHdr;
Buf: array [0..1] of array [0..BlockSize-1] of Byte;
i: Cardinal;
begin
with WaveFormatEx do
begin
wFormatTag := WAVE_FORMAT_PCM;
nChannels := AudioData.nChannels;
nSamplesPerSec := AudioData.nSamplesPerSec;
wBitsPerSample := AudioData.nBitsPerSample;
nBlockAlign := wBitsPerSample div 8 * nChannels;
nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
cbSize := 0;
end;
hEvent := CreateEvent(nil, False, False, nil);
if WaveOutOpen(@WaveOut, MainForm.OutDeviceComboBox.ItemIndex ,
@WaveFormatEx, hEvent, 0, CALLBACK_EVENT) <> MMSYSERR_NOERROR then
begin
Status := 'waiting';
CloseHandle(hEvent);
Terminate;
Exit;
end;
MainForm.PlayButton.Flat := True;
for i := 0 to 1 do
begin
WaveHdr[i].lpData := @Buf[i];
WaveHdr[i].dwBufferLength := BlockSize;
AudioData.Data.Position := AudioPosition*AudioData.nBlockAlign;
if i<>1 then
begin
AudioData.Data.Read(Buf[i], BlockSize);
AudioPosition := AudioPosition + BlockSize div AudioData.nBlockAlign;
if AudioPosition*AudioData.nBlockAlign >= AudioData.Data.Size then
AudioPosition := AudioData.Data.Size div AudioData.nBlockAlign;
end;
WaveOutPrepareHeader(WaveOut, @WaveHdr[i], SizeOf(TWaveHdr));
end;
i := 0;
while (not Terminated) and
(AudioData.Data.Position<AudioData.Data.Size) do
begin
WaveOutWrite(WaveOut, @WaveHdr[i], SizeOf(TWaveHdr));
WaitForSingleObject(hEvent, INFINITE);
i := i xor 1;
AudioData.Data.Position := AudioPosition*AudioData.nBlockAlign;
AudioData.Data.Read(Buf[i], BlockSize);
AudioPosition := AudioPosition + (BlockSize div AudioData.nBlockAlign);
if AudioPosition*AudioData.nBlockAlign >= AudioData.Data.Size then
AudioPosition := AudioData.Data.Size div AudioData.nBlockAlign;
MainForm.SetAudioPosition;
end;
WaveOutReset(WaveOut);
for i := 0 to 1 do WaveOutUnprepareHeader(WaveOut, @WaveHdr[i],
SizeOf(WaveHdr));
WaveOutClose(WaveOut);
CloseHandle(hEvent);
if not Terminated then Terminate;
MainForm.PlayButton.Flat := False;
Status := 'waiting';
end;
procedure TMainForm.RecordButtonClick(Sender: TObject);
begin
if (Status<>'waiting')and(Status<>'starting') then Exit;
if InDeviceComboBox.ItemIndex = -1 then Exit;
Status := 'recording';
RecordThread := TRecordThread.Create(False);
end;
procedure TRecordThread.Execute;
const
BlockSize = 1024*24;
BufNumber = 8;
var
hEvent: THandle;
WaveFormatEx: TWaveFormatEx;
WaveHdr: array [0..BufNumber-1] of TWaveHdr;
Buf: array [0..BufNumber-1] of array [0..BlockSize-1] of Byte;
i: Cardinal;
begin
with WaveFormatEx do
begin
wFormatTag := WAVE_FORMAT_PCM;
nChannels := AudioData.nChannels;
nSamplesPerSec := AudioData.nSamplesPerSec;
wBitsPerSample := AudioData.nBitsPerSample;
nBlockAlign := wBitsPerSample div 8 * nChannels;
nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
cbSize := 0;
end;
hEvent := CreateEvent(nil, False, False, nil);
if WaveInOpen(@WaveIn, MainForm.InDeviceComboBox.ItemIndex ,
@WaveFormatEx, hEvent, 0, CALLBACK_EVENT) <> MMSYSERR_NOERROR then
begin
Status := 'waiting';
CloseHandle(hEvent);
Terminate;
Exit;
end;
MainForm.RecordButton.Flat := True;
for i := 0 to BufNumber-1 do
begin
WaveHdr[i].lpData := @Buf[i];
WaveHdr[i].dwBufferLength := BlockSize;
WaveInPrepareHeader(WaveIn, @WaveHdr[i], SizeOf(TWaveHdr));
end;
WaveInStart(WaveIn);
WaitForSingleObject(hEvent, INFINITE);
for i := 0 to BufNumber-1 do
WaveInAddBuffer(WaveIn, @WaveHdr[i], SizeOf(TWaveHdr));
i := BufNumber-1;
while not Terminated do
begin
if i = BufNumber-1 then i := 0 else Inc(i);
if (WaveHdr[i].dwFlags and WHDR_DONE) <> WHDR_DONE then
WaitForSingleObject(hEvent, INFINITE);
AudioData.Data.Position := AudioPosition*AudioData.nBlockAlign;
AudioData.Data.Write(Buf[i], WaveHdr[i].dwBytesRecorded);
AudioPosition := AudioPosition + (WaveHdr[i].dwBytesRecorded div
AudioData.nBlockAlign);
WaveInAddBuffer(WaveIn, @WaveHdr[i], SizeOf(TWaveHdr));
MainForm.SetAudioPosition;
end;
WaveInReset(WaveIn);
for i := 0 to BufNumber-1 do
WaveInUnprepareHeader(WaveIn, @WaveHdr[i], SizeOf(WaveHdr));
WaveInClose(WaveIn);
CloseHandle(hEvent);
if not Terminated then Terminate;
with MainForm.PositionSpinEdit do
begin
Value := AudioPosition;
MinValue := 0;
MaxValue := AudioData.Data.Size div AudioData.nBlockAlign;;
end;
MainForm.RecordButton.Flat := False;
Status := 'waiting';
end;
procedure TMainForm.PauseButtonClick(Sender: TObject);
begin
if Status = 'playing' then PlayThread.Terminate;
if Status = 'recording' then RecordThread.Terminate;
end;
procedure TMainForm.TrackBarChange(Sender: TObject);
var
AudioSize: Cardinal;
begin
if Status<>'waiting' then Exit;
with AudioData do
AudioSize := Data.Size div nBlockAlign;
if TrackBar.Position <> Round(AudioPosition*TrackBar.Max/AudioSize)
then
begin
AudioPosition := Round(TrackBar.Position/TrackBar.Max*AudioSize);
SetAudioPosition;
end;
end;
procedure TMainForm.PositionSpinEditChange(Sender: TObject);
begin
if Status<>'waiting' then Exit;
AudioPosition := PositionSpinEdit.Value;
SetAudioPosition;
end;
procedure TMainForm.SaveButtonClick(Sender: TObject);
var
FileName, Ext, EncMode, StereoMode, BitRate: String;
i: Byte;
Code: Integer;
PCM: TPCMFile;
MP3: TMP3File;
EM1: TEM1File;
begin
if Status<>'waiting' then Exit;
if SaveDialog.Execute then
FileName := SaveDialog.FileName else Exit;
Ext := ExtractFileExt(FileName);
for i := 1 to Length(Ext) do Ext[i] := UpCase(Ext[i]);
if Ext = '.WAV' then
begin
PCM := TPCMFile.Create(FileName, AudioData);
PCM.Destroy;
end;
if Ext = '.MP3' then
begin
if RadioButton1.Checked then
begin
BitRate := MP3OptionsForm.ConstantBitRateComboBox.Text;
EncMode := '-b';
end;
if RadioButton2.Checked then
begin
BitRate := MP3OptionsForm.AverageBitRateComboBox.Text;
EncMode := '--abr';
end;
if RadioButton3.Checked then
begin
Str(MP3OptionsForm.VariableBitrateComboBox.ItemIndex, BitRate);
EncMode := '-V';
end;
case MP3OptionsForm.StereoModeComboBox.ItemIndex of
0: StereoMode := 's';
1: StereoMode := 'j';
2: StereoMode := 'f';
3: StereoMode := 'd';
4: StereoMode := 'm';
end;
MP3 := TMP3File.Create(FileName, AudioData, BitRate, EncMode,
StereoMode);
MP3.Destroy;
end;
if Ext = '.EM1' then
begin
EM1 := TEM1File.Create(FileName, AudioData);
EM1.Destroy;
end;
end;
procedure TMainForm.SetMarkerButtonClick(Sender: TObject);
begin
SetMarker;
end;
procedure TMainForm.DeleteMarkersButtonClick(Sender: TObject);
begin
DeleteMarkers;
end;
procedure TMainForm.CopyButtonClick(Sender: TObject);
var
AudioSize: Cardinal;
S: String;
begin
if Status<>'waiting' then Exit;
Status := 'editing';
with AudioData do
AudioSize := Data.Size div nBlockAlign;
with Selection do
begin
if not StartExists or not FinishExists then
begin
DeleteMarkers;
Start := 0;
Finish := AudioSize-1;
end;
CopyAudio(AudioData, AudioClipBoard, Start, Finish);
end;
Str(AudioClipBoard.Data.Size div AudioClipBoard.nBlockAlign div
AudioClipBoard.nSamplesPerSec, S);
Memo1.Text := 'Â áóôôåðå
' + S + ' ñåê.';
Status := 'waiting';
end;
procedure TMainForm.DeleteButtonClick(Sender: TObject);
var
AudioSize: Cardinal;
begin
if Status<>'waiting' then Exit;
Status := 'editing';
SaveUndoInfo;
with AudioData do
AudioSize := Data.Size div nBlockAlign;
with Selection do
begin
if not StartExists or not FinishExists then
begin
DeleteMarkers;
Start := 0;
Finish := AudioSize-1;
end;
DeleteAudio(AudioData, Start, Finish);
DeleteMarkers;
AudioPosition := Start;
SetAudioPosition;
end;
Status := 'waiting';
end;
procedure TMainForm.CutButtonClick(Sender: TObject);
var
AudioSize: Cardinal;
S: String;
begin
if Status<>'waiting' then Exit;
Status := 'editing';
SaveUndoInfo;
with AudioData do
AudioSize := Data.Size div nBlockAlign;
with Selection do
begin
if not StartExists or not FinishExists then
begin
DeleteMarkers;
Start := 0;
Finish := AudioSize-1;
end;
CopyAudio(AudioData, AudioClipBoard, Start, Finish);
DeleteAudio(AudioData, Start, Finish);
DeleteMarkers;
AudioPosition := Start;
SetAudioPosition;
end;
Str(AudioClipBoard.Data.Size div AudioClipBoard.nBlockAlign div
AudioClipBoard.nSamplesPerSec, S);
Memo1.Text := 'Â áóôôåðå
' + S + ' ñåê.';
Status := 'waiting';
end;
procedure TMainForm.ClearButtonClick(Sender: TObject);
var
AudioSize, i: Cardinal;
Buf: Byte;
begin
if Status<>'waiting' then Exit;
Status := 'editing';
SaveUndoInfo;
with AudioData do
AudioSize := Data.Size div nBlockAlign;
with Selection do
begin
if not StartExists or not FinishExists then
begin
DeleteMarkers;
Start := 0;
Finish := AudioSize-1;
end;
Buf := 0;
AudioData.Data.Position := Start*AudioData.nBlockAlign;
for i := Start*AudioData.nBlockAlign to Finish*AudioData.nBlockAlign-1
do
AudioData.Data.Write(Buf, 1);
end;
Status := 'waiting';
PaintAudioGraph;
end;
procedure TMainForm.PasteButtonClick(Sender: TObject);
var
MP3: TMP3File;
PCM: TPCMFile;
i: Byte;
FileName, S, Ext: String;
TempAudio: TAudioData;
begin
if (Status<>'waiting')and(Status<>'starting') then Exit;
if Sender = PasteFileButton then
begin
if OpenDialog.Execute then FileName := OpenDialog.FileName else Exit;
Status := 'opening';
Ext := ExtractFileExt(FileName);
if GetFileAttributes(PChar(FileName)) and FILE_ATTRIBUTE_READONLY =
FILE_ATTRIBUTE_READONLY then
SetFileAttributes(PChar(FileName), GetFileAttributes(PChar(FileName))
xor FILE_ATTRIBUTE_READONLY);
TempAudio := TAudioData.Create;
for i := 1 to Length(Ext) do Ext[i] := UpCase(Ext[i]);
if Ext = '.WAV' then
begin
PCM := TPCMFile.Open(FileName);
PCM.ReadAudioData(TempAudio);
PCM.Destroy;
end;
if Ext = '.MP3' then
begin
MP3 := TMP3File.Open(FileName);
MP3.ReadAudioData(TempAudio);
MP3.Destroy;
end;
if Ext = '.EM1' then
begin
EM1 := TEM1File.Open(FileName);
EM1.ReadAudioData(TempAudio);
EM1.Destroy;
end;
SetnSamplesPerSec(TempAudio, AudioData.nSamplesPerSec);
SetnBitsPerSample(TempAudio, AudioData.nBitsPerSample);
SetnChannels(TempAudio, AudioData.nChannels);
end
else
begin
SetnSamplesPerSec(AudioClipBoard, AudioData.nSamplesPerSec);
SetnBitsPerSample(AudioClipBoard, AudioData.nBitsPerSample);
SetnChannels(AudioClipBoard, AudioData.nChannels);
end;
Status := 'editing';
SaveUndoInfo;
if Sender <> PasteFileButton then
Case PasteModeComboBox.ItemIndex of
0: InsertAudio(AudioClipBoard, AudioData, AudioPosition);
1: OverWriteAudio(AudioClipBoard, AudioData, AudioPosition);
2: MixAudio(AudioClipBoard, AudioData, AudioPosition);
end
else
Case PasteModeComboBox.ItemIndex of
0: InsertAudio(TempAudio, AudioData, AudioPosition);
1: OverWriteAudio(TempAudio, AudioData, AudioPosition);
2: MixAudio(TempAudio, AudioData, AudioPosition);
end;
DeleteMarkers;
SetAudioPosition;
SetMarker;
if Sender <> PasteFileButton then
AudioPosition := AudioPosition + AudioClipBoard.Data.Size div
AudioData.nBlockAlign - 1
else
begin
AudioPosition := AudioPosition + TempAudio.Data.Size div
AudioData.nBlockAlign - 1;
TempAudio.Destroy;
end;
SetAudioPosition;
SetMarker;
Status := 'waiting';
end;
procedure TMainForm.PasteSilenceButtonClick(Sender: TObject);
var
i: Cardinal;
b: Byte;
TempAudio: TAudioData;
begin
if (Status<>'waiting')and(Status<>'starting') then Exit;
Status := 'editing';
SaveUndoInfo;
TempAudio := TAudioData.Create;
TempAudio.nChannels := AudioData.nChannels;
TempAudio.nSamplesPerSec := AudioData.nSamplesPerSec;
TempAudio.nBitsPerSample := AudioData.nBitsPerSample;
TempAudio.Calculate_nBlockAlign;
b := 0;
for i := 1 to
TempAudio.nSamplesPerSec*SilenceTime.Value*TempAudio.nBlockAlign do
TempAudio.Data.Write(b, 1);
InsertAudio(TempAudio, AudioData, AudioPosition);
DeleteMarkers;
SetAudioPosition;
SetMarker;
AudioPosition := AudioPosition + TempAudio.Data.Size div
AudioData.nBlockAlign - 1;
SetAudioPosition;
SetMarker;
TempAudio.Destroy;
Status := 'waiting';
end;
procedure TMainForm.ReverseButtonClick(Sender: TObject);
var
AudioSize: Cardinal;
begin
if Status<>'waiting' then Exit;
Status := 'deformation';
SaveUndoInfo;
with AudioData do
AudioSize := Data.Size div nBlockAlign;
with Selection do
begin
if not StartExists or not FinishExists then
begin
DeleteMarkers;
Start := 0;
Finish := AudioSize-1;
end;
ReverseAudio(AudioData, Start, Finish-Start+1);
end;
Status := 'waiting';
end;
procedure TMainForm.NormalizeButtonClick(Sender: TObject);
var
AudioSize: Cardinal;
begin
if Status<>'waiting' then Exit;
Status := 'deformation';
with AudioData do
AudioSize := Data.Size div nBlockAlign;
with Selection do
begin
if not StartExists or not FinishExists then
begin
DeleteMarkers;
Start := 0;
Finish := AudioSize-1;
end;
Normalize(AudioData, Start, Finish-Start+1);
end;
Status := 'waiting';
PaintBox1.Repaint;
end;
procedure TMainForm.SetSpeedButtonClick(Sender: TObject);
var
AudioSize: Cardinal;
begin
if Status<>'waiting' then Exit;
Status := 'deformation';
with AudioData do
AudioSize := Data.Size div nBlockAlign;
with Selection do
begin
if not StartExists or not FinishExists then
begin
DeleteMarkers;
Start := 0;
Finish := AudioSize-1;
end;
SetSpeedOfAudio(AudioData, Start, Finish-Start+1, SpeedEdit.Value/100);
DeleteMarkers;
AudioPosition := Start;
SetMarker;
AudioPosition := Trunc(Start+(Finish-Start)*100/SpeedEdit.Value);
SetMarker;
AudioPosition := Start;
SetAudioPosition;
end;
Status := 'waiting';
end;
procedure TMainForm.ChangePropertie(Sender: TObject);
var
S: String;
Value, Code: Cardinal;
begin
if (Status<>'waiting')and(Status<>'starting') then Exit;
Status := 'editing';
if Sender = AudioOptionsForm.nSamplesPerSecButton then
begin
Val(AudioOptionsForm.nSamplesBox.Text, Value, Code);
SetnSamplesPerSec(AudioData, Value);
end;
if Sender = AudioOptionsForm.nBitsPerSampleButton then
begin
Val(AudioOptionsForm.nBitsBox.Text, Value, Code);
SetnBitsPerSample(AudioData, Value);
end;
if Sender = AudioOptionsForm.nChannelsButton then
begin
SetnChannels(AudioData, AudioOptionsForm.nChannelsBox.ItemIndex+1);
end;
AudioData.Calculate_nBlockAlign;
DeleteMarkers;
AudioPosition := 0;
SetAudioPosition;
Str(AudioData.nChannels, S);
AudioOptionsForm.nChannelsText.Caption := S + ' channels';
Str(AudioData.nBitsPerSample, S);
AudioOptionsForm.nBitsPerSampleText.Caption := S + ' bits';
Str(AudioData.nSamplesPerSec, S);
AudioOptionsForm.nSamplesPerSecText.Caption := S + ' Hz';
Status := 'waiting';
end;
procedure TMainForm.SetVolumeButtonClick(Sender: TObject);
var
AudioSize: Cardinal;
begin
if Status<>'waiting' then Exit;
Status := 'deformation';
with AudioData do
AudioSize := Data.Size div nBlockAlign;
with Selection do
begin
if not StartExists or not FinishExists then
begin
DeleteMarkers;
Start := 0;
Finish := AudioSize-1;
end;
SetVolumeOfAudio(AudioData, Start, Finish-Start+1,
VolumeEdit.Value/100);
end;
Status := 'waiting';
end;
procedure TMainForm.AboutButtonClick(Sender: TObject);
begin
MessageBox(MainForm.Handle, 'AudioEditor v02.2006'#13#13'Âûïîëíèë
Ñóõàíîâ
Ì.À.'#13#13'ÈæÃÒÓ,
2006'#13#13'smike@pochta.ru', 'Î ïðîãðàììå',
MB_OK);
end;
procedure TMainForm.HomePageLinkClick(Sender: TObject);
begin
ShellExecute(Handle, 'open', PChar('#"_Toc74468082">ПРИЛОЖЕНИЕ 2
РУКОВОДСТВО ПРОГРАММИСТА
П. 2.1. НАЗНАЧЕНИЕ ПРОГРАММЫ
Программа обработки и фильтрации звуковых сигналов имеет
идентификатор AudioEditor и предназначена для обработки
звуковых сигналов, записанных в файлах одного из следующих форматов: Microsoft
RIFF/WAVE (*.wav), MP3 (*.mp3), Elecronic Music
(*.em1). Программа AudioEditor
выполняет следующие функции:
1)
возможность
открытия и анализа файлов форматов Microsoft Wave, MP3 и Electronic Music;
2)
отображение
структуры звукового сигнала, записанного в файле, в графическом виде с
возможностью изменения масштаба;
3)
обеспечение
возможности основных операций редактирования: выделение части сигнала, ее
удаление, копирование и вставку. Обеспечение возможности вставки звукового
сигнала из другого файла;
4)
возможность
изменения основных параметров цифрового звука: частоты дискретизации, битрейта,
числа каналов;
5)
изменение
темпа (скорости) звукового сигнала, уровня громкости, обращение звукового
сигнала;
6)
применение звуковых эффектов к сигналу (эха,
реверберации, возрастания, затухания) с указанием необходимых для них
параметров.
Программа AudioEditor входит в состав
системы обработки аудиоинформации. Эта система позволяет получить
преобразованный звуковой сигнал с заданными характеристиками звучания, а также
осуществить сжатие измененного звукового файла для уменьшения занимаемого им размера
без значительной потери качества его звучания.
П. 2.2. УСЛОВИЯ ПРИМЕНЕНИЯ ПРОГРАММЫ
Программа AudioEditor предъявляет
следующие требования к техническим средствам:
1)
стандартный
x86-совместимый ПК;
2)
тактовая
частота процессора не менее 900 МГц;
3)
объем оперативной
памяти не менее 128 Мб;
4)
разрешение
экрана монитора не менее 1024x768.
Программа AudioEditor предъявляет
следующие требования к программным средствам:
1)
операционная
система семейства Windows (Windows 9x/ME/NT/2000/XP);
2)
среда для
разработки приложений Borland Delphi 7.
П. 2.3. ХАРАКТЕРИСТИКА ПРОГРАММЫ
Программа AudioEditor требует для
своего функционирования наличия в проекте файлов, содержащих звуковые сигналы,
записанные в файлах следующих форматов: Microsoft RIFF/WAVE (*.wav), MP3 (*.mp3), Elecronic Music (*.em1).
В связи с этим перед запуском данного модуля рекомендуется сформировать соответствующие
файлы со звуковыми сигналами.
В состав программы входят следующие файлы, необходимые для
ее функционирования:
1)
AudioEditor.exe – исполняемый файл, содержащий
основной интерфейс программы;
2)
borlndmm.dll
– менеджер разделяемой памяти от Borland;
3)
cc3260mt.dll
– многопоточная библиотека от Borland;
4)
stlpmt45.dll
– библиотека стандартных шаблонов STL от Borland.
Программа является интерактивной, т.е. требующей
взаимодействия с пользователем.
Вся настройка программы происходит в интерактивном режиме,
то есть через специальные диалоги настройки в оболочке самого приложения.
П. 2.4. ОБРАЩЕНИЕ К ПРОГРАММЕ
Для вызова программы необходимо запустить на выполнение
файл AudioEditor.exe.
Описание файлов программы:
AudioForm.pas – функции
для обработки формы с основными параметрами звукового сигнала;
AudioFormat.pas –
функции для изменения основных параметров звука (битрейт, частота
дискретизации, число каналов), создания эффектов (реверберации, эха,
возрастания, затухания), изменения структуры звукового сигнала, изменения темпа
и громкости, обращения;
EffectsForm.pas –
функции для обработки формы с параметрами звуковых эффектов;
EM1_Format.pas – функции для работы с файлами формата Electronic Music;
FileUtils.pas – функции
для работы с файлами любых типов;
Help.pas – функции для
отображения справочной информации по программе;
Main.pas – функции для
обработки главного окна программы;
MP3_Format.pas – функции для работы с файлами формата MP3;
MP3Form.pas – функции для обработки формы с параметрами MP3;
PCM_Format.pas – функции для работы с файлами формата Microsoft RIFF/WAVE;
AudioDeformator.res –
ресурсы программы;
AudioForm.dfm – файл с
описанием формы для изменения основных параметров звукового сигнала (частота
дискретизации, битрейт, число каналов);
EffectsForm.dfm – файл с
описанием формы для задания параметров звуковых эффектов;
Help.dfm – файл с
описанием формы для отображения справочной информации по программе;
Main.dfm – файл с
описанием главной формы программы;
MP3Form.dfm – файл с описанием формы для задания параметров MP3.
П. 2.5. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ
Входными данными являются звуковые сигналы, записанные в
файлах одного из следующих форматов: Microsoft RIFF/WAVE (*.wav), MP3 (*.mp3), Elecronic Music (*.em1).
Выходными данными являются измененные звуковые сигналы,
записанный в файлах, структура которых аналогична структуре входных.
П. 2.6. СООБЩЕНИЯ
В ходе работы программы на экране могут появиться сообщения,
которые приведены в табл.П.2.1.
Таблица П.2.1
Сообщения, появляющиеся в ходе работы программы
Сообщение
|
Описание
|
Пожалуйста подождите…
|
Появляется в случае, когда
программой производится выполнение длительной операции (например, открытие
файла большого размера или его обработка). Необходимо дождаться исчезновения
этого сообщения для дальнейшей работы с программой
|
Ошибка открытия файла
|
Невозможно открыть файл,
так как его формат не входит в число поддерживаемых приложением (*.em1, *.wav, *.mp3) Необходимо открыть файл
в поддерживаемом формате.
|
Ошибка сохранения файла
|
Невозможно сохранить файл.
Причиной может являться нехватка свободного дискового пространства или
отсутствие прав на запись файлав указанной директории
|
Сохранить изменения в
файле?
|
Появляется в том случае,
если файл был изменен, но изменения не были сохранены, а пользователь вызвал
процедуру выхода из программы
|
РУКОВОДСТВО ОПЕРАТОРА
П. 3.1. НАЗНАЧЕНИЕ ПРОГРАММЫ
Программа обработки и фильтрации звуковых сигналов имеет
идентификатор AudioEditor и предназначена для обработки
звуковых сигналов, записанных в файлах одного из следующих форматов: Microsoft
RIFF/WAVE (*.wav), MP3 (*.mp3), Elecronic Music
(*.em1). Программа AudioEditor
выполняет следующие функции:
1)
возможность
открытия и анализа файлов форматов Microsoft Wave, MP3 и Electronic Music;
2)
отображение
структуры звукового сигнала, записанного в файле, в графическом виде с
возможностью изменения масштаба;
3)
обеспечение
возможности основных операций редактирования: выделение части сигнала, ее
удаление, копирование и вставку. Обеспечение возможности вставки звукового
сигнала из другого файла;
4)
возможность
изменения основных параметров цифрового звука: частоты дискретизации, битрейта,
числа каналов;
5)
изменение
темпа (скорости) звукового сигнала, уровня громкости, обращение звукового
сигнала;
6)
применение звуковых эффектов к сигналу (эха,
реверберации, возрастания, затухания) с указанием необходимых для них
параметров.
Программа AudioEditor входит в состав
системы обработки аудиоинформации. Эта система позволяет получить
преобразованный звуковой сигнал с заданными характеристиками звучания, а также
осуществить сжатие измененного звукового файла для уменьшения занимаемого им
размера без значительной потери качества его звучания.
П. 3.2. УСЛОВИЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ
Программа AudioEditor предъявляет
следующие требования к техническим средствам:
1)
стандартный
x86-совместимый ПК;
2)
тактовая
частота процессора не менее 900 МГц;
3)
объем
оперативной памяти не менее 128 Мб;
4)
разрешение
экрана монитора не менее 1024x768.
Программа Tubes предъявляет следующие
требования к программным средствам:
1)
операционная
система семейства Windows (Windows 9x/ME/NT/2000/XP);
2)
наличие звуковых
файлов одного из следующих форматов: Microsoft RIFF/WAVE (*.wav), MP3 (*.mp3), Elecronic Music (*.em1).
П. 3.3. ВЫПОЛНЕНИЕ ПРОГРАММЫ
П.3.3.1 Запуск программы
Для вызова программы необходимо запустить на выполнение
файл AudioEditor.exe.
П.3.3.2 Описание интерфейса работы с программой
П.3.3.2.1 Главное окно программы
Главное окно программы представлено на рис.П.3.1.
В верхней части окна расположена строка меню, с помощью
которого можно получить доступ ко всем функциям программы. Описание пунктов
меню приведено в П.3.3.2.2.
Главное окно программы
Рис. П.3.1
В нижней части окна приведено графическое изображение
структуры звукового сигнала, записанного в открытом файле. Красным цветом
выделен участок, к которому применяется обработка. Если участок не выделен, то
обработка применяется ко свему звуковому сигналу, записанному в файле.
В средней части окна расположены управляющию кнопки для
быстрого доступа к функциям программы и вызова окон настроек.
Описание управляющих кнопок:
–
вызывает диалог открытия звукового файла;
–
вызывает диалог сохранения звукового файла;
–
вставка выбранной части звукового сигнала из буфера обмена;
–
копирование выбранной части звукового сигнала в буфер обмена;
–
удаление и копирование выбранной части звукового сигнала в буфер обмена;
–
удаление выбранной части звукового сигнала;
–
удаление выбранной части звукового сигнала с сохранением занимаемого им
временного пространства;
–
вставка звукового сигнала из другого файла в место, помеченное маркером;
–
вызывает диалог сохранения выбранной части звукового сигнала в файл;
–
отмена последнего произведенного действия;
–
обращение выбранной части звукового сигнала;
–
нормализация выбранной части звукового сигнала;
–
применение эффекта эха к выбранной части звукового сигнала;
–
применение эффекта реверберации к выбранной части звукового сигнала;
–
применение эффекта убывающей громкости к выбранной части звукового сигнала;
–
применение эффекта возрастающей громкости к выбранной части звукового сигнала;
–
вызов стандартного диалога настройки воспроизведения звука;
–
вызов стандартного диалога настройки записи звука;
–
вставка пустого звукового сигнала длительностью, указанной под кнопкой;
–
изменение темпа выбранной части звукового сигнала на значение, указанное в
процентах под кнопкой;
–
плавное изменение темпа выбранной части звукового сигнала на значение,
указанное в процентах под кнопкой;
–
изменение уровня громкости выбранной части звукового сигнала на значение,
указанное в процентах под кнопкой;
–
плавное изменение уровня громкости выбранной части звукового сигнала на значение,
указанное в процентах под кнопкой;
–
вызов справочной информации по работе с программой;
–
вызов справочной информации о версии программы и ее разработчике;
–
выбор режима вставки звукового сигнала из буфера обмена;
–
выбор устройства записи звука;
–
перейти в начало звукового сигнала или к позиции, помеченной маркером начала;
–
перейти в конец звукового сигнала или к позиции, помеченной маркером конца;
–
начать запись звукового сигнала с выбранного устройства записи;
–
начать воспроизведение звукового сигнала через выбранное устройство
воспроизведения;
–
приостановить воспроизведение звукового сигнала;
–
установить позицию маркера начала/конца;
–
удалить установленные позиции маркера;
Маркеры начала и конца задают выбранную часть звукового
сигнала, которая помечается на графическом представлении красным цветом.
–
увеличить масштаб отображения звукового сигнала;
–
уменьшить масштаб отображения звукового сигнала;
–
показывает время текущей позиции в файле и общую продолжительность
воспроизведения;
-
показывает текущую позицию в файле;
-
позволяют перемещать позиуию в файле на 10мс назад и вперед;
–
вызов окна настройки основных параметров цифрового звука (частота дискретизации,
битрейт, число каналов);
–
вызов окна настройки сохранения файла в формате МР3;
–
вызов окна настройки звуковых эффектов;
–
показывает продолжительность в секундах звукового сигнала, который находится в
буфере обмена.
П.3.3.2.2 Главное меню программы
Главное меню программы представлено на рис. П.3.2
Главное меню программы
Рис. П.3.2
Меню «Файл»:
- открыть: вызывает диалог открытия звукового файла;
- сохранить: вызывает диалог сохранения звукового файла;
- выход: выход из программы.
Меню «Проигрывание»:
- воспроизвести: начать воспроизведение звукового сигнала через выб-ранное устройство
воспроизведения;
- записать: начать запись звукового сигнала с выбранного устройства за-писи;
- остановить: приостановить воспроизведение звукового сигнала.
Меню «Правка»:
- отмена: отмена последнего произведенного действия;
- установить маркер: установить позицию маркера начала/конца;
- убрать все маркеры: удалить установленные позиции маркера;
- вставить: вставка выбранной части звукового сигнала из буфера обмена;
- вставить из файла: вставка звукового сигнала из другого файла в место, помеченное маркером;
- вырезать: удаление и копирование выбранной части звукового сигнала в буфер обмена;
- удалить: удаление выбранной части звукового сигнала;
- стереть: удаление выбранной части звукового сигнала с сохранением за-нимаемого
им временного пространства;
- копировать: копирование выбранной части звукового сигнала в буфер обмена;
- копировать в файл: вызывает диалог сохранения выбранной части звуко-вого сигнала в файл.
Меню «Деформации»:
- изменить темп: изменение темпа выбранной части звукового сигнала на значение,
указанное в процентах под кнопкой;
- изменить громкость: изменение уровня громкости выбранной части звукового сигнала на
значение, указанное в процентах под кнопкой;
- обратить звучание: обращение выбранной части звукового сигнала;
- выровнять громкость: нормализация выбранной части звукового сигна-ла;
- вставить тишину: вставка пустого звукового сигнала длительностью, указанной под кнопкой;
- применить эффект: применить
эффект один из эффектов (затухающей громкости, эха, реверберации, возрастающей
громкости) к выбранной части звукового сигнала.
Меню «Настройки»:
- воспроизведение: вызов стандартного диалога настройки воспроизведе-ния звука;
- запись: вызов стандартного диалога настройки записи звука;
- аудиоданные: вызов окна настройки основных параметров цифрового звука (частота
дискретизации, битрейт, число каналов);
- mp3: вызов окна
настройки сохранения файла в формате МР3;
- эффекты: вызов окна настройки звуковых эффектов.
Меню «Справка»:
- помощь: вызов справочной информации по работе с программой;
- о программе: вызов справочной информации о версии программы и ее разработчике.
П.3.3.2.3 Описание диалоговых окон программы
П.3.3.2.3.1 Описание окна для настройки параметров звуковых
эффектов
В данном диалоговом окне производится настройка параметров
эффектов эха и реверберации.
На рис.П.3.3 приведено изображение окна с открытой вкладкой
для настройки параметров эффекта эха. В первом поле указывается количество
откликов, которое необходимо создать при применении эффекта, во втором поле
указывается необходимое время между откликами, а в третьем указывается
громкость отклика относительно предыдущего.
На рис.П.3.4 приведено изображение окна с открытой вкладкой
для настройки параметров эффекта реверберации. В первом поле указывается
количество отражений, которое необходимо создать при применении эффекта, во
втором поле указывается необходимое время между отражениями, а в третьем
указывается громкость отражения относительно предыдущего.
Окно настройки параметров эффекта эха
Рис. П.3.3
Окно настройки параметров эффекта реверберации
Рис. П.3.4
П.3.3.2.3.2 Описание окна для настройки параметров
сохранения MP3-файлов
В данном диалоговом окне производится настройка сохранения
звукового сигнала в формате MP3. В этом окне указывается
тип битрейта и количество каналов (1 – mono; 2 – stereo).
Вид диалогового окна настройки параметров МР3 представлен
на на рис. П.3.5.
Окно настройки параметров MP3
Рис. П.3.5
П.3.3.2.3.3 Описание для настройки основных параметров
цифрового звука
Данное диалоговое окно используется для просмотра и
изменения основных параметров звукового сигнала: частота дискретизации,
битрейт, количество каналов. В левой части располагаются текущие значения этих
параметров, а в правой можно выбрать желаемое и изменить значение, нажав
соответствующую кнопку «Применить». Следует учитывать, что при увеличении
частоты дискретизации и битрейта качество звукового сигнала не улучшится,
изменится только занимаемое им дисковое пространство.
Вид диалогового окна настройки основных параметров
представлен на рис П.3.6.
Окно настройки параметров цифрового звука
П.3.3.2.3.4 Описание окна для получения справочной
информации о программе
Данное диалоговое окно используется для просмотра
справочной инфор-мации по программе: описание всех функций и элементов
интерфейса.
Вид справочного диалогового окна представлен на рис. П.3.7.
Окно со справочной информацией о программе
Рис. П.3.7
П. 3.4. СООБЩЕНИЯ ОПЕРАТОРУ
В ходе работы программы на экране могут появиться
сообщения, которые приведены в табл.П.3.1.
Таблица П.3.1
Сообщения, появляющиеся в ходе работы программы
Сообщение
|
Описание
|
Пожалуйста подождите…
|
Появляется в случае, когда
программой производится выполнение длительной операции (например, открытие
файла большого размера или его обработка). Необходимо дождаться исчезновения
этого сообщения для дальнейшей работы с программой.
|
Ошибка открытия файла
|
Невозможно открыть файл,
так как его формат не входит в число поддерживаемых приложением (*.em1, *.wav, *.mp3) Необходимо открыть файл
в поддерживаемом формате.
|
Ошибка сохранения файла
|
Невозможно сохранить файл.
Причиной может являться нехватка свободного дискового пространства или
отсутствие прав на запись файлав указанной директории.
|
Сохранить изменения в
файле?
|
Появляется в том случае,
если файл был изменен, но изменения не были сохранены, а пользователь вызвал
процедуру выхода из программы.
|