Система обработки аудиоинформации. Подсистема фильтрации и обработки сигнала

Разработка программного обеспечения, предназначенного для изменения характеристик исходного звукового сигнала с целью изменения характеристик его звучания. Алгоритмы обработки и фильтрации звукового сигнала, редактирование его, изменение темпа и уровня.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 08.07.2008
Размер файла 1,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Окружающая среда помещений, в которых работает программист, воздействует на электрическую изоляцию приборов и устройств, электрическое сопротивление тела человека и может создавать условия для поражения электрическим током.

Помещения, оборудованные вычислительной техникой, как правило, относятся к категории помещений без повышенной опасности, так как:

- относительная влажность воздуха не превышает 75%;

- нет токопроводящей пыли;

- температура не превышает длительное время 30 °С;

- отсутствует возможность одновременного прикосновения человека с имеющим соединение с землей металлическими конструкциями;

- отсутствие возможности прикоснуться к токоведущим частям оборудования;

- нет токопроводящих полов.

Таким образом, для предотвращения электротравматизма пользователя необходимо соблюдать требования безопасности, как при работе с обычной бытовой техникой.

4.3. Организация рабочего места инженера-программиста

На инженера-программиста оказывают воздействие различные вредные и опасные факторы, которые отрицательно влияют на здоровье: излучение экрана монитора ПК, плохое проветривание и недостаточная освещенность помещений могут привести к заболеваниям организма различной степени тяжести.

Длительное нахождение человека в зоне вышеперечисленных воздействий может привести к профессиональному заболеванию, поэтому в данном разделе решается задача обеспечения безопасных условий труда инженера-программиста.

Главными элементами рабочего места программиста являются стол и кресло. Основным рабочим положением является положение сидя. Рабочая поза сидя вызывает минимальное утомление программиста. Рациональная планировка рабочего места предусматривает четкий порядок и постоянство размещения предметов, средств труда и документации. То, что требуется для выполнения работ чаще, расположено в зоне легкой досягаемости рабочего пространства. Моторное поле - пространство рабочего места, в котором могут осуществляться двигательные действия человека. Максимальная зона досягаемости рук - это часть моторного поля рабочего места, ограниченного дугами, описываемыми максимально вытянутыми руками при движении их в плечевом суставе. Оптимальная зона - часть моторного поля рабочего места, ограниченного дугами, описываемыми предплечьями при движении в локтевых суставах с опорой в точке локтя и с относительно неподвижным плечом. Схематично зоны досягаемости представлены на рис. 3.1.

Зоны досягаемости рук в горизонтальной плоскости

а - зона максимальной досягаемости;

б - зона досягаемости пальцев при вытянутой руке;

в - зона легкой досягаемости ладони;

г - оптимальное пространство для грубой ручной работы;

д - оптимальное пространство для тонкой ручной работы.

Рис.4.1

Оптимальное размещение предметов труда и документации в зонах досягаемости:

- дисплей размещается в зоне а (в центре);

- системный блок размещается в предусмотренной нише стола;

- клавиатура - в зоне г/д;

- “мышь” - в зоне в справа;

- сканер - в зоне а/б (слева);

- принтер - в зоне а (справа);

- документация: необходимая при работе - в зоне легкой досягаемости ладони - в; неиспользуемая постоянно - в выдвижных ящиках стола.

Схематично размещение основных и периферийных составляющих ПК представлено на рис. 4.2.

Размещение основных и периферийных составляющих ПК

Рис. 4.2

При компоновке рабочего места необходимо учитывать зоны досягаемости рук человека при расположении дисплеев, клавиатуры, системного блока и так далее. Высота рабочей поверхности стола должна регулироваться в пределах 680 - 800 мм, при отсутствии такой возможности высота рабочей поверхности стола должна составлять 725 мм.

Рабочий стол должен иметь пространство для постановки ног высотой не менее 600 мм, шириной не менее 500 мм, глубиной на уровне колен - не менее 450 мм и на уровне вытянутых ног - не менее 650 мм.

Экран видеомонитора должен находиться от глаз пользователя на оптимальном расстоянии 600 - 700 мм, но не ближе 500 мм с учетом размеров алфавитно-цифровых знаков и символов.

4.4. Требования к параметрам микроклимата помещения

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

Температура воздуха является одним из основных параметров, характеризующих тепловое состояние микроклимата. Суммарное тепловыделение в помещении поступает от:

- ЭВМ;

- вспомогательного оборудования;

- приборов освещения;

- людей;

- внешних источников.

Наибольшее количество теплоты выделяют ЭВМ и вспомогательное оборудование. Средняя величина тепловыделения от компьютеров колеблется до 100 Вт/м2. Тепловыделения от приборов освещения также велики. Удельная величина их составляет 35 Вт/м2. При этом, чем больше уровень освещенности, тем выше удельные величины тепловыделений. Количество теплоты от обслуживающего персонала незначительно. Оно зависит от числа работающих в помещении, интенсивности работы, выполняемой человеком.

