使用 lame 处理音频有一段时间了。
之前使用的是直接从网上下载的库。
一、处理问题1
后来不断出现 libmp3lame missing required architecture x86_64
问题。
使用临时的方法(http://blog.csdn.net/teamlet/article/details/51620139)不影响编译 和 在Appstore的更新。
自动更新到8.1之后,各种快捷方式不好用,最后连模拟器都无法使用了。
删除xcode之前的所有版本,重新下载了xcode8.2,发现这个临时的方法(http://blog.csdn.net/teamlet/article/details/51620139)不好用了。
只好到 lame 的原站下载了最新版本,自己编译最新版本的库。
http://sourceforge.net/projects/lame/files/lame/3.99/
编译方法:
1、http://download.csdn.net/detail/teamlet/9709968
2、http://download.csdn.net/detail/teamlet/9709977
编译后,发现网上下载的库的大小是 1.5M,而自己编译的是 4.5M
这也许就是问题所在吧!
处理警告1
ibmp3lame.a(fft.o)) was built for newer iOS version (9.3) than being linked (8.0) 出现!
Build Setting -> Other Linker Flags在原有参数后面添加 -w
处理警告2
Implicit conversion loses integer precision: ‘unsigned long’ to ‘int’
在 lame.h中有一个方法
lame_encode_buffer_interleaved()
其中有一个参数是 int num_samples
只需要把int 改为 unsigned long 就可以了。
unsigned long read;
unsigned long write;
...
do {
read = fread(pcm_buffer, 2 * sizeof(short int), PCM_SIZE, pcm);
if (read == 0)
write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE);
else
write = lame_encode_buffer_interleaved(lame, pcm_buffer, read , mp3_buffer, MP3_SIZE);
fwrite(mp3_buffer, write, 1, mp3);
} while (read != 0);
二、更新类库
随后把第三方类库全部更新!!!
AFNetworking从2.0 升级到 3.1 的最新版。
1、处理警告
AFHTTPSessionManager的 GET,POST等一系列方法都DEPRECATED掉了。
新的方法是在success前面加上一个调用参数 progress:nil
[session GET:@"请求的url" parameters:nil progress:nil success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"成功");
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"失败");
}];
[manager POST:stringURL
parameters:parma
progress:nil success:^(NSURLSessionDataTask *operation, id responseObject) {
NSLog(@"成功");
} failure:^(NSURLSessionDataTask *operation, NSError *error) {
NSLog(@"失败");
}];