1) 항상 BALANCE 또는 MASTER_GAIN이 있다고 가정하는 것이 안전하다고 생각하지 않습니다. 어쩌면 있을지도 모른다. 오디오에 대한 Java Controls에 대한 나의 경험은 어리 석고 짧았습니다. 나는 내 자신의 믹서를 쓰기로 결정했고 그렇게했다. 나는이 코드를 기꺼이 공유 할 의향이있다. 여기에는 볼륨 및 패닝을 처리하기위한 기본 조항이 포함됩니다.
작동하는 경우에도 Java 컨트롤은 사용되는 버퍼 크기에 의해 제한되는 입도를 가지며, 페이드를 수행하려고 할 때 클릭을 만들지 않고 페이드 인 또는 페이드 아웃 할 수있는 속도를 심각하게 제한합니다. 단일 볼륨을 설정하고 유지하는 것은 문제가되지 않습니다.
또 다른 자바 라이브러리 (맨손이지만 뼈가 있지만 java-gaming.org에서 여러 게임 프로그래머가 심사)는 "ginyub"를 통해 사용할 수있는 "TinySound"입니다. 나는 그것을 살펴 봤지만 나 자신을 사용하지는 않았다. 또한 모든 사운드를 단일 출력 SourceDataLine에 믹싱합니다. 볼륨이나 패닝을 처리하는 방법을 기억하지 못합니다. 그는 ogg/vorbis 파일에 대한 조항을 포함 시켰습니다.
2) "샘플"을 언급 할 때 클립 작업을 어떻게 사용하는지 잘 모르겠습니다. 예, 100 개의 클립을 미리로드 할 수 있습니다. 그리고이 클립 중 하나 또는 다른 클립을 자체 스레드 (오디오 믹싱 라이브러리 대신 원시 Java를 사용한다고 가정)에서 직접 재생 한 다음 프레임 0으로 다시 설정 한 다음 다시 재생합니다. 그러나 한 번에 하나의 스레드 만 주어진 클립을 재생할 수 있습니다. 즉, 동시 재생을 수용하지 못합니다. (주어진 재생을 멈추고 위치를 프레임 # 0으로 다시 이동 한 다음 다시 재생하면 "다시 트리거"할 수 있습니다.)
클립의 지속 시간은 얼마입니까? 그 중 100 개는 많은 메모리가 될 수 있습니다. 각각 초당 길이라면 100 초 * 초당 44100 프레임 * 프레임 당 4 바이트 = 17640,000 바이트 (사운드 용 RAM은 거의 18MB!).
한 번에 몇 개만 필요하며 어떤 것이 필요할 지 예측할 수 있다면 미리로드하고 다시 사용할 수 있습니다. 그러나 클립이 재생 시점에로드 될 것이라는 생각의 함정에 빠지지 마십시오.이 작업을 수행하는 경우 SourceDataLines을 대신 사용해야합니다. 클립이하는 것처럼 전체 외부 파일이 메모리에 저장 될 때까지 기다릴 필요가 없으므로 재생이 더 빨리 시작됩니다. 0 번째 프레임으로 재설정하고 재생 (또는 반복)하려는 경우 클립 만 사용하는 것이 좋습니다!
3) 일단 클립으로로드되면 기본적으로 갈 준비가되어 있지만 실제로 추가 스테이지가 없습니다. 외부 파일과 내가 생각할 수있는 메모리 클립이 실제로 도움이 될 수있는 중간 단계는 없습니다.
아, 또 다른 생각 : 스레드 풀 (= 최대 동시 소리 수)을 만들어 관리하는 것이 좋습니다. 나는 스케일링이 어느 시점에서 여분의 관리를 정당화 하는지를 모른다.
4) 여러 개의 컨텍스트에서 동시 SourceDataLines을 실행할 수 있으므로 전체 파일을 RAM에 보관할 필요가 없습니다. 이 경우 미리로드 할 수있는 것은 파일 위치의 문자열뿐입니다. 내가 틀렸을 수도 있고 파일을 미리로드 할 수도 있지만 그렇지 않을 수도 있습니다. 확실히 AudioInputLine을 재사용 할 수 없습니다! 더하기 측면에서, SDL은 UNLOADED Clip에 비해 꽤 빨리 시작됩니다.
어쨌든! 단일 출력으로 제한하는 시스템 (예 : 일부 Linux OS)이 있으며,이 출력은 Clip 또는 SourceDataLine 중 하나 일 수 있습니다. 내 자신의 믹서를 만들기로 결정했을 때 그것은 나를위한 클린 처였습니다.
한 번에 8 또는 10 개의 톤 만 재생된다고 생각하면 그래픽이 너무 야심적이 아닌 한 (아마도 위에서 언급 한 Linux OS 상황을 고려하지 않음) 아마 괜찮을 것입니다. 테스트 해봐야 할 것입니다.
어떤 대체 언어를 고려하고 있는지 알 수 없습니다. 내가 아는 유일한 대안은 C의 맛입니다. Java를 제외하고 내가 아는 대부분의 것들은 저수준이 아니거나 그만큼의 오디오 프로세싱을 처리 할만큼 빠르지 않다. 그러나 나는 단지 겸손하게 경험했고, 건전한 엔지니어링 배경은 없지만 스스로 가르쳤다.
* "답변 번호를 1 ~ 4로 기입하십시오."* 4 가지 질문 (4 가지 개별 실)을 고려해보십시오. –
* "Java에서 처리 할 수있는 오디오 클립의 수는 얼마입니까?"* 내 경험에 의하면 하드 및 빠른 규칙이 없음을 알 수 있습니다. 이는 JRE에 따라 다릅니다. –