簡體   English   中英

Java Clip(聲音)“呼應”並且無法有效播放

[英]Java Clip (sound) 'echoing' and not playing efficiantly

解決了

Runnable出現了問題,因此共有兩個游戲線程同時運行。 (相等的問題!)因此,命中音頻播放器的第二個線程出錯了,這就是為什么它聽起來很響亮的原因-它是從兩個不同的線程播放的!

我還按照建議使用SourceDataLine來啟用更長的聲音剪輯。

原始后


該代碼觸發時,彈出錯誤提示

IllegalStateException: Mixer is already open

clip.open()行。 我已采取一切措施來檢查代碼是否運行了兩次,不是。 但是,即使出現錯誤,聲音仍然會播放。 在較長的剪輯(30秒)上,聽起來好像有2種聲音在播放,一種緊接着一種。 在非常長的剪輯(3分鍾)上,聲音發st。

stringFileString ,例如"example.wav"

File soundFile = new File(stringFile);
AudioInputStream inputStream = AudioSystem.getAudioInputStream(soundFile);
AudioFormat format = inputStream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
clip = (Clip) AudioSystem.getLine(info);
clip.open(inputStream);
clip.start();
playing = true;

如果這個問題已經發布,我非常抱歉。 我已經搜索過,但沒有找到與此線程相似的線程。

只是檢查,但使用Clip的部分要點是您可以將Clip保留在內存中並多次調用,而不必從文件中重新加載它。

因此,要開始和停止,您可以使用myClip.open(),myClip.start(),myClip.stop(),然后再次播放,如果我讀過myClip.setFramePosition(0)和myClip.start(),教程正確。 (通常,我只使用SourceDataLines,因此,如果遇到此錯誤,請原諒我。)

如果您每次都從文件中重新加載它,這可能會導致該問題或導致該問題嗎? 無論如何,我都會考慮切換到SourceDataLine。 除其他外,這消除了在開始播放之前必須將整個剪輯加載到內存中的開銷。

順便說一下,30秒是很多RAM。 30 * 44100 = 1.323 MB(每幀只有1個字節,更常見的wav格式是該大小的4倍)。 因此,隨着聲音的變長,您可能會將RAM負擔加重到頁面交換點,這將導致卡頓。

暫無
暫無

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

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