C++调用libmp3lame实现压缩WAV为MP3【附VS2013项目】
The LAME Project LAME is a high quality MPEG Audio Layer III (MP3) encoder licensed under the LGPL.
VS2013项目(libmp3lame, 可直接编译)下载链接:http://pan.baidu.com/s/1eQnqS9c 密码:5mg3
/********************************************************************Filename: RLib_Mp3.cppAuthor: rrrfffUrl: http://blog.csdn.net/rrrfff
*********************************************************************/
#include "RLib_File.h"
#include "RLib_GlobalizeString.h"
#include "support/libmp3lame/lame.h"
#include <mmreg.h>
#include <stdio.h>#ifdef _USE_MP3//-------------------------------------------------------------------------#pragma pack(1)
struct WAVFILE
{struct RIFF_HEADER{char szRiffID[4]; // 'R','I','F','F'DWORD dwRiffSize; // file_length - sizeof(szRiffID) - sizeof(dwRiffSize)char szRiffFormat[4]; // 'W','A','V','E'};struct FMT_BLOCK{char szFmtID[4];// 'f','m','t',' 'DWORD dwFmtSize;union WAV_FORMAT{WAVEFORMATEX wavFormatEx; //determined by dwFmtSizePCMWAVEFORMAT wavPCMFormat;//dwFmtSize == 16};WAV_FORMAT format;};// struct FACT_BLOCK// {// char szFactID[4]; // 'f','a','c','t'// DWORD dwFactSize;// };struct DATA_BLOCK{char szDataID[4]; // 'd','a','t','a'DWORD dwDataSize;};RIFF_HEADER header;FMT_BLOCK fmt;// FACT_BLOCK fact;DATA_BLOCK data;
};
#pragma pack()//-------------------------------------------------------------------------void ConvertFromWAVFile(String wav_path, String mp3_path)
{auto pcm = IO::File::Open(wav_path);if (pcm == nullptr) return;//skip wav file headers
#ifdef _DEBUGWAVFILE wav;pcm->Read(&wav, sizeof(wav));
#elsepcm->Position = sizeof(WAVFILE);
#endif // _DEBUGFILE *mp3;if (fopen_s(&mp3, GlobalizeString(IO::Path::GetDosPath(mp3_path)).toGBK(), "wb+") != 0){delete pcm;return;}lame_t lame = lame_init();lame_set_in_samplerate(lame, 44100);lame_set_VBR(lame, vbr_default);// lame_set_bWriteVbrTag(lame, 0);lame_init_params(lame);short int pcm_buffer[RLIB_DEFAULT_BUFFER_SIZE * sizeof(short int)];unsigned char mp3_buffer[RLIB_DEFAULT_BUFFER_SIZE * sizeof(short int)];//make sure...intptr_t read, write;do{read = pcm->Read(pcm_buffer, sizeof(pcm_buffer));if (read == 0){write = lame_encode_flush(lame, mp3_buffer, sizeof(mp3_buffer));}else{write = lame_encode_buffer_interleaved(lame,pcm_buffer, static_cast<int>(read / sizeof(short int)), //what should I do?mp3_buffer, sizeof(mp3_buffer));}fwrite(mp3_buffer, write, 1, mp3);} while (read > 0);lame_mp3_tags_fid(lame, mp3);lame_close(lame);fclose(mp3);delete pcm;
}
#endif // _USE_MP3
C++调用libmp3lame实现压缩WAV为MP3【附VS2013项目】相关推荐
- java+lame实现wav到mp3的转换
lame以及lame命令参数设置请大家自行搜索,这里给大家一个例子,java+lame实现压缩wav to mp3. 注意:lame.exe与java工程src放在同一文件夹,否则请使用绝对路径调用l ...
- 04.iOS 使用lame将wav转换为mp3
在iOS设备中进行录音,录音文件的格式为wav.但这种格式文件会很大,上传到服务器会消耗大量流量.为了适应终端的播放功能以及文件大小的要求,特将wav转换为mp3格式文件来使用. 注意:在录制wav文 ...
- android lame wav 转 mp3,Android JNI Lame编解码实现wav到MP3的转换
1.JNI简介 JNI全称为Java Native Interface(JAVA本地调用).从Java1.1开始,JNI成为java平台的一部分,它允许Java代码和其他语言写的代码(如C&C ...
- air中wav转mp3
格式: lame 输入文件 转出文件 这是转换时打印出来的信息,我们能发现里面包含了进度信息,只需要解析该信息就可得到进度信息,解析的正则表达式为://((/s?)(/d+)%/)/|/gi,结果为 ...
- FFmpeg之wav转mp3(二十四)
一.将wav转码为mp3 1.下载开源编码库libmp3lame,然后编译.安装到系统 https://nchc.dl.sourceforge.net/project/lame/lame/3.100/ ...
- WIN32下使用DirectSound接口的简单音频播放器(支持wav和mp3)
刚好最近接触了一些DirectSound,就写了一个小程序练练手,可以用来添加播放基本的wav和mp3音频文件的播放器.界面只是简单的GDI,dxsdk只使用了DirectSound8相关的接口. D ...
- 音频格式wav与mp3和wma的区别与音质
MP3 全称是Moving Picture Experts Group Audio Layer III.简单的说,MP3就是一种音频压缩技术,由于这种压缩方式的全称叫MPEG Audio Layer3 ...
- wav转mp3怎么转?几种值得学习的转换方法,打开看看!
WAV和MP3都是常用的数字音频格式.WAV是一种无损音频格式,全称为Waveform Audio File Format.它最初由Microsoft和IBM联合开发,是Windows系统下最常用的音 ...
- JavaDemo——wav转mp3
wav转mp3比较简单,使用JAVE工具包就ok,JAVE可以转换各种视频音频. JAVE网站:http://www.sauronsoftware.it/projects/jave/manual.ph ...
最新文章
- 复习计算机网络基础 day5--物理层
- 建立单链表(尾插法)
- Heritrix源码分析(六) Heritrix的文件结构分析
- LongAdder分段锁机制
- Qt弹出的窗口始终位于界面最前面的方法
- saber仿真软件_返场预订,视频课程丨开关电源环路补偿设计与仿真
- QT实现“摇摇乐抽奖”(Lottery和Lottery2)
- 【简单】基于springboot的学生在线考试系统【老师、学生、管理员】
- Pytorch实现FGSM(Fast Gradient Sign Attack)
- 什么是智能颈部按摩仪低频脉冲电流?它会对人体有何影响?
- 量化择业 银行vs券商vs公募vs私募?(行内人深度分享)
- 系统架构设计——伸缩性架构
- 93. 复原 IP 地址
- PDMS二次开发产品Naki.CI(二):升级到1.0.1版本
- 微软苏菲rt能装鸿蒙,忘记RT,让微软还你一个不一样的“苏菲3”
- 视频教程-React 全家桶从入门到实战到源码-其他
- 实验4mysql查询数据_数据库实验四 复杂查询.doc
- php 自动获取头像,PHP_WordPress中用于获取及自定义头像图片的PHP脚本详解,get_avatar()(获取头像)
get_avat - phpStudy...
- ESP32-S2 SGM58031-热敏电阻电压转温度
- 历史最全DL相关书籍、课程、视频、论文、数据集、会议、框架和工具整理分享