簡體   English   中英

在heroku上部署的Web應用程序中使用Java Sound API

[英]Using the Java Sound API in a web-app deployed on heroku

我們正在開展一個基於眾包創作音樂的項目。 人們會為每個音符投票,直到投票結束為止,然后繼續進行下一個投票,直到為音樂填充畫布。 如果您想了解它的外觀,也可以進行類似的項目。

我們將.war托管在heroku上,並且設法使所有功能(聲音除外)都能正常工作。 每次我們嘗試調用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合成器,還是有某種方法可以使這項工作正常進行?

您根本無法播放Java WAR發出的聲音,因為它是在服務器端執行的。 此外,heroku實例可能完全缺少聲音硬件。

如果您想生成然后提供給Web客戶端的聲音,則需要使用一些MIDI渲染器來生成聲音文件,然后將生成的音頻文件提供給客戶端(例如,作為WAV文件),或者只提供MIDI到客戶端,並讓瀏覽器通過MIDI.js之類的庫播放MIDI。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM