【iOS开发】将 .caf 格式转为 .mp3 格式方法

来源:互联网 发布:eview触摸屏编程软件 编辑:程序博客网 时间:2024/04/30 17:23

通过第三方框架 lame,将将 .caf 格式转为 .mp3 格式。

具体代码

- (NSURL *)transformCAFToMP3:(NSURL *)sourceUrl{    NSURL *mp3FilePath,*audioFileSavePath;    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];    mp3FilePath = [NSURL URLWithString:[path stringByAppendingPathComponent:@"test.mp3"]];    @try {        int read, write;        FILE *pcm = fopen([[sourceUrl absoluteString] cStringUsingEncoding:1], "rb");   //source 被转换的音频文件位置        fseek(pcm, 4*1024, SEEK_CUR);                                                   //skip file header        FILE *mp3 = fopen([[mp3FilePath absoluteString] cStringUsingEncoding:1], "wb"); //output 输出生成的Mp3文件位置        NSLog(@"sour-- %@   last-- %@",sourceUrl,mp3FilePath);        const int PCM_SIZE = 8192;        const int MP3_SIZE = 8192;        short int pcm_buffer[PCM_SIZE*2];        unsigned char mp3_buffer[MP3_SIZE];        lame_t lame = lame_init();        lame_set_in_samplerate(lame, 11025.0);        lame_set_VBR(lame, vbr_default);        lame_init_params(lame);        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);        lame_close(lame);        fclose(mp3);        fclose(pcm);    }    @catch (NSException *exception) {        NSLog(@"%@",[exception description]);    }    @finally {        audioFileSavePath = mp3FilePath;        NSLog(@"MP3生成成功: %@",audioFileSavePath);        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"mp3转化成功!" message:nil delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];        [alert show];    }    return audioFileSavePath;}

lame 下载地址 : http://pan.baidu.com/s/1cGap0E ut8m

2 0
原创粉丝点击