Adi Опубликовано: 19 июня, 2003 Жалоба Share Опубликовано: 19 июня, 2003 Около года назад, мне понадобилось сделать маленькую програмку, которая считала бы число ударов в минуту какой-нибудь песенки - BPM. С помощью друга я справился с задачей... только вот прога давала не совсем точные данные... Алгоритм должен был работать складывая и находя ср. арифм. времени 10-ти ударов по кнопке, а затем уже по формуле 60/х , где х - полученное ср. арифм. - находить bpm. проблемка была в том, что вместо ср. ариф - в конечном счете прога отнимала от конечного - начальное значение и делила на 9... Хотелось бы послушать, вернее почитать, ваши соображения по этому поводу!!! Цитата Ссылка на комментарий Поделиться на других сайтах More sharing options...
Гость -Ланнер- Опубликовано: 20 июня, 2003 Жалоба Share Опубликовано: 20 июня, 2003 задача понятна, алгоритм прост: - засекай, скажем, секунд 10 и считай количество ударов. - полученное число умножай на 6 - получится количество ударов в 60 сек (то есть 1 мин) прим. - погрешность расчета уменьшается с увеличением времени замера, то есть можно считать удары за 20 сек и умножать на 3 - результат будет точнее. start (): - start timer - start counter running (): - check timer (continue or stop?) - register beats end (): - stop counter - calculate result не совсем понятно - какие возможности и ограничения существуют по автоматическому отсчету времени и счету ударов. объясни, что за кнопка, которая регистрирует удары -) с нее можно считывать инфу в реальном времени и передавать в программу? Цитата Ссылка на комментарий Поделиться на других сайтах More sharing options...
Adi Опубликовано: 21 июня, 2003 Автор Жалоба Share Опубликовано: 21 июня, 2003 Понимаешь ли в чем дело, предлагаемый тобой метод дает погрешность в 6 BPM, в то время как допустимая погрешность должна быть порядка 0.1 - 0.3 . Так что - не все так просто, что дает возможность вытыкнуться... Цитата Ссылка на комментарий Поделиться на других сайтах More sharing options...
Adi Опубликовано: 22 июня, 2003 Автор Жалоба Share Опубликовано: 22 июня, 2003 OK, не буду устраивать здесь "что, где, когда" по алгоритмике... Просто обращусь за помощью к специалистам, если конечно таковые имеются... В прошлой версии я суммировал интервалы между ударами и находил их ср. ариф. не думая, что это и есть разница между первым и последним ударом => неточность порядка 2-3 бмп... Ниже представлен pas новой версии, где ср. ариф. находится в 2 этапа: между каждыми ударами, и общий среди всех полученных результатов. ( на запятую в полученном числе не обращайте внимания - она смещена на 2 знака влево - а само число бпм - приблизительно верно! - если конечно точно бить...) Цель проекта - уменьшить погрешность получаемую при каждом неточном ( не в удар) нажатии кнопки. _____________________ данный pas, как уже догадались знатоки, написан на языке Delphi... public t1:ttime;{ Public declarations } fms:word; b:boolean; mas: array [1..10] of word; k, i:integer; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); var t1, t2: ttime; begin t1:=(now); listbox1.Items.Add(timetostr(t1)); end; procedure TForm1.Button1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); var h,m,s,ms:word; begin t1:=(now); decodetime(t1,h,m,s,ms); if b then fms := s*1000 + ms; //listbox1.Items.Add(inttostr(s)+' '+inttostr(round(ms / 10))); if (not B) and (i<10) then begin listbox1.Items.Add( inttostr(((((s*1000 + ms) - fms)) ))); inc(i); mas := (((s*1000 + ms) - fms)); end; if b then b := false; fms := s*1000 + ms; end; procedure TForm1.FormCreate(Sender: TObject); begin k:=0; i:=0; b:=true; t1:=0; fms:=0; end; procedure TForm1.Button2Click(Sender: TObject); var j,amt:integer; itogo:single; begin amt:=0; for j := 1 to 10 do amt :=amt + mas[j]; itogo := amt / 10; form1.caption := floattostr(600 / itogo); end; procedure TForm1.Button1Click(Sender: TObject); begin end; end. Цитата Ссылка на комментарий Поделиться на других сайтах More sharing options...
Adi Опубликовано: 22 июня, 2003 Автор Жалоба Share Опубликовано: 22 июня, 2003 так и думал, что в коду вылезут всякие смайлики - хорошо еще, что всего 1... Короче вот в атачменте полностью весь сорс!!! - кому интересно - go ahead! Цитата Ссылка на комментарий Поделиться на других сайтах More sharing options...
Гость -Ланнер- Опубликовано: 23 июня, 2003 Жалоба Share Опубликовано: 23 июня, 2003 Понимаешь ли в чем дело, предлагаемый тобой метод дает погрешность в 6 BPM, в то время как допустимая погрешность должна быть порядка 0.1 - 0.3 . Так что - не все так просто, что дает возможность вытыкнуться... Adi ты говорил о простой программке и просил высказать соображения. То, что мои соображения не удовлетворяют требованиям погрешности 0.1 - 0.3, о которых не было упомянуто в условии задачи, не повод для неуместных рассуждений о моих мотивах. Надеюсь, ты тоже понимаешь. ШАЛОМ Цитата Ссылка на комментарий Поделиться на других сайтах More sharing options...
Adi Опубликовано: 23 июня, 2003 Автор Жалоба Share Опубликовано: 23 июня, 2003 воистину об.... ШАлом !!! Цитата Ссылка на комментарий Поделиться на других сайтах More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.