BPM은 Beats Per Minute(1분 당 비트 수)의 약자로 음악의 빠른 정도를 측정하기 위해 필요한 단위입니다.

60 BPM 은 1분에 비트가 60개 이므로 1 비트 당 1초의 시간이 배정됨을 알 수 있습니다.


1비트의 시간으로 BPM을 역계산 할 수 있습니다.

계산식은 다음과 같습니다.(아래 식에서 (s) 는 초, second)


BPM = 60(s) / 1비트의 시간(s)


프로그래밍에서는 보통 밀리세컨드(millisecond, ms)를 사용합니다.

위 식을 밀리세컨드로 변환해서 계산하면 다음과 같습니다.


BPM = 60000(ms) / 1비트의 시간(ms)


프로그램에서 탭(Tab) 으로 비트를 세고 BPM을 구하려면 어떻게 해야 될까요?


우선 첫번째 탭의 시간과 두번째 탭의 시간이 필요합니다.

주의할 점: 시간은 반드시 밀리세컨드 단위까지 있어야 합니다.

그리고 두 시간의 차이로 1비트의 시간을 구하면 됩니다. 참 쉽죠?


1비트의 시간(ms) = 두번째 탭의 시간 - 첫번째 탭의 시간

BPM = 60000(ms) / 1비트의 시간(ms)

(위 2줄짜리 식을 1줄로 바꿔도 상관 없습니다.)


4분의 4박자의 1마디 동안의 BPM을 구하려면 어떻게 해야 할 까요?


그러려면 총 5개의 탭 시간이 필요합니다.


4비트의 시간(ms) = 다섯번째 탭의 시간 - 첫번째 탭의 시간

1비트의 시간(ms) = 4비트의 시간(ms) / 4

BPM = 60000(ms) / 1비트의 시간(ms)

(위 3줄짜리 식을 1줄로 바꿔도 상관 없습니다.)


프로그램을 만들 때에는 버튼 하나를 만들어서 탭할 때 마다 시간을 저장하고 조건에 따라 로직을 계산할 수 있도록 하면 되겠네요.

'프로그래밍 > 알고리즘' 카테고리의 다른 글

로또 번호 추출하기  (0) 2018.06.04

안드로이드 개발을 위해서는 자바 언어를 사용합니다.


이전에 visual studio 로 c# 프로그래밍을 해본 경험과 비교해 보면

안드로이드 스튜디오에서 자바 코드 부분을 디버깅 하기 힘들었습니다.

(어렵다기 보다는 제가 비전공자다 보니 visual studio에서 제공하는 디버깅이 편했던 거죠.)


그래서 자바 매서드는 visual studio code에서 자바 개발 환경을 구축해서 디버깅 해보려고 합니다.


visual studio code에서 자바 웹앱을 만드는 방법에 대한 튜토리얼을 제공합니다.


https://code.visualstudio.com/docs/java/java-tutorial


위 페이지의 내용을 요약하면 다음과 같습니다.


1. 시나리오

    - Visual Studio Code를 활용하여 간단한 웹용 Spring Boot 앱을 시작합니다.


