Java 下载歌曲的一部分,然后播放
我使用的是amazon s3 bucket技术,我有一个程序可以从Java 下载歌曲的一部分,然后播放,java,amazon-web-services,audio,amazon-s3,Java,Amazon Web Services,Audio,Amazon S3,我使用的是amazon s3 bucket技术,我有一个程序可以从.wav文件的部分下载字节,例如,我会调用一个类似 getPartOfASongFile(String filename, long byteToStartAt, long byteToEndAt)` and then play it using a Clip. 只要bytestatat==0,程序就可以工作。任何高于0的值我都会得到一个 javax.sound.sampled.UnsupportedAudioFileExce
.wav
文件的部分下载字节,例如,我会调用一个类似
getPartOfASongFile(String filename, long byteToStartAt, long byteToEndAt)` and then play it using a Clip.
只要bytestatat==0
,程序就可以工作。任何高于0的值我都会得到一个
javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file`.
我的问题是:如果我想让ByteStatart大于零,我如何播放这个文件
这基本上是当前的计划:
getPartOfASongFile(String filename,long byteToStartAt,long byteToEndAt){
File tempFile= null;
try {
tempFile = File.createTempFile(filename, ".wav");
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
tempFile.deleteOnExit();
FileOutputStream out=null;
try {
out = new FileOutputStream(tempFile);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
GetObjectRequest rangeObjectRequest=new GetObjectRequest("myBucketName",filename);
rangeObjectRequest.setRange(byteToStartAt, byteToEndAt);
try {
IOUtils.copy(awsClient.getObject(rangeObjectRequest).getObjectContent(), out);
} catch (AmazonClientException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
AudioInputStream audioInputStream=null;
audioInputStream = AudioSystem.getAudioInputStream(tempFile);
Clip clip = AudioSystem.getClip();
clip.open(audioInputStream);
clip.start();
}
发布你的程序,否则很难推测到底发生了什么。@dambros刚刚编辑了它,如果这是一个文件(我不知道你的下载是如何工作的)它必须在开始时有一些头信息,因此跳过会导致错误-您可以加载文件并从某些部分播放-否则跳过mp3或wav的第一个字节将无法发布您的程序,否则很难推测发生了什么。@dambros刚刚编辑了它,如果这是一个文件(我不知道你的下载是如何工作的)它必须在开始时有一些头信息,因此跳过会导致错误-你可以加载文件并从某个部分播放-否则跳过mp3或wav的第一个字节将不起作用