2012-09-10 4 views
0

터보 C++에는 sound, nosounddelay의 세 가지 기능을 제공하는 dos.h이라는 헤더 파일이 있습니다. 이 세 가지 기능을 사용하여 C++에서 기본적인 피아노 프로그램을 작성할 수있었습니다.Java dos 스타일의 사운드 재생 빈도

Java를 사용하여 동일한 결과를 얻고 싶었습니다. 내 옵션은 jfugue에서 제공 한 라이브러리 또는 javax.sound.sampled을 사용하는 것입니다. 문제는 각 음표를 미리 연주하는 시간을 알 수 없다는 것입니다.

사용자가 특정 키를 누르면 특정 주파수 재생을 시작하고 사용자가이를 놓을 때만 중지하고 싶습니다. 이 문제를 어떻게 해결할 수 있습니까?

+1

이 샘플을보고 특정 음표를 연주 해보십시오. http://stackoverflow.com/questions/2064066/does-java-have-built-in-libraries-for-audio-synthesis/2065693#2065693. 키 프레스/릴리즈에서 연주를 중지하려면 하나 또는 두 개의 청취자를 구현하는 것일뿐입니다. – Alex

+0

MIDI를 사용하여 시도해 볼 수도 있지만 샘플 사운드 API는보다 안정적입니다. –

답변

1

자바 튜토리얼에는 가장 안쪽 while 루프에서 부울을 참조하여 바이트를 패키징하고 재생을 위해 SourceDataLine에 전달하는 예제가 있습니다.

따라서 이벤트 (키 오프 이벤트)를 작성하여이 부울을 변경할 수 있습니다. 사운드 재생은 자체 스레드에 있기 때문에 부울을 "휘발성"으로 만들고 재생을 직접 제어하지 않고이 메시징 방법을 사용하는 것이 좋습니다.

내가 튜토리얼 예를 찾을 수 있는지 보자 ... "소스 데이터 라인 사용"섹션의 예에서 http://docs.oracle.com/javase/tutorial/sound/playing.html

공지 사항 하나 "정지!"는 식으로 while 루프가 조건의. 이 예제의 재생을위한 기본 클래스는 부울 값 "stopped"을 가지고 있으며 아마도 "휘발성"이라고 표시되어있을 것입니다.