문제

이 간단한 코드는 테스트하는 데 사용했던 몇 가지 기계에서 사운드를 생성하지 않습니다. Eclipse 내에서 코드를 실행하고 있지만 명령 줄을 사용하여 사용하려고 시도했습니다.

public static void main(String[] args)
{
    try {
        Synthesizer synthesizer = MidiSystem.getSynthesizer();
        synthesizer.open();

        MidiChannel[] channels = synthesizer.getChannels();

        channels[0].noteOn(60, 60);
        Thread.sleep(200);
        channels[0].noteOff(60);

        synthesizer.close();
    } catch (Exception e)
    {
        e.printStackTrace();
    }
}

시퀀서를 얻고 시퀀스에 MIDI 이벤트를 추가하고 시퀀스를 재생하여 사운드를 성공적으로 얻을 수 있지만 시퀀서가 지원하지 않는 실시간 음악 효과를 수행하려고합니다.

어떤 아이디어?

솔루션 편집 : 문제는 기본적으로 JRE에 사운드 뱅크가 제공되지 않는다는 것이 밝혀졌습니다. 감사, thejmc!

문제를 해결하기 위해 i java.sun.com에서 사운드 뱅크를 다운로드했습니다 (winxp에) c : program files jre1.6.0_07 lib audio에 배치했습니다 (오디오 폴더를 만들어야 함).

도움이 되었습니까?

해결책

JRE의 일부 설치에는 javasound soundbank.gm (공간을 절약하기 위해)이 포함되어 있지 않으므로 코드에는 해당 컴퓨터에서 트리거 할 사운드 소스가 없습니다.

작동하지 않는 기계에 사운드 뱅크가 있는지 확인하십시오. SoundBank를 .class 파일과 동일한 디렉토리에 넣을 수도 있습니다.

사운드 뱅크를 추가하거나 해당 기계의 Java 설치를 업그레이드 할 수 있습니다. 불일치의 고통, 나는 알고 있습니다 :)

다른 팁

다른 채널을 사용하려고 했습니까? 아마도 이 논의 솔루션에 더 가까워 질 것입니다 ...

내 컴퓨터에서 코드를 테스트했으며 (Windows XP, JRE 1.6) 노트를 재생합니다. 아마도 하나의 메모 만 듣기에는 너무 적습니다. 더 많은 메모를 추가하십시오. 또한 볼륨을 더 크게 설정하십시오.

가까운 신시사이저 전에 수면 작업이 1 회 더 필요합니다.

public static void main(String[] args)
{
    try {
        Synthesizer synthesizer = MidiSystem.getSynthesizer();
        synthesizer.open();

        MidiChannel[] channels = synthesizer.getChannels();

        channels[0].noteOn(60, 60);
        Thread.sleep(200);
        channels[0].noteOff(60);
        Thread.sleep(200);

        synthesizer.close();
    } catch (Exception e)
    {
        e.printStackTrace();
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top