当前位置:   article > 正文

iOS 音频转码 使用lame转为MP3格式_ios mp3 lame转码

ios mp3 lame转码

由于AVAudioRecorder不能录制编码为MP3,所以就需要我们将录音后的音频文件格式进行转换(注意:AV Foundation和Core Audio提供对MP3数据解码的支持,但是不提供对其进行编码。所以我们要借助第三方库进行MP3编码)。如何转换?lame无疑是一个很好的选择,lame是一个开源音频压缩软件,目前是公认有损质量MP3中压缩效果最好的编码器。接下来直奔主题,介绍一下如何使用lame将音频转为MP3格式。

一、使用lame的准备工作

首先去官网下载lame库(下载地址),下载后需要将lame库进行编译(编译脚本下载地址)。编译步骤如下:
1、
在桌面上新建一个文件夹,然后将下载后的lame库文件解压命名为lame和编译脚本文件一同放到当前文件中,像这样:


1370044-3a69132b1eaa6abd.png


2、
  打开终端,cd到lame-3.99.5目录中,运行脚本,开始编译。编译时间稍微有点长,编译成功后文件内容如下所示:


aaa.png


新增加的这几个文件夹分别包含了不同的cpu架构,这里就不详细介绍。如果要支持所有的cpu架构(包括真机和模拟器),只需要将fat-lame文件中的内容拖到项目中即可(lame.h和libmp3lame.a)。至此,准备工作完毕。

二、lame的使用
  1. //录音文件转码
  2. - (void)audio_PCMtoMP3
  3. {
  4. NSString *recorderSavePath = [self.savedRecordPath absoluteString];
  5. NSString *audioTemporarySavePath = [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES) lastObject];
  6. NSString *mp3FileName = [self.savedRecordPath lastPathComponent];
  7. mp3FileName = [mp3FileName stringByAppendingString:@".mp3"];
  8. NSString *mp3FilePath = [audioTemporarySavePath stringByAppendingPathComponent:mp3FileName];
  9. @try {
  10. int read, write;
  11. FILE *pcm = fopen([recorderSavePath cStringUsingEncoding:1], "rb"); //source 被转换的音频文件位置
  12. fseek(pcm, 4*1024, SEEK_CUR); //skip file header
  13. FILE *mp3 = fopen([mp3FilePath cStringUsingEncoding:1], "wb"); //output 输出生成的Mp3文件位置
  14. const int PCM_SIZE = 8192;
  15. const int MP3_SIZE = 8192;
  16. short int pcm_buffer[PCM_SIZE*2];
  17. unsigned char mp3_buffer[MP3_SIZE];
  18. lame_t lame = lame_init();
  19. lame_set_in_samplerate(lame, 11025.0);
  20. lame_set_VBR(lame, vbr_default);
  21. lame_init_params(lame);
  22. do {
  23. read = (int)fread(pcm_buffer, 2*sizeof(short int), PCM_SIZE, pcm);
  24. if (read == 0)
  25. write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE);
  26. else
  27. write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE);
  28. fwrite(mp3_buffer, write, 1, mp3);
  29. } while (read != 0);
  30. lame_close(lame);
  31. fclose(mp3);
  32. fclose(pcm);
  33. }
  34. @catch (NSException *exception) {
  35. NSLog(@"%@",[exception description]);
  36. }
  37. @finally {
  38. NSLog(@"MP3生成成功: %@",mp3FilePath);
  39. self.savedRecordPath = mp3FilePath.tzl_URL;
  40. }
  41. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/898665
推荐阅读
相关标签
  

闽ICP备14008679号