2012-03-26 92 views
0

我有一个奇怪的问题。现在,我可以读取wav文件样本,并在处理它们之后,再将其保存到文件中。但对于我的项目,我必须用空值更改一些字节。我的意思是,如果我把一些整数转换成wav文件(例如:二进制格式为25),这意味着声卡会给我们提供25的电信号(我可能对声卡和wav文件有一些误解)。Java - 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'而不是'null'。 – Jesper 2012-03-26 11:34:26

+1

*“我有一个奇怪的问题。”*大多数时候,这应该提示检查基本事实。你的意思是你是否想为音频文件的一部分写'沉默'?另一种方式是将声音信号的一部分“静音”。请注意,在声音文件的某些部分写入纯粹的'0'值通常会在静音部分的开始和结尾处造成大声点击。最好从正常音量开始消失(非常快)到0,然后在最后再次消失。 – 2012-03-26 11:54:11

+0

如果您添加了更多详细信息并提供了更广泛的用途,我们可能会为您提供更多帮助。例如。 “我在Java字节数组中有10秒的8KHz/8位带符号PCM音频,我想在第五秒后插入1秒的静音”... – thkala 2012-03-26 12:24:18

回答

0

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

我认为你最好的选择是简单地使用零,你没有信号。 (显然,将所需要的零到使用所选的编解码器进行编码。)


顺便说一句,即使WAV文件确实有代表“无信号”的方式,也不涉及把null值到Java字节数组中。一个Java字节数组不能包含null ......永远。 Java语言规范禁止它。

+0

请注意,恒定值的范围内的任何值将达到相同的效果。在下一个样本中,从一个样本中的'14'直接转到'0,0,0,..'通常会导致大声的'咔嗒'型声音。 – 2012-03-26 12:00:48

0

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

当声卡返回no any signal时,你的意思是什么?是不是等于零电压(即在文件中使用整数值0)?或者你是否使用null作为占位符来表示“未知”?

你可能还没有完全表达你的问题 - 这听起来像你已经决定,你需要将空值放在一个文件中,而且似乎没有理由这样做。你是什​​么实际上试图实现(而不是“把空值放入WAV”) - 这将工作与零?

0

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

所以刚才说

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

其次是像

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

什么是你的采样率?

+0

谢谢你的回答,我尝试了零,但它不适用于我的情况。 – user1252105 2012-03-28 01:45:23