2012-06-19 7 views
1

У меня есть поток PCM 48 кГц и вы хотите передать его совместимому проигрывателю 44,1 кГц (AirPlay от Apple).Воспроизведение 48 кГц PCM на приемнике 44,1 кГц

Кому-то известно, что это «просто работает, потому что некоторые байты будут потеряны», или мне нужно выполнить преобразование/выборку вниз раньше?

Если это не «просто работает», любые советы для этого в java?

EDIT:

Это будет не просто работать, потому что звук будет заикаться («информация переполнение»). У меня есть resample/down-sample pcm-stream.

Потому что это не так, в этом случае тривиальна (48 кГц до 44,1 кГц), я должен использовать библиотеку для этого:

Я думаю, я буду стараться libresample. Поскольку я на Android, я мог бы использовать native implementation или java implementation.

Считаете ли вы, что реализация Java является достаточно высокой?

ответ

1

Процесс, необходимый в вашем случае, называется «понижающая дискретизация рациональным фактором». Это не тривиальная проблема, поэтому я предлагаю вам использовать библиотеку для этого - для реализации этого требуется много знаний DSP. Вы могли бы использовать libresample, библиотеку C, для которой вам пришлось бы писать привязки JNI.

Чтобы сделать очень грубое приближение, вы можете просто создать новый буфер, в котором вы копируете большинство старых образцов, но отбрасываете каждый 10-й образец. Это не будет ровно 44,1 кГц, но лучше, чем играть так, как есть.

0

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

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

E.g. одним простым подходом фильтра низких частот является использование среднего числа двух выборок в качестве выходного образца. То есть y (n) = (x (n) + x (n-1))/2; где y - вывод и x - вход, n - позиция текущего образца.

1

Хорошо, самый простой подход - взять каждый 48/44.1-й образец (который равен разворачиванию каждого 12-го образца). В конечном итоге вам придется это сделать.

Проблема с этим наложение. Если ваша понижающая дискретизация, вы фактически отражаете спектр за пределами вашей частоты понижающей дискретизации в своих выборках (см. this wiki page для хорошего объяснения), который называется сглаживанием. Вы, очевидно, этого не хотите (вы можете попробовать и посмотреть, что происходит с вашим аудио).

Итак, как мы можем предотвратить это? Наиболее распространенным способом является уменьшение амплитуды спектра этих зеркальных частотных блоков каким-то образом. Таким образом, они являются зеркальными, но это уже не имеет значения, потому что их амплитуда очень низкая. Это можно сделать, используя фильтр нижних частот с частотой среза вокруг вашего коэффициента выборки.Таким образом, шаги были бы:

  • Низкочастотный фильтр ваши образцы, чтобы избавиться от высоких амплитуд частот свыше 44,1 кГц (будьте осторожны, чтобы не избавиться от вещей под этим)
  • подвыборки данных (в вашем случае, удар каждый 12-й образец)

Итак, каковы требования к этому фильтру? Одним из важных требований является то, что частотные амплитуды ниже вашей частоты среза не следует касаться, поэтому очень малая полоса пропускания полосы пропускания и коэффициент усиления полосы пропускания 1 были бы хороши. Тогда стоп-полоска должна быть как можно больше смочена. Это, очевидно, зависит от ваших данных. Я не знаю об обработке звука в специальных, но обычно в DSP, используется фильтр нижних частот: FIR или IIR. Конечно, есть много других, но они очень просты в реализации и в определенной степени даже способны обрабатывать ограничения в реальном времени.

Поэтому я предлагаю вам прочитать эти две реализации фильтра (или просто сфокусироваться на FIR). Если вы действительно путают о том, что я только что написал, то, возможно, еще лучше просто использовать данную библиотеку, обладающую некоторой способностью фильтрации нижних частот. Но если вы много работаете с этим материалом, я предлагаю прочитать его, он действительно помогает понять, что происходит ...;)

 Смежные вопросы

  • Нет связанных вопросов^_^