java gaincontrol,错误播放声音java(无行匹配接口剪辑支持格式)

我们正试图在我们的一个项目中集成声音,我的团队成员没有得到这个错误,我在两台不同的机器上得到它.

堆栈跟踪:

Exception in thread "SoundPlayer" java.lang.IllegalArgumentException: No line matching interface Clip supporting format PCM_SIGNED 16000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian, and buffers of 11129272 to 11129272 bytes is supported.

at javax.sound.sampled.AudioSystem.getLine(Unknown Source)

at sound.Music.run(Music.java:86)

at java.lang.Thread.run(Unknown Source)

码:

package sound;

import java.io.File;

import java.io.IOException;

import javax.sound.sampled.AudioFormat;

import javax.sound.sampled.AudioInputStream;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.Clip;

import javax.sound.sampled.DataLine;

import javax.sound.sampled.FloatControl;

import javax.sound.sampled.LineEvent;

import javax.sound.sampled.LineListener;

import javax.sound.sampled.LineUnavailableException;

import javax.sound.sampled.UnsupportedAudioFileException;

public class Music implements LineListener, Runnable

{

private File soundFile;

private Thread thread;

private static Music player;

private Music audio;

private Clip clip;

public Music()

{

}

public void playSiren(String musicFileName)

{

Music p = getPlayer();

p.playSirenFile(musicFileName);

}

private void playSirenFile(String musicFileName)

{

this.soundFile = new File("Music/"+musicFileName+".wav");

thread = new Thread(this);

thread.setName("SoundPlayer");

thread.start();

}

public void run()

{

try

{

AudioInputStream stream = AudioSystem.getAudioInputStream(this.soundFile);

AudioFormat format = stream.getFormat();

/**

* we can't yet open the device for ALAW/ULAW playback, convert

* ALAW/ULAW to PCM

*/

if ((format.getEncoding() == AudioFormat.Encoding.ULAW) || (format.getEncoding() == AudioFormat.Encoding.ALAW))

{

AudioFormat tmp = new AudioFormat(

AudioFormat.Encoding.PCM_SIGNED,

format.getSampleRate(),

format.getSampleSizeInBits() * 2, format.getChannels(),

format.getFrameSize() * 2, format.getFrameRate(), true);

stream = AudioSystem.getAudioInputStream(tmp, stream);

format = tmp;

}

DataLine.Info info = new DataLine.Info(Clip.class, stream

.getFormat(), ((int) stream.getFrameLength() * format

.getFrameSize()));

clip = (Clip) AudioSystem.getLine(info);

clip.addLineListener(this);

clip.open(stream);

clip.start();

try

{

thread.sleep(99);

}

catch (Exception e)

{

}

while (clip.isActive() && thread != null)

{

try

{

thread.sleep(99);

}

catch (Exception e)

{

break;

}

}

clip.loop(99999999);

}

catch (UnsupportedAudioFileException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

catch (LineUnavailableException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

}

private static Music getPlayer()

{

if (player == null)

{

player = new Music();

}

return player;

}

public void update(LineEvent event)

{

}

public void stopClip()

{

clip.stop();

}

public void closeClip()

{

clip.close();

}

public void startClip()

{

clip.start();

}

public void volume(float volume)

{

/*

FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);

gainControl.setValue(-50.0f); // Reduce volume IN DECIBELS

clip.start();

*/

}

}

我们用domainController调用这个类

audio = new Music();

audio.playSiren("stillAliveDecent");

有没有人知道如何解决这个异常?

我尝试重新安装我的编辑器软件(Eclipse),但无济于事.

感谢提前分配.

编辑

我们只是尝试切换声音文件.我们尝试用更小的文件运行它.这现在有效,但是一旦我们切换回更大的.wav文件(10 MB),我再次得到异常.

只使用较小的文件并不是真正的选择,因为我们想要使用一些很长的自制歌曲.

编辑2

我很确定它不是一个腐败的wav.我们重新编译它,甚至使用了另一个类似长度和大小的波,我仍然是唯一一个得到这个错误.

一些额外的请求信息:

操作系统:Windows 7 64位旗舰版

JDK:1.6.0_22

编辑3

经过一些创造和播放之后,我们得出结论,由于某种原因,我无法播放大于2MB的wave.

为什么我的队友不受此影响呢?

最佳答案 你可以实际播放超过40 mb的声音,如果需要的话,那就是我走了多远:p,问题主要是eclipse,更确切地说,它是你工作区中的.metadata文件夹我认为它就像一个只上传的小插件有一半的时间,所以问题在于你的编辑而不是代码,上面的代码工作得很好,因为我可以毫无困难地播放歌曲.确保您的路径正确,并尝试获取正确版本的.metadata,您应该没问题.我的一个朋友有同样的问题,我给了他我的工作区和.metadata副本,它工作得很好.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值