Я написал приложение, которое позволяет аудио-дактилоскопии, используя метод, описанный здесь . Он в основном конвертирует mp3 в wav, а затем создает кучу хеш-кодов в базе данных. Затем я создаю запись, используя свой iphone, который имеет некоторый шум, сравниваю хэш-коды и получаю совпадения, как описано в ссылке. Вау, это круто !!
Сейчас я записываю сэмплы радио с помощью радиоприемника USB. Я получаю звуковые данные в массиве byte [], а затем делаю то же самое, где я храню хеш-коды, а затем пытаюсь сопоставить их. На этот раз это не работает.
Мне кажется, что mp3 нормализовано (к нему применено сжатие), и в этом может быть разница. Я не мог думать ни о каких других различиях, поскольку они оба (образец mp3 и радио) преобразованы в формат wav (16 бит)
Полагаю, мой вопрос двоякий:
если я сожму сэмпл радио, ты думаешь, это будет работать?
Чтобы сделать это, мне нужно применить функцию сжатия, которая означает, что мне нужно сделать мягкие звуки громче, а громкие звуки мягче.
Я начал писать функцию, которая принимает байтовый массив (данных wav в 16-битном формате) и хотел циклически проходить по нему и соответствующим образом корректировать значения семплов, чтобы выполнить сжатие, но я борюсь с этим:
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);
}