我正在尝试使用A law编码对PCM未压缩的Wav文件进行编码。 我写了一个函数,它接收16位PCM数据并返回8位编码数据。编码后,我的文件无法正常播放..我觉得有些东西我没有正确处理文件。我有将文件的标题信息分开,并将相同的标题写入输出文件。
<button type="submit" class="btn btn-lg btn-block btn-primary">Sign In</button>
答案 0 :(得分:1)
您正在使用相同的标题编写数据,这意味着任何音频程序都会认为WAV文件中的数据仍然是PCM。检查file format for WAV并相应更改。
主要是你需要将0x0014-0x0015的音频格式更改为a-law和其他值,以标记每秒正确的字节数,块大小等。
确保它们正确的最简单方法可能是使用音频编辑器转换文件,然后检查值的差异。
答案 1 :(得分:0)
请参阅波形文件的格式
http://www.topherlee.com/software/pcm-tut-wavformat.html
现在检查标头的所有字节,并确保有关比特率,采样率等的所有信息都是正确的。
如果您的压缩代码是正确的,那么问题应该只与头文件有关。
答案 2 :(得分:0)
当您不使用数组时,您的代码是如何编译的?尽管如此,您使用<html>
<div class="HARBOURPAGE"></div>
<html>
function hallTheme(){
document.getElementById("HARBOURPAGE").innerHTML = document.getElementById("mainDIV").outerHTML;
}
并不好,请参阅Why is “while ( !feof (file) )” always wrong?
feof
我也注意到您使用#include <stdio.h>
#define BUFSIZE 512
int main(void) {
short inbuff[BUFSIZE]; // must be an array
unsigned char outbuff[BUFSIZE]; // must be an array
size_t bread, i;
unsigned char temp_8;
short temp_16;
FILE *inp, *out;
// ... open the file
// ... transcribe the header
// rewrite the data
while ((bread = fread(inbuff, 2 , BUFSIZE, inp)) > 0)
{
for (i=0; i < bread; ++i) // only the data actually read
{
temp_16 = inbuff[i];
temp_8 = Lin2Alaw(temp_16);
outbuff[i] = temp_8;
}
fwrite(outbuff, 1 , bread, out); // only the data actually read
}
// ... finish off and close the file
return 0;
}
作为16位数据 - 应该是signed short
吗?