К внешним источникам поступления теплоты относят теплоту, поступающую через окна от солнечной радиации, приток теплоты через непрозрачные ограждения конструкций. Интенсивность этих источников зависит от расположения здания, ориентации по частям света, цветовой гаммы и прочее.

С целью создания нормальных условий труда программиста, ГОСТом 12.1.005-88 установлены оптимальные и допустимые значения всех параметров микроклимата. Оптимальные параметры при длительном и систематическом воздействии на организм человека обеспечивают сохранение нормального функционирования и теплового состояния организма, создают ощущение теплового комфорта и являются предпосылкой высокого уровня работоспособности. Допустимые параметры микроклимата могут вызвать приходящие и быстро нормализующиеся изменения организма, не выходящие за пределы физиологически приспособительных возможностей, не создающие нарушений состояния здоровья, но вызывающие дискомфортные теплоощущения, ухудшение самочувствия и понижение работоспособности. Оптимальные и допустимые значения основных микроклиматических параметров представлены в табл. 4.1.

Таблица 4.1

Параметры микроклимата производственных помещений

Параметры

Значения параметров

оптимальные

допустимые

Температура

20-22 °С

17-22 °С

Относительная влажность

40-60 %

до 75%

Скорость движения воздуха

0,1 м/с

не более 0,3 м/с

Для обеспечения нормальных условий труда необходимо придерживаться вышеуказанных данных. В целях поддержания температуры и влажности воздуха в помещении можно использовать системы отопления, вентиляции и кондиционирования воздуха.

На исследуемом предприятии температура воздуха, влажность и скорость движения воздуха держится в рамках оптимальных параметров. Вредные вещества в воздухе рабочей зоны не превышают предельной допустимой концентрации.

4.5. Требования к освещению рабочих мест

К современному освещению помещений, где работают с вычислительной техникой, предъявляют высокие требования как гигиенического, так и технического характера. Правильно спроектированное и выполненное освещение обеспечивает высокий уровень работоспособности, оказывает положительное психологическое воздействие, способствует повышению производительности труда. Условия деятельности пользователя в системе "человек-машина" связаны с явным преобладанием зрительной информации - до 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 Лм.

шт.

При выборе осветительных приборов используем светильники типа ОД. Каждый светильник комплектуется двумя лампами. Размещаются светильники двумя рядами, по четыре в каждом ряду.

4.6. Пожарная безопасность

Особое внимание к пожарной безопасности является обоснованным, так как в случае пожара будет нанесен значительный материальный ущерб (даже если в помещении находится один компьютер), и возможна угроза жизни и здоровью людей.

Источниками пожара при работе программиста с компьютером могут быть ЭВМ, электропроводка, действующие системы отопления, вентиляции и кондиционирования воздуха, бытовые приборы.

В современных ЭВМ очень высокая плотность размещения элементов электронных схем. В непосредственной близости друг от друга располагаются соединительные провода, коммутационные кабели. При протекании по ним электрического тока выделяется значительное количество теплоты, что может привести к повышению температуры отдельных узлов до 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с.

15. Евгений Музыченко. Часто задаваемые вопросы по цифровому представлению звуковых сигналов.

http://www.websound.ru/articles/theory/dgaudfaq.htm (22.05.2006).

16. Евгений Музыченко. Часто задаваемые вопросы электронному созданию и обработке звука

http://www.websound.ru/articles/theory/dgaudfaq.htm (22.05.2006).

17. Дмитрий Малышев. Звук: немного теории.

http://www.websound.ru/articles/theory/sound-theory.htm (22.05.2006).

18. Дмитрий Шмунк. Восприятие и сжатие звука.

http://www.websound.ru/articles/theory/sound-theory.htm (22.05.2006).

19. Александр Радзишевский. Аналоговый блюз.

http://www.websound.ru/articles/theory/sound_user.htm (22.05.2006).

20. Александр Радзишевский, Александр Чижов. Цифровой звук - обо всем по-порядку.

http://www.websound.ru/articles/theory/sound-theory.htm (22.05.2006).

21. Евгений Музыченко. Принципы цифрового звука.

http://www.websound.ru/articles/theory/digsnd.htm (22.05.2006).

22. Дмитрий Михайлов. Параметры цифрового звука.

http://www.websound.ru/articles/theory/sound-theory.htm (22.05.2006).

23. Дмитрий Михайлов. Обработка звука - фильтры.

http://www.websound.ru/articles/theory/filter.htm (22.05.2006).

24. Максим Лядов. FAQ по звуку - свежий взгляд на звуковые вопросы и ответы.

http://www.ixbt.com/multimedia/sound-faq.shtml (22.05.2006).

25. Александр Радзишевский. Пространственное звучание (3D-звук).

http://www.websound.ru/articles/technol/3dsound.htm (22.05.2006).

26. Александр Радзишевский. Способы преобразования звука, звуковые эффекты.

http://www.websound.ru/articles/processing/effects.htm (22.05.2006).

27. Сергей Котов. Эффект реверберации - теория и практика.

