2009-10-16 4 views
6

Привет, мне нужно уменьшить размер выборки аудиофайла wav с 44,1 кГц до 8 кГц. Я должен выполнять всю работу вручную с помощью байтового массива ... это для академических целей.Java - downsampling wav audio file

В настоящее время я использую 2 класса, раковину и источник, чтобы выталкивать и массивы байт. Все идет хорошо, пока я не доберусь до той части, где мне нужно уменьшить количество данных, используя линейную интерполяцию.

Поскольку я снижаю дискретизацию с 44100 до 8000 Гц, как я могу интерполировать массив байтов, содержащий что-то вроде 128 000 000 байтов? Прямо сейчас я вывожу 5, 6 или 7 байтов в зависимости от i% 2 == 0, i% 2 == 1 и i% 80 == 0 и выталкиваю среднее из этих 5, 6 или 7 байтов в новый файл ,

Результат - это меньший аудиофайл, чем оригинал, но он не может воспроизводиться на медиаплеере Windows (говорит, что при чтении файла есть ошибка), и есть много шума, хотя я слышу правильный трек позади шум.

Итак, чтобы подвести итог, мне нужна помощь относительно линейной интерполяционной части. Заранее спасибо.

+0

Нам будет легче помочь найти ваши ошибки, если вы разместите код, который используете сейчас. –

ответ

7

Я думаю, вы не должны использовать среднее значение этих образцов, так как это будет медианный фильтр, а не точно понижающая дискретизация. Просто используйте каждый 5/6/7-й образец и напишите это в новый файл.

Это, вероятно, будет иметь некоторые артефакты наложения, но в целом можно распознать.

Другим, более сложным решением, но, вероятно, с лучшими результатами, по качеству было бы сначала преобразовать ваши образцы в частотное распределение с использованием БПФ или ДПФ, а затем преобразовать его с соответствующей частотой дискретизации. Прошло некоторое время с тех пор, как я сделал такое, но это определенно выполнимо. Возможно, вам придется немного поиграть, чтобы заставить его работать исправно.

Также, когда вы не принимаете FT полного массива, а скорее в сегментах, проблема с границами сегментов равна 0. Несколько лет назад, когда я играл с этими вещами, я не придумал жизнеспособного решения для это (так как он создает артефакты, а), но, вероятно, один, если вы читали правильные книги :-)

что касается WMP жалуясь о файле: вы сделал изменить заголовок вы пишете, соответственно, не так ли?

+0

Усреднение, вероятно, плохая идея. Вы могли бы просто увеличить размер, а затем уменьшить размер, если вам нужно меньше артефактов, чем вы могли бы получить только из образцов вишни. –

+2

Woah! Большое вам спасибо «Просто используйте каждый пятый/шестой/седьмой образец и напишите, что в новый файл» именно то, что исправило мою проблему! Не могу поверить, что я потратил часы на это, пока вам понадобилось ровно 2 минуты, чтобы написать его! Еще раз спасибо! –

+1

Добро пожаловать :-) Если вы думаете об этом, то усреднение - это действительно «плохая идея». Полная форма формы волны теряется. И это то, что важно для нас, чтобы действительно услышать что-то разумное :) – Joey