macos上使用lame将pcm文件编码为mp3不使用ide
1 内容介绍
1,本文主要介绍如何使用lame库,将pcm文件编码为mp3文件,不使用ide.
2,环境为macos.各个环境的代码都是一样的,主要是编译库的脚本不一样.
3,打算写一个整合了ios,android,centos,windows,macos上的编译脚本,发布为另一篇文章.
2 编译lame库
1,编译lame库的脚本,将在整理之后发布出来.
2,暂时可以先下载已经编译好的版本,for macos!
https://pan.baidu.com/s/11wyA7QuYuB6YUd-FyqYgcg?pwd=j0f9
3 编写源代码main.c文件
#include <stdio.h>
#include <lame/lame.h>
#include <stdlib.h>FILE *pcmFile;
FILE *mp3File;
lame_t lameClient;int init(char *pcmFilePath, char *mp3FilePath, int sampleRate, int channels, int bitRate);
void encode();
void destroy();int main(int argc, char *argv[])
{//输入参数.char *pcmFilePath, *mp3FilePath;int sampleRate = 44100;int channels = 2;int bitRate = 44100 * 2 * 8;printf("There are %d params\n", argc);for (int i = 0; i < argc; i++){printf("param %d:%s\n", i, argv[i]);if (i == 1){pcmFilePath = argv[1];}else if (i == 2){mp3FilePath = argv[2];}}int ret = init(pcmFilePath, mp3FilePath, sampleRate, channels, bitRate);if (ret){printf("error!");exit(ret);}encode();destroy();return 0;
}int init(char *pcmFilePath, char *mp3FilePath, int sampleRate, int channels, int bitRate)
{int ret = -1;pcmFile = fopen(pcmFilePath, "rb");if (!pcmFile){printf("pcm file open failed!\n");return -1;}mp3File = fopen(mp3FilePath, "wb");if (!mp3File){printf("mp3 file open failed!\n");return -1;}lameClient = lame_init();lame_set_in_samplerate(lameClient, sampleRate);lame_set_out_samplerate(lameClient, sampleRate);lame_set_num_channels(lameClient, channels);lame_set_brate(lameClient, bitRate / 1000);lame_init_params(lameClient);ret = 0;return ret;
}void encode()
{//一次操作256KB大小的数据.int bufferSize = 1024 * 256;//一个short是2个字节.short *buffer = calloc(bufferSize / 2, sizeof(short));short *leftBuffer = calloc(bufferSize / 4, sizeof(short));short *rightBuffer = calloc(bufferSize / 4, sizeof(short));unsigned char *mp3Buffer = (unsigned char *)malloc(bufferSize);size_t readBufferSize = 0;// 一次读bufferSize/2个2个字节的数据==读一个bufferSize的数据.// 每次读一个float,左右声道交错存储.while ((readBufferSize = fread(buffer, 2, bufferSize / 2, pcmFile)) > 0){for (int i = 0; i < readBufferSize; i++){if (i % 2 == 0){leftBuffer[i / 2] = buffer[i];}else{rightBuffer[i / 2] = buffer[i];}}//左右声道编码size_t wroteSize = lame_encode_buffer(lameClient, (short int *)leftBuffer, (short int *)rightBuffer, (int)(readBufferSize / 2), mp3Buffer, bufferSize);//写入文件fwrite(mp3Buffer, 1, wroteSize, mp3File);}free(buffer);free(leftBuffer);free(rightBuffer);free(mp3Buffer);
}void destroy()
{if (pcmFile){fclose(pcmFile);}if (mp3File){fclose(mp3File);lame_close(lameClient);}
}
4 编译
如果是clang编译器:
clang -L./lame-3.100/lib/ -I./lame-3.100/include -lmp3lame main.c
如果是gcc编译器:
gcc -L./lame-3.100/lib/ -I./lame-3.100/include -lmp3lame main.c
两个编译器的命令是一致的.
1,-lxxx,自动寻找libxxx.a,或者libxxx.so
2.-Lxxx,表示添加库搜索路径.
3,-Ixxx,表示增加头文件搜索路径.
4,库搜索路径包含软链时,ld提示文件夹找不到.
5,没有指定输出文件名,默认的输出结果为a.out
5 运行
./a.out timeless.pcm timeless.mp3
1,timeless.pcm为输入的pcm文件,timeless.mp3为输出mp3文件.
2,注意pcm文件必须为44100的采样率,双声道,采样深度为16bit.
[图片上传失败…(image-13fa3e-1661690480718)]
测试音频文件也提供了
https://pan.baidu.com/s/1Vdoo2ieEump-zANcXLab5g?pwd=bw4w
该音频文件为timeless.pcm,44100采样率,双声道,采样深度为16bit.
6 总结
1,timeless.mp3,是小编最喜欢的歌曲之一,时间是最宝贵的财富,希望我们都能珍惜当下.
2,这个系列好久之前就想写了,拖了好久.
macos上使用lame将pcm文件编码为mp3不使用ide相关推荐
- Android使用lame将PCM文件转码为MP3文件
Android使用lame将PCM文件转码为MP3文件 1. 软件版本 Android Studio版本:4.2 lame版本:3.100 编译参考:centos7使用ndk编译lame 2. 项目配 ...
- 如何在前端删除项目中的文件_如何在macOS上恢复已删除的文件
有时候不小心删除了我们不打算删除的MacBook上的文件.在MacBook上恢复永久删除的文件非常困难,但这并非不可能.在本文中,我们将指导您如何恢复MacBook上最近恢复的文件或永久删除的文件.从 ...
- macOS上有哪些视频无损压缩和编码转码软件
macOS 上常用的视频无损压缩和编码转码软件有 Handbrake.FFmpeg 和 MEGui.
- Android使用LAME将pcm文件转mp3文件
Android使用LAME将pcm格式转mp3格式 lame介绍:LAME是一款开源的MP3编码器,被认为是中高比特率和VBR的最佳MP3编码器,质量和速度方面的改进仍在继续,可能使LAME成为仍在积 ...
- java把pcm文件转换成mp3文件
要将 PCM 文件转换为 MP3 文件,您可以使用 Java 实现.下面是一个可以将 PCM 文件转换为 MP3 文件的示例代码: import java.io.BufferedInputStream ...
- java ftp 设置编码_java ftp上传下载,下载文件编码设置
/** * Description: 从FTP服务器下载文件 * @Version1.0 Jul 27, 2008 5:32:36 PM by 崔红保(cuihongbao@d-heaven.com) ...
- android lame音频转换,音视频开发02--使用LAME库转换pcm文件到mp3
android 使用 AudioRecord 对麦克风进行录音得到的是 pcm 格式的原始音频数据,pcm文件是不能用来播放的,需要进行编码压缩. LAME是目前非常优秀的一种MP3编码引擎,在业界, ...
- macos 查找文件_如何在Windows和macOS上查找和安装颜色配置文件以获取更准确的显示器...
macos 查找文件 Color profiles, also known as ICC or ICM files, contain a collection of settings that hel ...
- Qt文件编码转换工具(二) C++判断文件编码
目录 下载链接 上一节 如何判断文件编码 下一节 下载链接 Realase打包版本下载: Qt文本转化工具 realase版本 https://download.csdn.net/download/q ...
最新文章
- ue4商城资源 Car Configurator Template 汽车配置器模板
- 牛X!Github项目中文榜,你想知道不想知道的都有!
- Html5 History API解析
- java随机输出10计算题
- U3D中可以直接使用GL!!!
- Node+GitLab实现小程序CI系统
- MATLAB学习笔记(五)
- 批处理bat脚本自动配置java的jdk环境变量
- mysql 如何解决字段不区分大小写的问题
- Notepad3(高级文本编辑器)v5.19.815.2595版本更新啦
- Android笔记(3)使用dataBinding数据的错误啊啊啊啊啊啊啊啊!!!!
- MyEclipse出现弹窗提示“当前页面的脚本发生错误”
- js基础-语法(switch)
- 三次样条插值(附完整代码)
- 实现一个CAN通讯上位机
- 使用firewall-cmd限制ssh只能从指定IP段访问
- H5填坑笔记--持续更新
- JUnit version 3.8 or later expected
- 项目开发中引入外部字体库
- 关于微信HOOK协议,包括云控的后续开发经验