http://www.ixbt.com/multimedia/theory-of-reverb.shtml (22.05.2006).

28. Дмитрий Шмунк. Восприятие и сжатие звука.

http://www.websound.ru/articles/theory/sound-theory.htm (22.05.2006).

29. Дмитрий Шмунк. Восприятие и сжатие звука.

http://www.websound.ru/articles/theory/sound-theory.htm (22.05.2006).

30. Дмитрий Шмунк. Восприятие и сжатие звука.

http://www.websound.ru/articles/theory/sound-theory.htm (22.05.2006).

31. Мандел Т. Разработка пользовательского интерфейса. ДМК Пресс, 2001.

32. Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования. - С-Пб.: Питер, 2001.

33. ГОСТ 19.505-79 ЕСПД. Руководство оператора. Требования к содержанию и оформлению. - М.: Издательство стандартов, 1979.

34. ГОСТ 19.504-79 ЕСПД. Руководство программиста. Требования к содержанию и оформлению. - М.: Издательство стандартов, 1979.

35. ГОСТ 19.701-90 ЕСПД. Схемы алгоритмов и программ. Правила выполнения. - М.: Издательство стандартов, 1991.

36. ГОСТ 12.0.002-80 ССБТ. Термины и определения. - М.: Издательство стандартов, 1980.

37. Соболева В.П. Методические указания по оформлению курсовых работ, курсовых и дипломных проектов. - Ижевск: Издательство ИМИ, 2003.

38. Почерняев С.В., Килин И.В. Методические указания по дипломному проектированию. - Ижевск: Издательство ИжГТУ, 1994.

39. Технико-экономическое обоснование дипломных проектов при разработке приборов и методов контроля качества. - Ижевск: Издательство ИжГТУ, 2001.

ПРИЛОЖЕНИЕ 1

ТЕКСТ ПРОГРАММЫ

П. 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;

N38: 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;

if Ext = '.EM1' then

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;

EM1: TEM1File;

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';


Подобные документы

  • Разработка программного обеспечения на языке C. Определение сигнала на выходе цепи, формирование его передаточной характеристики. Расчет длительности переднего фронта входного и выходного сигнала. Выбор структуры, отладка и тестирование программы.

    курсовая работа [83,0 K], добавлен 26.09.2014

  • Понятие звукового микшерного пульта как устройства первичной обработки звуковых сигналов. Технические параметры и функциональные возможности пультов. Смешивание источников сигнала в групповых каналах, дополнительные отводы и использование аттенюаторов.

    реферат [3,2 M], добавлен 09.11.2010

  • Описание архитектуры процессора TMS320C25. Моделирование фильтра в модуле FDATool программной среды Matlab. Алгоритм нерекурсивной фильтрации сигнала. Расчет массива отсчетов входного сигнала. Моделирование фильтра при различных частотах входного сигнала.

    курсовая работа [119,2 K], добавлен 14.06.2015

  • Анализ процесса оцифровки зависимости интенсивности звукового сигнала от времени. Характеристика технологии создания музыкальных звуков в современных электромузыкальных цифровых синтезаторах. Изучение основных звуковых форматов, способов обработки звука.

    курсовая работа [2,3 M], добавлен 23.11.2011

  • Исследования амплитудных и временных параметров электрического сигнала. Классификация осциллографов по назначению и способу вывода измерительной информации, по способу обработки входного сигнала. Классы SignalObject, Ostsilograf, Setka, Signal и Form2.

    курсовая работа [841,8 K], добавлен 08.09.2014

  • Генерирование и сохранение мелодии в виде звукового файла формата wav. Проведение частотного анализа полученного сигнала. Зависимость объема wav-файлов от разрядности кодирования сигнала. Спектр нот записанного wav-файла с заданной разрядностью.

    лабораторная работа [191,0 K], добавлен 30.03.2015

  • Анализ существующих алгоритмов обработки информации человеком и современных моделей памяти. Разработка алгоритмов и математической модели ассоциативного мышления. Имитационная модель обработки информации. Компьютерный эксперимент по тестированию модели.

    курсовая работа [2,3 M], добавлен 19.11.2014

  • Приведение выходного сигнала к аналитическому вид. Программа расчёта характеристик выходного сигнала электрической цепи. Таблица идентификаторов и описаний пользовательских подпрограмм. Построение графиков по массивам входного и выходного сигналов.

    контрольная работа [594,2 K], добавлен 28.09.2012

  • Обработка детерминированного сигнала. Классификация измерительных сигналов. Формула исходного сигнала. Построение спектра амплитуд и спектра фаз. Точность спектрального анализа. Нормальный закон распределения. Спектральный анализ случайного сигнала.

    курсовая работа [616,8 K], добавлен 07.07.2013

  • Задачи цифровой обработки изображений. Методы пороговой сегментации. Создание программы представления рисунка в виде матрицы и применения к нему пороговой обработки. Разработка интерфейса программы загрузки и фильтрации изображения с выбранным порогом.

    курсовая работа [2,0 M], добавлен 12.11.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.