졸업 작품 10

[C#] 미디 분석 프로그램 만들기– 5. 미디분석기 5.3 Final, 트리 뷰 상세 구현

1. 유튜브 동영상 강의 미디 분석 프로그램 - 미디 분석기, 트리 뷰 2. 해야 할 일 드디어 미디 분석 프로그램 마지막 강의입니다. 이번 강의에서는 TreeView에 청크의 내용을 상세하게 보여주는 부분과 노드를 선택하였을 때 대응하는 바이너리를 DataGridView에서 확인하기 쉽게 선택해서 보여주는 부분을 구현합니다. 3. MakeChunkNode 메서드 수정 미디 분석기 프로그램 MainForm.cs에서 MakeChunkNode 메서드를 수정합시다. chunk가 헤더인지 트랙인지에 따라 상세 노드를 만들어 매다는 메서드를 만들어 호출합시다. private TreeNode MakeChunkNode(Chunk chunk) { TreeNode tn = new TreeNode(chunk.ToStrin..

[C#] 미디 분석 프로그램 만들기– 5. 미디분석기 5.2 크로스 스레드 문제 해결 및 Hexa 값 보기

1. 유튜브 동영상 강의 미디 분석 프로그램 - 미디 분석기 2. 해야 할 일 이번 강의에서는 지난 강의에서 청크 목록을 ListBox에 추가할 때 발생하는 크로스스레드 문제를 해결할 거예요. 그리고 ListBox에 청크를 선택하면 청크의 원본 이진 데이터를 Hexa 값으로 DataGridView에 보여주는 작업을 할 거예요. 이 외에도 Header 클래스에 Division에 관한 코드를 수정합니다. 3. 크로스 스레드 문제 해결 크로스 스레드 문제는 폼이나 컨트롤을 생성한 스레드가 아닌 스레드에서 폼이나 컨트롤의 속성을 변경하는 등의 작업을 할 때 발생합니다. 이에 관한 자세한 사항은 크로스 스레드 발생 원인 및 해결하기를 참고하세요. 폼이나 컨트롤에는 InvokeRequired 속성을 갖고 있습니다...

[C#] 미디 분석 프로그램 만들기 – 5. 미디분석기 5.1 화면 배치 및 미디 파일 열기

1. 유튜브 동영상 강의 미디 분석 프로그램 - 미디 분석기 2. 해야 할 일 이전강의까지 미디 파일을 분석하는 ehmidilib를 만들었습니다. (*진행하면서 ehmidilib에 새로운 형식 및 기능을 추가합니다. *) 이번 강의부터 ehmidilib를 이용하는 미디분석기 프로그램을 작성하기로 합시다. 미디분석기 프로그램은 Windows Forms 앱(.NET Framework) 입니다. 이번 강의에서는 메인 폼에 컨트롤을 배치하고 미디 파일을 열어서 청크 목록을 보여주는 부분까지 구현할거예요. 미디 파일을 여는 작업을 위해 “파일 열기 대화상자”인 OpenFileDialog를 사용합니다. 미디 파일에 청크 목록을 분석하는 작업은 ehmidilib에 MidiParser 클래스를 추가하여 구현할 거예요...

[C#] 미디 분석 프로그램 만들기 – 4. 트랙 청크 4.6 System Event

1. 유튜브 동영상 강의 미디 분석 프로그램 - 트랙 청크 분석, System Event 2. System Event Message 현재 미디 파일에 헤드 청크와 트랙 청크를 분석하는 작업을 진행하고 있습니다. 현재 헤드 청크는 상세 분석하였고 트랙 청크도 메타 이벤트와 미디 이벤트는 분석하는 기능까지 구현했어요. 이번 강의에서는 시스템 이벤트를 분석하는 작업을 진행할게요. 앞에서 얘기했듯이 상태 바이트가 0xF0~FE까지가 시스템 이벤트입니다. 다음은 상태 바이트에 따른 시스템 이벤트에 관한 설명입니다. 0xF0 … 0xF7 ☞ System Exclusive Messages 상태 바이트 뒤에 제조사 ID가 오며 그 뒤에 오는 메시지는 가변적이며 맨 뒤에 0xF7이 옵니다. 0xF1 DD ☞ MTC Qu..

[C#] 미디 분석 프로그램 만들기 – 4. 트랙 청크 4.5 Midi Event 상세 구현

1. 유튜브 동영상 강의 미디 분석 프로그램 - 트랙 청크, 미디 이벤트 상세 분석 지난 강의에서 미디 이벤트를 분석하는 부분을 구현하였습니다. 이번 강의에서는 미디 이벤트의 상세 내용을 분석하기로 할게요. 2. 미디 이벤트 지난 강의에서 설명한 미디 이벤트 중에 이번에 상세 구현할 부분만 다시 설명하기로 할게요. Note off, Note on, Key after touch에서 F는 음 번호, S는 음 세기입니다. 음 번호를 12로 나누었을 때 몫은 옥타브이며 나머지는 음 이름입니다. Control Change에서 F는 컨트롤 번호이고 S는 새로운 값입니다. 컨트롤 번호에 대응하는 이름은 이전 글(MIDI 파일 MIDI 이벤트의 Control 데이터와 악기 이름)에 있어요. Program Change에..

[C#] 원격 제어 프로그램 1. 개요

1. 유튜브 동영상 강의 2. 소개 이 책에서는 C# 언어로 Windows Forms 응용 프로그램 형태로 원격 제어 프로그램을 만드는 전체 과정을 다루고 있습니다. 여기에서 만드는 원격 제어 프로그램은 P2P 방식으로 제어하는 부분과 제어 당하는 부분을 포함하는 프로그램입니다. 프로그램을 시작하면 [그림 1]처럼 원격 제어기 창이 뜨고 제어를 원하는 상대 IP 주소를 입력하여 설정하기 버튼을 클릭합니다. 원격 호스트에서는 [그림 2]처럼 원격 제어 요청을 한 컨트롤러의 주소가 보이면서 원격 제어 허용 버튼의 상태를 활성화합니다. 원격 제어 허용 버튼을 누르면 원격 컨트롤러에서 원격 제어를 시작할 수 있습니다. 이 프로그램을 만드는 과정에서 여러분께서는 Windows Forms 응용 프로그램을 만드는 방..

[C#] 원격 제어 프로그램 2. 원격 제어에서 작성할 형식 소개

1. 유튜브 동영상 강의 2. 작성할 형식 소개 원격 제어 프로그램을 만들기 전에 앞으로 작성할 형식들을 간략하게 소개할게요. MainForm은 프로그램이 시작하면서 뜨는 폼으로 원격 제어를 요청하거나 허용하는 역할을 담당합니다. RemoteClientForm은 원격 제어할 수 있게 원격 컨트롤러에게 원격 호스트의 화면을 보여주기 위한 폼입니다. VirtualCursorForm은 원격 제어 호스트에 프로그램 방식의 인공 커서를 띄워 원격 컨트롤러가 마우스를 사용하여 제어하기 쉽게 시각화하는 폼입니다. Controller는 원격 제어하는 곳에서 이미지 서버를 가동하고 이벤트 전송 클라이언트를 생성하는 역할을 담당합니다. 원격 제어 컨트롤러를 대표하는 클래스로 볼 수 있습니다. Remote는 원격 제어 컨트..

[C#] 원격 제어 프로그램 3. 프로젝트 생성 및 MainForm 자식 컨트롤 배치

1. 유튜브 동영상 강의 2. 프로젝트 생성 및 MainForm 자식 컨트롤 배치 먼저 윈도우즈 Forms 응용 프로젝트 템플릿을 선택하여 프로젝트를 생성하세요. 프로젝트 이름은 원격 제어기로 할게요. 기본으로 제공하는 Form1.cs의 이름을 솔루션 창에서 이름 바꾸기를 하여 MainForm.cs로 변경하세요. 솔루션 창에서 폼의 이름을 바꾸면 마법사에 의해 소스 코드의 클래스 이름도 자동으로 변환해 줍니다. 그리고 MainForm에 자식 컨트롤을 배치하세요. 먼저 MainForm의 캡션을 표시하기 위해 Text 속성을 원격 제어기로 설정하세요. [그림 6]에 표시한 것처럼 다른 컨트롤의 Name 속성과 Text 속성을 설정하세요. 원격 제어 요청한 호스트의 IP 주소를 표시할 텍스트 상자인 tbox_..

[C#] 원격 제어 프로그램 8. 원격 제어 – 화면 수신 이벤트

1. 유튜브 동영상 강의 2. 원격 제어 - 화면 수신 이벤트 이미지 수신 서버에서는 이미지를 수신할 때마다 폼에 이를 알려주어야 합니다. 이 부분을 위해 이벤트 처리를 할 것입니다. 먼저 이미지를 수신하였을 때 이벤트를 처리하기 위해 대리자와 이벤트 인자 클래스를 정의합시다. RecvImageEventArgs 이름의 클래스를 추가하세요. public class RecvImageEventArgs : EventArgs { 상대 IPEndPoint를 가져오기 할 수 있는 속성을 제공합시다. public IPEndPoint IPEndPoint { get; private set; } 상대측 IP 주소 개체와 IP 주소 문자열과 포트 정보를 가져오기 할 수 있는 속성도 제공합시다. public IPAddress ..

[C#] 원격 제어 프로그램 19. MainForm

1. 유튜브 동영상 강의 원격 제어 프로그램 - 마지막 강의 2. MainForm 가상 커서와 원격 제어 화면과 상대 IP와 포트를 멤버를 선언합니다. string sip; //상대 IP int sport; //상대 port RemoteCleintForm rcf = null;//원격 호스트 화면(제어 화면) VirtualCursorForm vcf = null;//가상 커서 속성 창을 이용해서 Load 이벤트 핸들러를 등록하세요. private void MainForm_Load(object sender, EventArgs e) { 가상 커서 폼과 원격 제어 호스트 화면을 표시할 폼을 생성합니다. vcf = new VirtualCursorForm(); //가상 커서 생성 rcf = new RemoteClei..