Java - Wav文件 - 空字节?

时间:2012-03-26 11:29:59

标签: java audio javasound

我有一个奇怪的问题。现在,我能够读取wav文件样本并在处理完之后将其再次保存到文件中。但是对于我的项目,我必须使用null值更改一些字节。我的意思是,如果我将一些整数放入wav文件中(例如:25的二进制形式),那意味着声卡会给我们提供25的电信号(我可能对声卡和wav文件概念有一些误解)。

但在我的项目中,我需要将null值放入wav文件中。就像声卡读取25的二进制形式一样,它会发出信号,但之后会有空字节,声卡不会发出任何电信号,因为另一个值来了。

我知道,我无法正确表达我的问题。使其更容易理解;

我们假设有一个像那样存储的文件

data[] = {10,12,13,14,15,14,13,12,11,10};

我想成功

data[]= {10,12,13,14,null,null,null,12,11,10}

当声卡读取这些数据时,它会给我们举个例子

10 voltage,12 voltage,13 voltage,14 voltage,no any signal,no any signal,no any signal,12 voltage, 11 voltage, 10 voltage}

3 个答案:

答案 0 :(得分:0)

我怀疑WAV文件是否具有在波形中间表示“无信号”的特定方式。 (粗略阅读this description似乎证实了这一点。)

我认为你最好的选择就是在没有信号的地方使用零。 (显然,需要使用您选择的编解码器对零进行编码。)


顺便说一句,即使WAV文件确实有一种表示“无信号”的方式,它也不会涉及将null值放入Java字节数组中。 Java字节数组不能包含null ... Java语言规范禁止它。

答案 1 :(得分:0)

当您处理字节时,不能将null放入文件中 - 每个字节必须是256个位组合中的一个。

当声卡返回no any signal时,你究竟是什么意思?是不是相当于零电压(即在文件中使用整数值0)?或者您使用null作为占位符来表示" unknown"?

您可能仍然没有完全表达您的问题 - 听起来您已经决定需要在文件中放置空值,而且您似乎无法证明这一点。你实际试图实现什么(不是"在WAV中放置空值") - 这是否适用于零?

答案 2 :(得分:0)

没有“空信号”。如果您的意思是不想输出,只需发送0(如果您使用的是有符号值)。如果使用无符号值(Java不支持),则为8位样本发送128,为16位样本发送32768。

所以只说

data[]= {10,12,13,14,0,0,0,12,11,10};

后跟

yourSoundCardObject.write(data); //The method write is hypothetical

您的采样率是多少?

相关问题