SCREEN 12:CLS WINDOW(0,-128)-(640,128):'определяем рабочее окно '======================== 'рисуем на экране сетку FOR X=0 TO 640 STEP 32 PSET(X,-128),7 LINE-(X,128),7 NEXT X FOR Y=-128 TO 128 STEP 16 PSET(0,Y),7 LINE-(640,Y),7 NEXT Y '======================= '======================= 'будем работать с вавой "елка2" P12$="ELKA2" '======================= P$=P12$ LOCATE 2,3:?P$;".WAV - три ноты - Вле-Су-Ро":'напишем название файла locate 3,3:?"Легенда" locate 4,3:?"голубой - выборки вавы" locate 5,3:?"зелёный - огибающая" locate 6,3:?"красный, синий - пороги триггера Шмидта" locate 7,3:?"белый - отдельные ноты" locate 8,3:?"-выход по окончанию" FILE$="elka2.wav" OPEN FILE$ FOR BINARY AS #1:'открываем файл вавы для чтения LF=LOF(1):'LF - это длина файла SK=45:'начало информации в ваве; до этого места расположена служебная 'информация файла SEEK 1,SK:'отступить от начала файла GET$ 1,1,A$:'считываем выборки A=ASC(A$):'переводим считанную в число KA=.85:'коэфф передачи сигнала KI=0 :'начальная позиция чтения вавы KX=1:'конечная позиция; может быть от 0 до 1 NM=INT((LF-SK)*(KX-KI)):'полное число выборок в интервале от KI до KX 'в выбранном интервале(от 0 до 1) = длина файла - отступ информационный NI=INT((LF-SK)*KI):'первое число для анализа DLINA=NM-NI+1:'количество анализируемых выборок SEEK 1,NI:'передвинуть указатель на первую анализируемую позицию KU=100:'коэффициент усреднения для огибающей R=0 U=0 TRIGGER=0 FOR N=NI TO NM GET$ 1,1,A$:'читаем выборку A=ASC(A$) A=-128+A:'превращаем её в число от -128 до +128 U=((ABS(A)-U)/KU)+U:'выпрямление и усреднение POR=28:'порог срабатывания триггера Шмидта POR2=18:'порог отпускания триггера Шмидта IF KA*1*U>POR AND TRIGGER=0 THEN R=100:TRIGGER=1 IF KA*1*U<=POR2 AND TRIGGER=1 THEN R=0:TRIGGER=0 H1=1*U-90 Y1=.3*KA*R-120 X1=((N-NI+2)*640)/(NM-NI) PSET(X1,H1),10:'огибающая - зелёным PSET(X1,(POR/KA)-90),12:'верхний порог триггера Шмидта - красным PSET(X1,(POR2/KA)-90),9:'нижний порог - синим PSET(X1,Y1),15:LINE -(X1,Y1-.3*KA*R),15:'белым - "ноты" PSET(X1,.3*A+30),11 NEXT N CLOSE 1:'закрыть файл wata: if inkey$<>chr$(27) then wata STOP