我有一个奇怪的问题。现在,我能够读取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}
答案 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
您的采样率是多少?