首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何连续重放AudioInputStream中的音频?

如何连续重放AudioInputStream中的音频?
EN

Stack Overflow用户
提问于 2014-06-05 23:12:11
回答 2查看 319关注 0票数 0

我有一个来自网络来源的AudioInputStream。它不断地从Arduino上流式传输音频。我如何才能不断地重播这个视频?我目前的方法只是将其读取到流中,但这将在给定的10000帧长度后停止。

代码语言:javascript
复制
AudioInputStream ais = new AudioInputStream(client.getInputStream(), new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED, 4000, 8, 1, 1, 4000, false), 10000);

DataLine.Info nfo = new DataLine.Info(Clip.class, ais.getFormat());
Clip clip = (Clip)AudioSystem.getLine(nfo);

clip.open(ais);
clip.start();
EN

回答 2

Stack Overflow用户

发布于 2014-06-05 23:17:57

尝试使用AudioSystem.getAudioInputStream(),而不是使用new AudioInputStream()

http://docs.oracle.com/javase/7/docs/api/javax/sound/sampled/AudioSystem.html#getAudioInputStream%28javax.sound.sampled.AudioFormat,%20javax.sound.sampled.AudioInputStream%29

票数 0
EN

Stack Overflow用户

发布于 2014-06-06 00:37:26

好吧,我没有认出SourceDataLine。有了SourceDataLine,你可以直接把数据流中的数据写入AudioLine,这样你就可以在网络上传输音频了。

代码语言:javascript
复制
InputStream ins = client.getInputStream();

DataLine.Info nfo = new DataLine.Info(SourceDataLine.class, new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED, 5000, 8, 1, 1, 5000, false));
SourceDataLine line = (SourceDataLine)AudioSystem.getLine(nfo);

byte[] buffer = new byte[512];

line.open();
line.start();

while(true) {
   int read = ins.read(buffer);
   line.write(buffer, 0, read);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24063888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档