2. 시작하기 전에

    2-1. JDK 를 설치하고 환경변수 "JAVA_HOME"에 JDK 경로를 추가합니다.

        - 기존에 안드로이드 스튜디오를 설지했다면 이미 환경변수를 추가했기 때문에 생략해도 됩니다.

    2-2. Apache Maven을 다운로드 받고 설치합니다.

        - (윈도우 기준Binary zip archive, Link 부분을 클릭해서 파일을 다운로드 받습니다.

        - zip 파일을 "C:\Program Files\" 하위 경로에 압축을 해제합니다. 그러면 "C:\Program Files\apache-maven-3.5.3" 폴더에 파일이 설치됩니다.

        - "C:\Program Files\apache-maven-3.5.3\bin" 경로를 환경변수 path 에 추가합니다.


3. "Spring Boot" 앱을 다운로드 받고 설치합니다.

    - 설치 방법은 2가지가 있습니다. 첫째, 커맨드 팔레트에 git:clone 명령어를 입력해서 설치하는 방법과 github 의 spring-boot 페이지(https://github.com/spring-guides/gs-spring-boot)에서 zip를 다운로드 받아서 압축을 푸는 방법이 있습니다. 저는 2번째 방법으로 sping-boot 앱을 다운로드 받아서 압축을 풀었습니다.


4. Visual Studio Code 프로그램을 다운로드 및 설치 후 실행합니다.


5. Visual Studio Code 내에서 확장 프로그램 Java Extension Pack 를 설치합니다.

    - 상단메뉴 보기(V) - 확장(X, 단축키 Ctrl + Shift + X)


6. "Spring-Boot" 앱이 있는 폴더를 불러옵니다.

    - 상단메뉴 파일(F) - 폴더 열기(F, 단축키 Ctrl + K, Ctrl + O(Ctrl 키를 누른 상태에서 K, O 키를 순서대로 입력하면 됩니다.))

    - spring-boot 폴더를 찾고 "폴더 선택" 버튼 클릭


7. 디버깅 시작을 하면 프로그램이 실행됩니다.

    - 상단메뉴 디버그(D) - 디버깅 시작(S, 단축키 F5)


8. 인터넷 브라우저에 "http://localhost:8080/" 주소를 입력하면 테스트 페이지가 출력됩니다.


여기서 실행되는 파일을 보니 아래 파일의 내용이 출력되는 것을 알 수 있습니다.

spring-boot app 설치 폴더\complete\src\main\java\hello\HelloController.java


이 파일에 테스트할 자바 코드를 입력해서 디버깅을 하면 쉽게 코드 진행 상황 및 오류를 쉽게 확인할 수 있습니다.


궁금하신 점 있으면 댓글 주세요.


감사합니다.

'프로그래밍 > Java' 카테고리의 다른 글

로또 번호 추출하기 - Java 코드  (0) 2018.06.04

로또 번호 추출하는 자바 매서드를 만들어 봤습니다.

코드 및 주석은 아래를 확인해 주세요.

import java.util.*;

public class Lotto1 {

    public static void main(String[] args) {
        GetLottoNumbers();
    }

    private static void GetLottoNumbers()
    {
        ArrayList SelectedNumbers6 = new ArrayList(); // 선택된 6개의 번호 정의
        ArrayList Balls = new ArrayList(); // 로또 45개의 공 정의
        
        // 45개의 공 번호 초기화 시작
        for(int i=1; i<=45; i++)
        {
            Balls.add(i);
        }
        // 45개의 공 번호 초기화 끝
        
        // 공 선택 (6번 반복) 시작
        for(int i = 0; i<6 ;i++)
        {
            int selected_index = (int)Math.floor(Math.random()*(45-i)); // 랜덤으로 1개의 공 선택 
            SelectedNumbers6.add(Balls.get(selected_index)); // 선택한 공을 선택된 번호에 저장
            Balls.remove(selected_index); // 선택된 공 삭제
        }
        // 공 선택 (6번 반복) 끝

        // 출력 시작
        String PrintResult = "";
        
        for(int i = 0; i<6 ;i++)
        {
            PrintResult += SelectedNumbers6.get(i); 
            if(i != 5) PrintResult +=". ";
        }
        
         System.out.println(PrintResult);
         // 출력 끝
    }
}

내용 확인 후 잘못된 점이나 궁금하신 점이 있다면 댓글주세요.

감사합니다.

윈도우 프로그램을 개발할 파일 또는 폴더를 불러올 때 사용할 수 있는 도구 상자를 제공합니다.
파일을 선택하기 위해서는 OpenFileDialog 도구 상자를 사용하고, 폴더를 선택하기 위해서는 FolderBrowserDialog 도구 상자를 사용합니다.

이 중에서 폴더를 선택하기 위한 FolderBrowserDialog 은 사용하기에 불편한 점이 있습니다.
폴더 경로를 트리 구조로만 확인할 수 있고 텍스트로 확인할 수 없을 뿐만 아니라, 폴더 경로를 복사했다고 하더라도 붙여넣을 수 있는 방법이 없어서 트리구조에서 일일이 찾아야 합니다.

그래서 생각한 것이 OpenFileDialog 를 사용해서 폴더를 선택하는 방법이 있을까 하고 구글 검색을 하게 되었습니다.
검색 결과 OpenFileDialog 와 비슷한 형식으로 폴더를 선택하기 위해서는 MS에서 제공하는 WindowsAPICodePack 을 설치해서 CommonOpenFileDialog 도구 상자를 사용하는 것으로 문제를 해결할 수 있습니다.

제가 찾은 글은 여러개이지만 제가 참고한 출처는 아래와 같습니다.
Use a standard Windows dialog to let the user select a folder in C#
http://csharphelper.com/blog/2014/02/use-a-standard-windows-dialog-to-let-the-user-select-a-folder-in-c/

윈도우 폼 프로젝트 예제에서 CommonOpenFileDialog 를 사용하기 위해서는 Nuget 패키지에서 WindowsAPICodePack-Shell 을 설치하면 됩니다.
https://www.nuget.org/packages/WindowsAPICodePack-Shell

Visual Studio 2017 기준으로 상단 메뉴의 [도구(T) → Nuget 패키지 관리자(N) → 패키지 관리자 콘솔(O)]을 실행한 다음 아래 명령어를 입력합니다.

PM> Install-Package WindowsAPICodePack-Shell -Version 1.1.1
(상단메뉴의 [도구(T) → Nuget 패키지 관리자(N) → 솔루션용 Nuget 패키지 관리...]에서도 설치가 가능하지만 무슨 이유에서 인지 설치 시 오류가 발생하였습니다.)

설치가 완료되면 다음과 같이 코딩을 진행합니다.

1. WindowsAPICodePack Dialogs 클래스를 참조합니다.

using Microsoft.WindowsAPICodePack.Dialogs;

2. 버튼 클릭 이벤트 안애 아래와 같은 명령어를 입력합니다.

// CommonOpenFileDialog 클래스 생성
CommonOpenFileDialog dialog = new CommonOpenFileDialog();
// 처음 보여줄 폴더 설정(안해도 됨)
//dialog.InitialDirectory = "";
dialog.IsFolderPicker = true;
if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
    label.Text = dialog.FileName; // 테스트용, 폴더 선택이 완료되면 선택된 폴더를 label에 출력
}

버튼을 클릭하면 다음과 같은 화면이 나타납니다.

감사합니다.

안드로이드에서 버튼을 클릭했을때 동작하게 하는 방법을 알아보겠습니다.

개발도구는 안드로이드 스튜디오 기준으로 설명합니다.


버튼 클릭 이벤트를 실행하는 대표적인 방법은 2가지가 있습니다.


방법1. Activity 코드 (java 파일) 안에 있는 onCreate 매서드 안에 버튼 클릭 이벤트를 설정하기

방법2. Activity 화면 (xml 파일) 의 버튼에 onClick을 설정하고 Activity 코드 (java 파일)에 onClick 매서드 설정하기


기본적으로는 첫번째 방법을 많이 사용합니다.


첫번째 방법을 위해서는 다음과 같은 절차가 필요합니다.


1. 화면에서 버튼을 만든다.

2. 버튼에 아이디를 부여한다.

3. java 파일에서 버튼을 불러온다.

4. 불러온 버튼에 클릭 이벤트를 설정합니다.

5. 이벤트 안에 원하는 코드를 입력합니다.


그럼 순서대로 진행해 보겠습니다.


1. 화면에 버튼을 만든다.


아래 그림은 안드로이드 스튜디오에서 xml - design 탭을 선택했을 때의 화면입니다.



activity xml 파일을 선택합니다.

(좌측 탐색기 타입이 android일 경우 app > res > layout 폴더에 있습니다.)



디자인 탭이 선택된 상태에서 Palette 부분에 있는 Button을 안드로이드 화면으로 드래그 합니다.



2. 버튼의 아이디를 부여한다.


버튼 속성에서 아이디를 확인합니다. 생성한 버튼의 아이디를 "button1"로 설정합니다.



3. java 파일에서 버튼을 불러온다.


activity java 파일을 선택합니다.

(좌측 탐색기 타입이 android일 경우 app > java > 패키지 이름 폴더에 있습니다.)



onCreate 매서드 아래쪽에 아래 코드를 추가합니다.


button1 = (Button)findViewById(R.id.button1);

4. 불러온 버튼에 클릭 이벤트를 설정합니다.


button1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { // 원하는 코드 입력 } });

5. 이벤트 안에 원하는 코드를 입력합니다.


가장 간단한 토스트 메시지를 띄어 보겠습니다.

아래 코드를 위의 원하는 코드 부분 입력 부분에 추가합니다.


Toast.makeText(getApplicationContext(), "button1 클릭", Toast.LENGTH_LONG).show();

on Create 매서드의 전체 코드는 아래와 같습니다.


protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "button1 클릭", Toast.LENGTH_LONG).show(); } }); }


코드가 입력된 화면입니다.



이제 에뮬레이터에서 실행해 보겠습니다.

버튼을 클릭하면 아래쪽에 토스트 메시지가 나타납니다.




감사합니다.

+ Recent posts