我有个奇怪的问题。现在,我能够读取wav文件样本,并在处理后,将其再次保存到文件中。但是对于我的项目,我必须用空值修改一些字节。我的意思是,如果我把一些整数放入wav文件中(例如:25的二进制形式),这意味着声卡将给我们25的电信号(我可能对声卡和wav文件的概念有一些误解)。
但在我的项目中,我需要将wav值放入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}发布于 2012-03-26 19:34:45
我怀疑WAV文件是否有在波形中间表示“无信号”的特定方式。(粗略阅读一下this description似乎就能证实这一点。)
我认为你最好的办法就是在没有信号的地方简单地使用零。(显然,需要使用您选择的编解码器对零进行编码。)
顺便说一下,即使WAV文件确实有一种表示“无信号”的方法,它也不涉及将Java值放入null字节数组中。Java字节数组不能包含null%s ...永远不会。Java语言规范禁止这样做。
发布于 2012-03-26 19:36:37
在处理字节时,不能将null放入文件中--每个字节必须是256个位组合中的一个。
当声卡返回no any signal时,到底是什么意思?这不是等同于零电压(即在文件中使用整数值0 )吗?或者你使用null作为占位符来表示“未知”?
您可能仍然没有完全表达您的问题-听起来您已经决定需要将空值放在一个文件中,而您似乎没有证明这是合理的。你真正想要实现的是什么(而不是“在WAV中放入空值”)--这对零有效吗?
发布于 2012-03-26 19:45:56
没有“空信号”。如果你的意思是不想要输出,只需要发送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你们的抽样率是多少?
https://stackoverflow.com/questions/9871292
复制相似问题