java byte 异常 录音_java – 将音频byte []保存到wav文件

在最近几天试图让它工作时遇到了一些麻烦.但我想要的是我们有一个通过网络发送原始数据的应用程序.然后,我读入了这个二进制数据,并希望将其保存到wav(任何音频)文件中.以后可能会看压缩.

所以有问题的代码:

byte[] allBytes = ...

InputStream b_in = new ByteArrayInputStream(allBytes);

try

{

AudioFormat format = new AudioFormat(8000f, 16, 1, true, true);

AudioInputStream stream = new AudioInputStream(b_in, format, allBytes.length);

//AudioInputStream stream = AudioSystem.getAudioInputStream(b_in);

尝试过使用上面的语句,但我得到了异常:javax.sound.sampled.UnsupportedAudioFileException:无法从流中获取音频输入流.所以我认为正在发生的是因为我的流是原始音频数据并且没有波头,这会引发异常吗?

File newPath = new File(SystemConfiguration.getLatest().voiceNetworkPathDirectory + currentPhoneCall.fileName);

if (!AudioSystem.isFileTypeSupported(Type.WAVE, stream))

{

Logger.error("Audio System file type not supported");

}

AudioSystem.write(stream, Type.WAVE, newPath);

文件是否成功写入但是它都是静态的,我是否需要使用像this这样的东西在输出上创建一个波形标题.当我在记事本中查看输出的wav文件时,它似乎有一个标题,因为它开始于’RIFF’.

我是否需要在输入流中添加假标题?我应该只创建自己的输出标题,并用二进制编写器保存它?

解决方法:

所以我最终得到它的工作,不知道为什么,但这是正在运行的代码:

InputStream b_in = new ByteArrayInputStream(resultArray);

try {

DataOutputStream dos = new DataOutputStream(new FileOutputStream(

"C:\\filename.bin"));

dos.write(resultArray);

AudioFormat format = new AudioFormat(8000f, 16, 1, true, false);

AudioInputStream stream = new AudioInputStream(b_in, format,

resultArray.length);

File file = new File("C:\\file.wav");

AudioSystem.write(stream, Type.WAVE, file);

Logger.info("File saved: " + file.getName() + ", bytes: "

+ resultArray.length)

所以它一定是我的签名/未签名/小端设置.我最终做的是将数据保存到二进制文件.然后将该文件作为原始数据导入大胆.这告诉我除了我已经新的比率以外的一切.

我现在唯一的问题是标题计算.我保存了生成4秒wav的二进制数据,但它只有2秒的声音.好像它正在计算我的标题错误.我不确定是否与刘燕提到的帧长有关.

如果我的数组长度为160.这是否意味着我的帧长为10? 160/1/16.

如果我这样做,那么我只将10个字节的数据存储到我的二进制文件中.

标签:java,audio

来源: https://codeday.me/bug/20191002/1843324.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值