2017-10-01 6 views
1

이것이 중복 된 경우 사과드립니다. 그러나 여기에서 발견 한 내용은 아무 것도 작동하지 않습니다. libGDX를 사용하여 Java에서 Desktop 및 Android 용 게임을 작업 중입니다. 플랫폼 관련 모듈에 구현 된 핵심 모듈의 인터페이스를 사용하여 MIDI 지원을 추가했습니다. 다음은 그 인터페이스이다 :데스크탑의 libGDX 미디 볼륨 컨트롤

public interface Midi { 
    void setLooping(boolean looping); 
    void pause(); 
    void stop(); 
    void setPosition(int pos); 
    void dispose(); 
    long getPosition(); 
    boolean isLooping(); 
    void setVolume(float volume); 
    void onPause(); 
    void onResume(); 
} 

그리고 내 바탕 화면에서 내 구현 및 안드로이드는로드 프로젝트와 완벽하게 미디 파일을 재생할 수 있습니다. Android 버전에서는 볼륨을 쉽게 설정할 수도 있습니다. 그러나 나는 바탕 화면에 볼륨을 구현하는 방법을 알아낼 수 없습니다. 나는 0과 1 사이의 float로 트랙의 볼륨을 설정하여 0이 완전히 조용하고 1이 가장 큰 것입니다. 다음은 바탕 화면에서 미디 플레이어 내 현재의 구현 : 나는 많은 다른 것들을 시도

public class MidiPlayer implements Midi { 

    /** 
    * The sequencer to play the midi track. 
    */ 
    private Sequencer sequencer; 
    /** 
    * Whether or not the track is looping. 
    */ 
    private boolean looping; 

    public MidiPlayer(FileHandle fileHandle) { 
     try { 
      sequencer = MidiSystem.getSequencer(); 
      sequencer.open(); 
      sequencer.setSequence(fileHandle.read()); 
      sequencer.setMicrosecondPosition(0); 
      sequencer.setLoopStartPoint(0); 
      sequencer.setLoopEndPoint(-1); 
      looping = false; 
     } catch (MidiUnavailableException | InvalidMidiDataException | IOException e) { 
      Gdx.app.error(getClass().getName(), e.getMessage(), e); 
     } 
    } 

    @Override 
    public void play() { 
     sequencer.start(); 
    } 

    @Override 
    public void setLooping(boolean looping) { 
     this.looping = looping; 
     if(!looping) { 
      sequencer.setLoopCount(0); 
     } else { 
      sequencer.setLoopCount(Sequencer.LOOP_CONTINUOUSLY); 
     } 

    } 

    @Override 
    public void pause() { 
     sequencer.stop(); 
    } 

    @Override 
    public void stop() { 
     sequencer.stop(); 
     sequencer.setMicrosecondPosition(0); 
    } 

    @Override 
    public void setPosition(int pos) { 
     sequencer.setMicrosecondPosition(pos); 
    } 

    @Override 
    public void dispose() { 
     sequencer.close(); 
    } 

    @Override 
    public long getPosition() { 
     return sequencer.getMicrosecondPosition(); 
    } 

    @Override 
    public boolean isLooping() { 
     return this.looping; 
    } 

    @Override 
    public void setVolume(float volume) { 
     //I have tried several things here and none have worked 
    } 

    @Override 
    public void onPause() { 
     //ANDROID ONLY 
    } 

    @Override 
    public void onResume() { 
     //ANDROID ONLY 
    } 
} 

, 나는 다음과 같은 솔루션을 시도 : http://www.java2s.com/Code/Java/Development-Class/SettingtheVolumeofPlayingMidiAudio.htm

What's the method to control volume in an MIDI sequencer?

How to control the MIDI channel's volume

그리고 아무도 일한 적이 없다.

+0

Android에서 볼륨을 어떻게 처리합니까? 데스크탑에서 사용하는 신디사이저는 무엇입니까? –

+0

@ CL. 바탕 화면의 경우, 나는'sequencer = MidiSystem.getSequencer(); '에 설명 된대로 시스템 신디사이저를 사용하고있는 중이며, 안드로이드에서는 내장 된'MediaPlayer' 클래스를 사용하고 있습니다. 'mediaPlayer.setVolume (volume, volume); '으로 볼륨을 설정하십시오. – JoseRivas1998

답변

0

자신의 채널 볼륨 메시지를 보내는 것은 MIDI 파일에 이미있는 경우에는별로 유용하지 않습니다.

해당 신디사이저가 지원하는 경우 Master Volume messages을 보낼 수 있습니다.

Java 신시사이저에는 MIDI 입력과 별도의 볼륨 컨트롤러가 없습니다. MIDI 메시지가 작동하지 않으면 오디오 장치로 바로 가야합니다 (그리고 신시사이저가 어떤 것을 사용하는지 알아내는 좋은 방법은 없습니다).