2009-12-06 4 views
4

java.applet.AudioClip 개체가있는 경우 재생을 호출하여 한 번 재생할 수 있습니다. 그러나 여러 번 재생을 호출하면 클립이 계속 다시 시작됩니다. 이 문제를 해결할 수있는 유일한 방법은 동일한 사운드 파일의 여러 인스턴스를로드하는 것입니다. 그것은 기억 낭비로 보인다. 게임에서 폭발이 20 번 발생하면 20 개의 사운드 파일 인스턴스를로드해야합니다.Java에서 동일한 오디오 클립을 동시에 여러 번 재생할 수 있습니까?

여기에서 AudioClip 대신에 그것을 사용하면 javax.sound가 도움이되는지 간단히 살펴 보았습니다. 동일한 클립을 여러 번 동시에 재생할 수 있다는 것을 나타내는 것은 아무것도 표시되지 않습니다.

간단한 java.applet.AudioClip 또는 javax.sound 항목을 사용하여 동일한 사운드 파일을 여러 번로드하지 않고도 할 수 있습니까?

답변

5

여기 http://forums.sun.com/thread.jspa?threadID=5370182

당신이 클립을 사용하는 경우 확인, 당신은 동시에 사운드를 재생해야하는 객체 당 하나 개의 복사본을 유지해야합니다. 하나의 마스터 복사본을 유지 한 다음 필요에 따라 클립 사본을 만들어 재생할 수 있으며 복사본을 덤프하여 메모리 사용량을 줄일 수 있습니다.

두 번째 아이디어는 나만의 클립 클래스를 작성하는 것입니다. 근본적으로, 당신이해야 할 일은 그것을 재생하기 위해 TargetDataline에 사운드 데이터를 덤핑하는 것입니다. 올바른 속도로 버퍼링 및 재생을 처리합니다. 그게 전부라면 동일한 인스턴스에서 여러 번 덤프하고 여러 번 재생할 수 있어야합니다.


바이트 배열로 원료 샘플 데이터를 판독하고, 소리가 재생 될 필요가있을 때마다 I는 AudioInputStream를 투입하는이 InputStream와 어레이로부터 데이터를 판독. 재생이 끝나면 클립 만 닫으면 시스템 리소스가 낭비되지 않습니다.

+0

바이트 배열 아이디어는 꽤 똑똑합니다. – warren

관련 문제