Audiosystem 过早停止写入 AudioInputStream
Posted
技术标签:
【中文标题】Audiosystem 过早停止写入 AudioInputStream【英文标题】:Audiosystem stops writing AudioInputStream too early 【发布时间】:2020-12-21 17:41:48 【问题描述】:由于限制,我需要在第一次启动时下载一个wav文件。
我将该文件托管在服务器 foo.bar/foo.wav
上。
如果我打开到该 url 的连接并将其传送到剪辑中,音频播放正常。
我正在这样做:
public static AudioInputStream downloadSound(String link)
URL url;
try
url = new URL(link);
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
InputStream is = urlConn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
AudioInputStream soundInput = Audiosystem.getAudioInputStream(bis);
// Starting the clip here also works perfectly
return soundInput;
catch (IOException | UnsupportedAudioFileException e)
// TODO Auto-generated catch block
e.printStackTrace();
return null;
现在,当我想将输入流保护到 wav 文件时,使用:
public void saveSound(AudioInputStream stream, String name)
this.createFolderIfNotExist("/sound");
File soundfile = new File(mainPath + "/sound/" + name);
Clip clip;
try
clip = AudioSystem.getClip();
clip.open(stream);
clip.start();
// The Clip starts normally here. ( this block is just for testing purposes)
catch (LineUnavailableException | IOException e1)
// TODO Auto-generated catch block
e1.printStackTrace();
try
AudioSystem.write(stream, AudioFileFormat.Type.WAVE, soundfile);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
现在我的问题是,只有一部分音频,准确地说是 1s,被保存到 wav 文件中。
我已经检查过,并且我在服务器上有完整的文件,我也已经验证,将音频输入流通过管道传输到剪辑中并播放它会播放完整的音频。
现在我的问题是:我如何将完整的流写入文件,或者我什至必须这样做,并且有一种更简单的方法可以将该 wav 文件下载到特定位置
【问题讨论】:
【参考方案1】:好吧,我找到了解决我的问题的方法,现在我不再从服务器获取 audioInputStream,而是将流作为普通流处理并使用 java io 的文件写入。
public static void downloadSoundandSave(String url, String name)
Filesystem filesystem = new Filesystem();
try (InputStream in = URI.create(url).toURL().openStream())
filesystem.createFolderIfNotExist("/sound");
Files.copy(in, Paths.get(filesystem.getMainPath() + "/sound/" + name));
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
【讨论】:
以上是关于Audiosystem 过早停止写入 AudioInputStream的主要内容,如果未能解决你的问题,请参考以下文章
Java AudioSystem 和 TargetDataLine
在 Windows 10 上安装时,安装向导过早结束时出现 MongoDB 错误