2017-03-10 5 views
0

우리는 군중 소싱을 기반으로 음악을 만드는 프로젝트를 진행하고 있습니다. 사람들은 투표가 끝날 때까지 모든 쪽지에 투표하고, 다음 쪽 투표로 넘어 가서 음악을위한 캔버스가 가득 찰 때까지 계속합니다. 유사한 프로젝트는 그것이 어떻게 생겼는지에 대한 아이디어를 얻고 싶다면 군중입니다.heroku에 배포 된 웹 응용 프로그램에서 Java Sound API 사용

우리는 heroku에서 .war를 호스팅했으며 사운드를 제외하고 모든 것을 작동하도록했습니다. 때마다 우리는 (우리가 MIDI 신디사이저를 사용) 자바 사운드 API를 호출하려고, 우리는 다음과 같은 오류 얻을 : 이것은 우리가 웹 응용 프로그램에서 미디 신디사이저를 사용할 수 없다는 뜻

2017-03-10T09:49:01.338821+00:00 app[web.1]: javax.sound.midi.MidiUnavailableException: Can not open line 
2017-03-10T09:49:01.339228+00:00 app[web.1]: at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:1155) 
2017-03-10T09:49:01.339288+00:00 app[web.1]: at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:1066) 
2017-03-10T09:49:01.339340+00:00 app[web.1]: at music.MusicPlayer.run(MusicPlayer.java:99) 
2017-03-10T09:49:01.339391+00:00 app[web.1]: at java.lang.Thread.run(Thread.java:745) 
2017-03-10T09:49:01.340759+00:00 app[web.1]: Caused by: java.lang.IllegalArgumentException: No line matching interface SourceDataLine supporting format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian is supported. 
2017-03-10T09:49:01.340869+00:00 app[web.1]: at javax.sound.sampled.AudioSystem.getLine(AudioSystem.java:479) 
2017-03-10T09:49:01.340924+00:00 app[web.1]: at javax.sound.sampled.AudioSystem.getSourceDataLine(AudioSystem.java:606) 
2017-03-10T09:49:01.340975+00:00 app[web.1]: at com.sun.media.sound.SoftSynthesizer.open(SoftSynthesizer.java:1095) 
2017-03-10T09:49:01.341045+00:00 app[web.1]: ... 3 more 

을, 또는 거기에 일부입니다 이 일을하는 방법?

+0

해당 코드가 클라우드 서버 또는 클라이언트에서 실행됩니까? 열거 할 때 소스 데이터 행을 볼 수 있습니까? –

+0

@CL. 확실하지는 않지만, 소리를내는 것은 클라이언트 쪽이어야합니다. 응용 프로그램은 클라우드 서버 (예 : VM)에서 실행되는 Tomcat 서버에서 실행됩니다. quesiton의 두 번째 부분에 관해서는 소스 데이터 라인을 다루지 않았기 때문에 그렇게하는 방법을 알려주시겠습니까? 도움이된다면 로컬 서버에서 실행하면 사운드에 오류가 발생하지 않습니다. –

답변

3

Java WAR에서 사운드를 재생할 수없는 이유는 서버 측에서 실행되기 때문입니다. 또한 heroku 인스턴스에 사운드 하드웨어가 전혀 없을 수도 있습니다.

웹 클라이언트에 제공되는 사운드를 생성하려면 사운드 파일을 생성하는 일부 MIDI 렌더러를 사용하고 결과 오디오 파일을 클라이언트에 제공해야합니다 (예 : WAV 파일) 또는 단순히 클라이언트에 MIDI를 제공하고 브라우저가 예를 들어 라이브러리를 통해 MIDI를 재생하게하십시오. MIDI.js.

관련 문제