2014-09-20 3 views
0

제 응용 프로그램은 웹 UI를 통해 웨이브 파일을 업로드하고 형식을 8k, 8 비트 멀티 파일로 변환하여 서버에 저장하는 작업과 관련이 있습니다.Javasound : AudioSystem.getAudioInputStream이 서버에서 작동하지 않고 클라이언트 코드에서 작동합니다.

final AudioInputStream ais = AudioSystem.getAudioInputStream(in); 

오류는 다음과 같습니다 :

Caused by: javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input stream 
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1102) [classes.jar:1.6.0_65] 

그래서 내가 로컬로 오디오 파일을로드하려고 간단한 테스트 케이스로 축소 할 시도 할 때 내 코드는 서버에서 실패 파일 :

final File audioFile = new File("/path/to/audio.wav"); 
final InputStream in = new FileInputStream(file); 
final AudioInputStream ais = AudioSystem.getAudioInputStream(in); 

이것은 작동합니다. 나는 다시 내 서버 측에 가서과 같이 몇 가지 디버깅을 추가 :

final byte[] audio = IOUtils.toByteArray(in); 
    final File audioLog = File.createTempFile("audiolog", ".wav"); 
    IOUtils.write(audio, new FileOutputStream(audioLog)); 
    s_logger.info("File logged to: " + audioLog.getAbsolutePath()); 
    final InputStream byteIn = new ByteArrayInputStream(audio); 
    final AudioInputStream ais = AudioSystem.getAudioInputStream(byteIn); 

이 동일한 방법으로 실패합니다.

나는 다음 서버에 기록 오디오 파일에 대한 업로드 된 원본 파일을 비교하고 바로 검사에 이르기까지, 동일 :

$ cksum uploaded.wav 
4019972581 84076 uploaded.wav 
$ cksum audiolog6415586848170376004.wav 
4019972581 84076 audiolog6415586848170376004.wav 

에 갈 수 있습니다 무엇을 어떤 아이디어? 내 서버 측 코드가 JBoss 7.1에서 실행됩니다.

감사합니다.

-kr

+0

서버에 오디오를 재생할 드라이버 및/또는 하드웨어가 없을 가능성이 높습니다. – MadProgrammer

+0

가능성이 낮습니다. 서버는 재생할 필요가 없습니다. 또한 오디오가 분석되는 시점에서 코드가 작동하지 않습니다. – Raj

+0

아니요, 서버에서 오디오 파일 (아마도 재생 용)을 열려고합니다 ... – MadProgrammer

답변

1

다음과 같이 시도해 볼 가치가 있습니다.

의 InputStream 중간 단계가 실패 할 경우 IOException이을 던질 수있는 다양한 테스트를 수행합니다. api에서 : 그들이 그것을 지원 여부를 결정하기 위해 스트림을 검사에

이 방법의 구현은 복수의 파서가 필요한 경우가 있습니다. 이러한 파서 은 스트림을 표시하고 스트림을 지원하는지 여부를 확인하기에 충분한 데이터를 읽어야하며, 그렇지 않으면 스트림의 읽기 포인터 을 원래 위치로 다시 설정해야합니다. 입력 스트림이 이러한 연산을 지원하지 않으면이 메서드는 IOException으로 실패 할 수 있습니다.

나는 InputStream 인 전부 단계로 AudioSystem.getAudioInputStream (파일) 또는 AudioSystem.getAudioInputStream (URL)를 통해로드 자신을 설정 피하는 것이 좋습니다. 이 두 가지에는이 요구 사항이 없습니다.

그러나 나는 던져 넣은 오류가 UnsupportedAudioFileException이고 "로컬 파일"로이 메서드를 사용하여로드 할 수 있음을 사용자의 글에 알리지 않습니다. 이러한 테스트가 구현되는 방식은 상황에 따라 다를 수 있습니다.

+0

감사합니다. @ Phil. 이것은 시들지 않았다. JBoss가 오디오 SPI를 망치고 있다고 생각합니다. 그래도 어떻게해야할지 모르겠다. – Raj

+0

URL 형식을 사용할 때 같은 오류 메시지가 나타 났습니까? URL 양식이 InputStream을 사용하지 않고 문언이 InputStream을 참조한다는 점을 감안할 때 문구가 약간 다를 것이라고 생각합니다. –

+0

이 시점에서 나는 파일을로드하고 그것으로부터 오디오 입력 스트림을 얻으려고하는 정확한 코드 조각을 가지고있다. 이 코드를 독립 실행 형 Java 응용 프로그램으로 실행하면 작동합니다. 이 정확한 코드가 JBoss 7.1 (디버그 모드에서 로컬로 실행) 내에서 실행되면 실패합니다. JBoss가 오디오 SPI를 방해하고 있다고 생각합니다. – Raj