为编程爱好者分享易语言教程源码的资源网

网站首页 > 易语言相关 > 易语言模块源码 正文

音频文件PCM转wav源码

三叶资源网 2020-02-17 21:05:26 易语言模块源码 2364 ℃ 0 评论

说明:本源码只提供了生成 文件头 的函数,只返回文件头(只返回固定44字节!),如果将pcm转成wav,请参考下面公式

WAV字节集 = 文件头字节集+PCM字节集 

让我们一起来观赏一下pcm变成wav的过程吧!

文件头:

        byte[] header = new byte[44];
        header[0] = 'R'; // RIFF
        header[1] = 'I';
        header[2] = 'F';
        header[3] = 'F';
        header[4] = (byte) (totalWavSize & 0xff);//xx大小
        header[5] = (byte) ((totalWavSize >> 8) & 0xff);
        header[6] = (byte) ((totalWavSize >> 16) & 0xff);
        header[7] = (byte) ((totalWavSize >> 24) & 0xff);
        header[8] = 'W';//WAVE
        header[9] = 'A';
        header[10] = 'V';
        header[11] = 'E';
        //FMT Chunk
        header[12] = 'f'; // 'fmt '
        header[13] = 'm';
        header[14] = 't';
        header[15] = ' ';//过渡字节
        //xx大小
        header[16] = 16; // 4 bytes: size of 'fmt ' chunk
        header[17] = 0;
        header[18] = 0;
        header[19] = 0;
        //编码方式 10H为PCM编码格式
        header[20] = 1; // format = 1
        header[21] = 0;
        //通道数
        header[22] = (byte) channels;
        header[23] = 0;
        //采样率,每个通道的播放速度
        header[24] = (byte) (sampleRate & 0xff);
        header[25] = (byte) ((sampleRate >> 8) & 0xff);
        header[26] = (byte) ((sampleRate >> 16) & 0xff);
        header[27] = (byte) ((sampleRate >> 24) & 0xff);
        //音频xx传送速率,采样率*通道数*采样深度/8
        header[28] = (byte) (byteRate & 0xff);
        header[29] = (byte) ((byteRate >> 8) & 0xff);
        header[30] = (byte) ((byteRate >> 16) & 0xff);
        header[31] = (byte) ((byteRate >> 24) & 0xff);
        // 确定系统一次要处理多少个这样字节的xx,确定缓冲区,通道数*采样位数
        header[32] = (byte) (channels * 16 / 8);
        header[33] = 0;
        //每个样本的xx位数
        header[34] = 16;
        header[35] = 0;
        //Data chunk
        header[36] = 'd';//data
        header[37] = 'a';
        header[38] = 't';
        header[39] = 'a';
        header[40] = (byte) (totalPcmSize & 0xff);
        header[41] = (byte) ((totalPcmSize >> 8) & 0xff);
        header[42] = (byte) ((totalPcmSize >> 16) & 0xff);
        header[43] = (byte) ((totalPcmSize >> 24) & 0xff);
        os.write(header, 0, 44);

@wly

文件下载

Tags:

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
定时关机读卡器开发redis做二级缓存语音报时ExUI图标列表框OEM信息路由器换IPWS/WSS识图按键助手notepd++插件模板多线程拨号代码动态壁纸线程池操作Fiddler易语言模块源码易语言最新版云的多窗口界面支持库远程文件管理Etorch邮箱轰炸器
最新评论