我有一个48 kHz的PCM流,想将其流式传输到44.1 kHz兼容的播放器(Apple的AirPlay)。
有人知道这是否“因为某些字节会丢失而起作用”,还是我之前必须进行转换/下采样?
如果它不“可行”,那么在Java中有什么提示吗?
编辑:
它不仅会起作用,因为声音会变得发粘(“信息溢出”)。
我必须对pcm流进行重新采样/降采样。
因为在这种情况下(48 kHz至44.1 kHz)不是那么简单,所以我应该使用一个库来执行此操作:
我想我会尝试libresample。
因为我使用的是Android,所以可以使用native implementation或java implementation。
您认为Java实现足够高效吗?
最佳答案
在您的情况下,所需的过程称为“按理性因素进行下采样”。这不是一个简单的问题,所以我建议您使用一个库来实现这一点-自己实现这一点需要大量的DSP知识。
相反,您可以使用libresample这个C库,为此您必须编写JNI绑定。
要进行非常粗略的近似,您可以创建一个新的缓冲区,在其中复制大多数旧样本,但是每第10个样本丢弃一次。它不会完全是44.1 kHZ,但比照原样播放要好。
关于java - 在44.1 kHz接收器上播放48 kHz PCM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11101903/