我有一个从相机捕获的原始音频文件,格式为u-law 8 8KHZ (无wav头)。我遇到的问题是,当我试图回放文件时,我似乎只是得到了糟糕的噪音。我已经通过一个名为goldwave的程序插入了原始音频,它能够完美地播放文件。我确信我错过了一些简单的东西。
我一直在尝试使用waveout函数,但没有成功。在尝试通过waveout函数推送数据之前,我是否需要先解码u-law中的数据?
发布于 2010-08-27 05:51:06
如果您只是在Windows API中使用waveOut函数,则waveOutOpen
的第三个参数是指向WAVEFORMATEX
结构的指针:
MMRESULT waveOutOpen(
LPHWAVEOUT phwo,
UINT_PTR uDeviceID,
LPWAVEFORMATEX pwfx,
DWORD_PTR dwCallback,
DWORD_PTR dwCallbackInstance,
DWORD fdwOpen
);
一个WAVEFORMATEX
结构可以让你指定格式,并且Windows应该能够在你不需要安装任何东西的情况下执行u-WAVEFORMATEX
。
typedef struct {
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
}WAVEFORMATEX;
将wFormatTag
设置为WAVE_FORMAT_MULAW
或0x0007。确保您正确填写了8000采样/秒和8比特/采样的1个通道的其他参数。
如果失败,请在打开音频设备并播放文件的地方发布代码。或者这里是一个用delphi实现的u法则解码到线性脉冲编码调制(ulawDecode
),这样你就可以自己解码了:
http://www.koders.com/delphi/fidEAA58384F59968FEDD0670F6EABF09DF3A5C58A5.aspx?s=algorithm#L19
发布于 2010-08-27 03:59:32
是。waveout函数需要未压缩的音频,而这不是你所拥有的。
但是ulaw几乎是PCM,这很容易解码。通过快速搜索,我找到了该算法的C源代码,因此它肯定是可用的,但我不能轻易地找到pascal/delphi源代码。http://www.programmersheaven.com/download/3826/download.aspx是C语言版本。看起来翻译起来很容易。
https://stackoverflow.com/questions/3575022
复制相似问题