我试图将原始的PCM数据编码为μ律来节省传输语音数据所需的带宽。
我发现了一个叫做 UlawEncoderInputStream 的类,可以在这个页面上找到,但没有文档!:(
构造函数接受输入流和最大的PCM值(不管那是什么)。
我使用这段代码时遇到的另一个问题是,我不确定如何为μ律数据的标头写出哪些值。我该如何确定编码后的μ律数据减少了多少字节?
我用VLC媒体播放器(我唯一能尝试读取文件的播放器)听了我创建的(可能)μ律编码文件之一,它听起来很难听,断断续续并有杂音,但仍然能听出声音。
我正在使用类似于名为WaveHeader的类的代码编写我的波形标头,可以在这里找到!
如果有人对此有任何想法,我将非常感激听取他们的意见! :)
谢谢 Dexter
我发现了一个叫做 UlawEncoderInputStream 的类,可以在这个页面上找到,但没有文档!:(
构造函数接受输入流和最大的PCM值(不管那是什么)。
/**
* Create an InputStream which takes 16 bit pcm data and produces ulaw data.
* @param in InputStream containing 16 bit pcm data.
* @param max pcm value corresponding to maximum ulaw value.
*/
public UlawEncoderInputStream(InputStream in, int max) {
浏览代码后,我怀疑我应该使用提供的函数maxAbsPcm来计算这个“max”值。问题是,我真的不明白我应该传递什么!我正在将原始pcm记录到sd卡上的文件中,因此我没有一个连续的内存驻留数据数组可以传递给它。
/**
* Compute the maximum of the absolute value of the pcm samples.
* The return value can be used to set ulaw encoder scaling.
* @param pcmBuf array containing 16 bit pcm data.
* @param offset offset of start of 16 bit pcm data.
* @param length number of pcm samples (not number of input bytes)
* @return maximum abs of pcm data values
*/
public static int maxAbsPcm(byte[] pcmBuf, int offset, int length) {
我使用这段代码时遇到的另一个问题是,我不确定如何为μ律数据的标头写出哪些值。我该如何确定编码后的μ律数据减少了多少字节?
我用VLC媒体播放器(我唯一能尝试读取文件的播放器)听了我创建的(可能)μ律编码文件之一,它听起来很难听,断断续续并有杂音,但仍然能听出声音。
我正在使用类似于名为WaveHeader的类的代码编写我的波形标头,可以在这里找到!
如果有人对此有任何想法,我将非常感激听取他们的意见! :)
谢谢 Dexter