필자는 MIDI 파일에서 얻을 수있는 타이밍 데이터가있는 시나리오를 가지고 있습니다. MIDI 노트를 재생해야 할 때 UDP를 통해 명령을 보내야합니다. 기본적으로, 나는 "A 음을 연주하고, 125ms를 기다리며, B 음을 연주하고, 300ms를 기다리고, C 음을 연주하라"는 지시 사항을 가지고 있으며, "메모 X를 연주 할 때마다"나는 UDP를 통해 데이터를 전송해야합니다. 나는 TimerTask와 시스템 시간을 검사하고 얼마나 많은 시간이 경과했는지 계산하고 그것을 기반으로 음표를 연주할지 여부를 결정하는 루프가있는 간단한 스레드를 사용하여 시도했지만 두 방법 모두 타이밍 문제가있는 것으로 보입니다. TimerTask는 지정된 간격 (문서에 명시되어 있음)에서 정확하게 실행되지 않으므로 오류 메시지가 표시됩니다. 스레드가 더 잘 작동하지만 다른 스레드가 우선 순위를 얻고 있기 때문에 가끔씩 딸꾹질하는 경우가 있습니다.Android 앱에 정확한 타이밍으로 데이터를 보내려면 어떻게해야합니까?
더 정확한 타이밍으로이 데이터를 보내는 더 좋은 방법이 있습니까? 오디오를 재생하는 데 사용되는 Java의 Clip 인터페이스처럼 사용할 수 있습니까?
모든 도움을 주시면 대단히 감사하겠습니다.
그럼 오디오를 재생하는 응용 프로그램은 적절한 시간을 유지합니까? Android 앱에서 파일의 노래를 재생할 때 이러한 유형의 문제는 없습니다. 위와 같지 않다고 말하는 것이 아닙니다. 언급 한 문제에도 불구하고 오디오 재생이 어떻게 수행되는지 알고 싶습니다. – jteezy14
타이밍 데이터가 아닙니다. 파일 데이터를 메모리에 씁니다. 그런 다음 데이터가있는 사운드 카드에 사운드 카드를 알려주고 사운드 카드는 메모리를 읽고 출력합니다. 이것은 물론 단순화 된 것입니다 (전체 답변에는 DMA 및 버퍼 재활용과 같은 것이 포함됨). 그러나 실제 음악을 재생하려면 하드웨어의 별도 부분으로 전달해야합니다. –