【发布时间】:2012-01-22 01:37:10
【问题描述】:
我编写了一个应用程序,它允许使用here 描述的方法进行音频指纹识别。它基本上将 mp3 转换为 wav,然后在数据库中创建一堆哈希码。然后,我使用我的 iphone 创建一个录音,该录音有一些噪音,并比较哈希码并获取链接中记录的匹配项。哇,好酷!!
我现在正在使用 USB 无线电接收器录制无线电样本。我在 byte[] 数组中获取声音数据,然后在存储哈希码的地方做完全相同的事情,然后尝试匹配它。这次不行了。
我的感觉是 mp3 已被标准化(对其应用了压缩),这可能是不同之处。我想不出任何其他差异,因为它们(mp3 和收音机样本)都转换为 wav 格式(16 位)
我想我的问题是双重的:
如果我压缩收音机样本,你认为它会起作用吗?
为此,我需要应用压缩功能,这意味着我需要使柔和的声音更响亮,而响亮的声音更柔和。
我已经开始编写一个函数,它需要一个字节数组(16 位格式的 wav 数据),并希望循环通过它并相应地调整样本值以进行压缩,但我正在努力解决这个问题:
List<short> ints = new List<short>();
for (int j = 0; j < byteArray.Count; j+=2)
{
//so for 16 bits every 2 bytes in the array is a sample
short sample16 = 0;
byte[] sample = new byte[2];
sample[0] = byteArray[j];
sample[1] = byteArray[j+1];
sample16 = (short)(double)BitConverter.ToInt16(sample, 0);
//at this point change the sample according to the compression needed
ints.Add(sample16);
//back again to test it
byte[] buffer11 = BitConverter.GetBytes(sample16);
}
【问题讨论】:
-
OP:我删除了“规范化”标签,因为这个标签是指数据库规范化,而不是数据压缩。
标签: c# audio compression