我们正在开发一个基于众包的音乐创作项目。人们为每个音符投票,直到投票结束,然后继续下一次投票,直到音乐的画布被填满。一个类似的项目是crowdsound,如果你想了解它的样子的话。
我们已经在heroku上托管了.war,我们已经设法让所有的东西都工作了,除了声音。每次我们尝试调用Java Sound API (我们使用midi合成器)时,我们得到以下错误:
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这是否意味着我们不能在web应用程序中使用midi合成器,或者有什么方法可以做到这一点?
发布于 2017-03-10 22:46:36
您根本不能播放来自Java WAR的声音,因为它是在服务器端执行的。此外,heroku实例可能完全缺少声音硬件。
如果您想要生成声音,然后提供给web客户端,您需要使用某个MIDI渲染器来生成声音文件,然后将生成的音频文件提供给客户端(例如WAV文件),或者简单地将MIDI提供给客户端,并通过MIDI.js等库让浏览器播放MIDI。
https://stackoverflow.com/questions/42715264
复制相似问题