2012-07-13 6 views
0

다른 오디오 출력으로 음악을 재생해야합니다. 예를 들어, music1과 music2라는 두 개의 음악이 있습니다. 이고 서로 다른 스피커에서 별도의 스레드로 재생해야합니다. 약간의 디버깅오디오를 여러 개의 출력으로 재생

protected void createLine() throws LineUnavailableException 
{ 
    log.info("Create Line"); 
    if (m_line == null) 
    { 
     AudioFormat sourceFormat = m_audioInputStream.getFormat(); 
     log.info("Create Line : Source format : " + sourceFormat.toString()); 
     int nSampleSizeInBits = sourceFormat.getSampleSizeInBits(); 
     if (nSampleSizeInBits <= 0) nSampleSizeInBits = 16; 
     if ((sourceFormat.getEncoding() == AudioFormat.Encoding.ULAW) || (sourceFormat.getEncoding() == AudioFormat.Encoding.ALAW)) nSampleSizeInBits = 16; 
     if (nSampleSizeInBits != 8) nSampleSizeInBits = 16; 
     AudioFormat targetFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, sourceFormat.getSampleRate(), nSampleSizeInBits, sourceFormat.getChannels(), sourceFormat.getChannels() * (nSampleSizeInBits/8), sourceFormat.getSampleRate(), false); 
     log.info("Create Line : Target format: " + targetFormat); 
     // Keep a reference on encoded stream to progress notification. 
     m_encodedaudioInputStream = m_audioInputStream; 
     try 
     { 
      // Get total length in bytes of the encoded stream. 
      encodedLength = m_encodedaudioInputStream.available(); 
     } 
     catch (IOException e) 
     { 
      log.error("Cannot get m_encodedaudioInputStream.available()", e); 
     } 
     // Create decoded stream. 
     m_audioInputStream = AudioSystem.getAudioInputStream(targetFormat, m_audioInputStream); 
     AudioFormat audioFormat = m_audioInputStream.getFormat(); 
     DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat, AudioSystem.NOT_SPECIFIED); 
     Mixer mixer = getMixer(m_mixerName); 
     if (mixer != null) 
     { 
      log.info("Mixer : "+mixer.getMixerInfo().toString()); 
      m_line = (SourceDataLine) mixer.getLine(info); 
     } 
     else 
     { 
      m_line = (SourceDataLine) AudioSystem.getLine(info); 
      m_mixerName = null; 
     } 
     log.info("Line : " + m_line.toString()); 
     log.debug("Line Info : " + m_line.getLineInfo().toString()); 
     log.debug("Line AudioFormat: " + m_line.getFormat().toString()); 
    } 
} 

, 나는했습니다 : -이 방법 (가 BasicPlayer입니다 here)을 발견

: 나는 사운드를 재생하려면 수있는 하나 이상의 오디오 장치가 있다고 가정 믹서가 항상 null이라는 것을 알았습니다. 왜 그런가요? 믹서는 대상 라인을 통해 사운드를 출력하는 장치가 아닙니다. 이 프로그램은 내 컴퓨터에 설정된 기본 장치에서 항상 재생됩니다. 변경하려면 어떻게해야합니까?

답변

0

저는 실제로 자신의 프로젝트 중 하나에서 Java Sound API로 작업하기 시작했습니다.하지만 이해할 때부터 믹서는 객체가 아니라 인터페이스 일뿐입니다. 그것은 당신의 문제의 일부를 설명 할 수 있습니다.

관련 문제