2014-11-25 2 views
0

내 키보드에는 음악을 제어하기 위해 다음 키를 재생, 일시 중지, 재생할 수있는 키가 있습니다. 후드 아래에서 어떻게 수행되는지 알고 싶습니다. 운영 체제에서 정보를 음악 플레이어로 전달하는 일종의 API입니까? 플레이어가 누른 키를 읽고 반응합니까?음악 명령은 어떻게 처리됩니까?

뮤직 플레이어를 제어하는 ​​통일 된 방법이 있습니까?

답변

1

필자는 플랫폼 독립적 인 상태를 유지하려고 노력할 것입니다. 그러나 어느 시점에서 필자는 Windows에 노력해야 할 것입니다.

먼저 키를 누를 때 일어나는 일을 이해하는 것이 중요합니다. Microsoft의이 페이지는이 섹션에서 요약 할 정보를 정확하게 설명합니다. 키를 누르면 키보드는 누르는 키를 고유하게 식별하는 스캔 코드를 생성합니다. 그러나 이러한 스캔 코드는 키보드에 따라 달라 지므로 직접 스캔하지 마십시오. OS 인 Windows는 스캔 코드를 가상 키 코드로 변환합니다. 가상 키 코드는 각각의 스캔 코드와 유사한 OS 고유 코드입니다. 가상 키 코드는 일반적으로 가장 낮은 수준에서 작업하게 될 것입니다. 또한 일부 가상 키 코드는 일반적으로 프로그래머와 관련이 없다는 점에 유의해야합니다. 예를 들어 OS 명령에 사용되는 "ctrl"과 같은 키가 있습니다.

위의 링크에서도 API를 찾을 수 있지만 C++의 경우 알고 있습니다. 나는 Ruby 자체에 대해 모른다.

이제 두 번째 질문에 대해 플레이어가 누른 키를 읽고 반응하는지 여부를 묻습니다. 저는 소프트웨어 디자인에서 키, 버튼 등으로 사용되는 공통의 원리를 제시하려고합니다. Media Player의 실제 구현은 다른 질문입니다. 사용자 상호 작용을 완전히 요구하는 사용자 입력은 일반적으로 객체 지향 디자인에서 Oberserver-Oberservable 패턴으로 구현됩니다. 다음은 link이 루비에 대한이 패턴을 설명합니다.

우리의 경우 Oberservable 역할을하는 KeyboardListener가 있습니다. 그것은 키가 눌러 졌을 때 통보 받기를 원하는 OS로부터 '요청'할 것이다. 또한 음악을 플레이어, 일시 정지 등으로 만들 수있는 MusicManager를 준비하십시오.이 플레이어는 Overserver로 작동합니다. 키를 누를 때 KeyboardListener는 눌 렸던 키 유형에 대한 정보가 들어있는 객체를 인스턴스화하여 MusicManager에 전달합니다. 이것은, 후드 아래에 무슨 일이 생긴이 구현에 따라 어떤 것 :

  1. 를 눌러 일시 정지 버튼을

  2. OS가 버튼을

  3. 을 누른 일시 중지 KeyboardListener을 알려
  4. KeyboardListener는 포함하는 이벤트를 생성하는 것 버튼을 누른 다음 MusicManager로 전달

  5. MusicManager가 동작 원인을 결정합니다.

그럼 2 단계를 건너 뛰고 3 단계로 바로 이동하지 않으시겠습니까? 그렇게해야하는 몇 가지 이유가 있지만 소프트웨어를 플랫폼 독립적이고 유지 보수가 가능한 방식으로 설계 할 수 있습니다. 채택되어야 할 유일한 코드는 KeyboardListeners입니다. '; 운영체제에 정보를 요청하는 방법에 대한 코드 만 변경하면됩니다. 따라서 우리는 WindowsKeyboardListener, LinuxKeyboardListener 등을 가질 것입니다. 특정 Listener가 실제로 사용될 어떤 것은 런타임 환경에 의존합니다.

관련 문제