ios - 以编程方式将 .m4a 转换为 .mp3 文件

2023-12-02

这里我有m4a格式的音频,我需要转换成mp3格式。

为此,我使用的代码为

- (void) toMp3{
    NSString *m4aFilePath = pathToSave;
    NSString *mp3FileName = [NSString stringWithFormat:@"Audio%d",[audioArr count]];
    mp3FileName = [mp3FileName stringByAppendingString:@".mp3"];
    pathToSave = [NSString stringWithFormat:@"%@/%@", DOCUMENTS_FOLDER, mp3FileName];
    NSLog(@"pathToSave :%@",pathToSave);
    @try {
        int read, write;

        FILE *pcm = fopen([cafFilePath cStringUsingEncoding:1], "rb");  //source
        fseek(pcm, 4*1024, SEEK_CUR);                                   //skip file header
        FILE *mp3 = fopen([pathToSave cStringUsingEncoding:1], "wb");  //output

        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, 44100);
        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 {
        [self performSelectorOnMainThread:@selector(convertMp3Finish)
                               withObject:nil
                            waitUntilDone:YES];
    }
}

我怎样才能从 m4a 转换为 mp3 格式。请帮助我


尝试这个,

@try
{
    int read, write;
    FILE *pcm = fopen([cafFilePath cStringUsingEncoding:1], "rb");  //source
    fseek(pcm, 4*1024, SEEK_CUR);                                   //skip file header

    mp3 = fopen([mp3FilePath cStringUsingEncoding:1], "wb");  //output
    const int PCM_SIZE = 8192*3;
    const int MP3_SIZE = 8192*3;
    short int pcm_buffer[PCM_SIZE*2];
    unsigned char mp3_buffer[MP3_SIZE];

    lame_t lame = lame_init();
    lame_set_in_samplerate(lame, 11025*2);
    lame_set_VBR(lame, vbr_default);
    lame_init_params(lame);

    int nTotalRead=0;

    do {
        read = fread(pcm_buffer, 2*sizeof(short int), PCM_SIZE, pcm);

        nTotalRead+=read*4;

        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);
        // write = lame_encode_buffer(lame, pcm_buffer,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]);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ios - 以编程方式将 .m4a 转换为 .mp3 文件 的相关文章

  • 如何随机化 NSArray? [复制]

    这个问题在这里已经有答案了 假设我有一个 NSArray 里面有 50 100 个对象 如何将数组按随机顺序排列 有很多方法可以做到这一点 但大多数只涉及生成随机数 也许您可以使用 NSMutableArray 使用此技术 生成 0 到 4
  • 将数据从子模态 VC 传递到父视图控制器的最佳方法?

    将数据从子模式视图传递到父视图控制器的最佳方法是什么 我的 iPad 应用程序上有一个子模式登录屏幕 我想将用户信息传回父级分割视图控制器 我正在考虑使用 NSNotification 但我不确定这是否是将数据传递回父级的最简单 最有效的方
  • 使用 flutter 构建 iOS 项目时出现的问题

    升级 Xcode 15 beta 5 后 无法构建项目 显示错误 Firebase 1 问题 DT TOOLCHAIN DIR 不能用于评估 LIBRARY SEARCH PATHS 请改用 TOOLCHAIN DIR FirebaseAn
  • Xcode 6 Save for Enterprise Deployment 不再为 ipa 创建 plist?

    Xcode 5 帮助为企业 ipa 创建 plist 描述符 Xcode 6 6A313 仅创建 ipa 这是错误还是有意更改 如果是这样 退后一步的原因是什么 如果我之前没有使用 Xcode 5 生成 plist 我需要自己手动构建它 您
  • 如何在 Swift 中退出“DispatchQueue.main.asyncAfter”

    我想在调用 deinit 时退出 DispatchQueue main asyncAfter 子视图 swift DispatchQueue main asyncAfter deadline now 5 0 self doSomething
  • 获取UIButton的UITableViewCell?

    我正在尝试使用UIButton 它位于自定义的UITableViewCell类称为GFHomeCell The GFHomeCell has a postID属性 我想在准备继续时发送该属性 我设置了一个在按下按钮时运行的方法 但是 在按下
  • 有没有办法以编程方式选择 Segue 锚点?

    假设我有一个 Storyboard 其中包含一个包含按钮的视图 当用户按下此按钮时 会出现一个弹出窗口 因此 我需要使用 Xcode 将 Segue 拖动到按钮来设置锚点 然后执行使用标识符执行Segue 所以 我的问题是 有没有办法以编程
  • Modal UIViewController 在 iPad 上总是全屏显示。为什么?

    我试图在 iPad 上创建一个简单的模式对话框 无论是小设置 UIModalPresentationFormSheet 还是大设置 UIModalPresentationPageSheet 但无论我做什么 它们都会全屏显示 带有标题栏 模态
  • 我什么时候应该使用 CGM 设备组和主题?

    我正在考虑将 Google Cloud Messaging 合并到我的应用程序中 我想向与用户关联的所有设备发送消息 乍一看 它看起来像 GCM 的设备群组消息传递 https developers google com cloud mes
  • 如何更改某些功能以兼容 iOS 10 或更低版本的 Snapchat 中的某些功能,例如相机视图控制器

    我正在制作一个视图控制器来制作像 snapchat 相机一样的相机视图控制器 我下面的代码在 iOS 11 或更高版本上完美运行 老实说 我并没有真正掌握我的代码 因为我只是按照这个像相机视图控制器这样的 snapchat 的教程进行操作
  • 将 NSDictionary 保存到文件有任何限制吗

    我想用下面的方法来保存NSDictionary void writeDicToFile NSDictionary dic fileName NSString fileName NSString filePath NSTemporaryDir
  • iOS 上邮件到达时收到通知吗?

    当邮件到达标准邮件应用程序时 有没有办法让应用程序收到通知 更准确地说 我想编写一个应用程序 它能够从标准邮件应用程序读取传入的电子邮件 其中包含自定义 txt 格式的新联系人或事件 然后 应用程序应将此新联系人 事件添加到 ipad 反之
  • 如何更改标签栏图标颜色从默认蓝色?

    我有四个标签 我能够将选项卡图标颜色从默认的蓝色更改为红色 或可能任何颜色 并且效果非常好 问题是它仅适用于三个选项卡项目 最后一个选项卡默认为蓝色 下面是代码 我正在编码这个rootviewcontrollerAppDelegate m您
  • 以编程方式进行排序时检索 ViewController 堆栈

    static func showMenuView parentVC UIViewController let storyboard UIStoryboard name Main bundle nil let resultController
  • 如何在 Cocoa with Core Data 中上传和存储文件?

    我有一个应用程序 我希望能够将文件上传到其中 我可以想象序列化数据 将其放入数组中 然后序列化数组并将其放入核心数据中 但这似乎不太正确 我还可以想象将文件复制到应用程序的支持文件中 获取这些文件的 NSURL 并存储数组或 NSURL 无
  • NSLocale 货币符号,显示金额值之前或之后

    我在用StoreKit在我的应用程序中实现应用程序内购买商店 我有一个自定义设计 这意味着价格的值应该是白色的且较大的 货币符号较小 较暗并与价格值的顶部对齐 我可以使用以下命令毫无问题地获取货币符号NSLocale in SKproduc
  • 启动时运行后台任务

    我正在编写一个 iOS 应用程序 它使用 Dropbox Datastore API 在多个设备之间同步数据 在 Android 上 我可以告诉服务在启动时启动 这使其能够同步 设备关闭时可能发生的任何更改 我无法找到让我的应用程序在 iO
  • 如何使用 UISlider 以及如何将滑块设置为特定值?

    我是第一次使用 UIslider 首先我想知道如果值的范围是 0 到 10 如何获取滑块位置的值 其次 我希望我的滑块设置为 5 个不同的值 如 1 2 3 4 5 slider should not set between the lab
  • 如何在 Safari 和 Native App 之间共享上下文?

    我有需要通过 Safari 设置一些上下文 上下文标记 然后从本机 iOS 应用程序读取该上下文 这样做的最佳实践是什么 到目前为止的一些想法 在 HTML 5 数据库中设置上下文 但我不确定这是否有效 因为该数据库可能只能从 Safari
  • Eddystone 信标检测问题

    以下是我使用 iPhone iOS 9 检测 Eddystone 的代码 void viewDidLoad super viewDidLoad if CLLocationManager locationServicesEnabled loc

随机推荐

  • 下载 Google App Engine 数据库

    在 Google App Engine 数据存储区中创建表 实体 后 我创建了 Web 应用程序并将其部署在 Google App Engine 中 我怀疑是否可以下载实体 数据库 启用remote api 将其添加到您的web xml
  • 通过Java修改XPath表达式?

    我有以下类型的 XPath 表达式 id test id and some other attribute some value 我想把它转换成 resourceId android id test id and some other at
  • 如何在 Java 中将字符串时间转换为 Long 毫秒

    我正在尝试使用下面的代码将时间字符串转换为毫秒 因为我会把时间用作倒计时器 问题是时间来自数据库并且是 varchar 类型 我尝试了这段代码 但它没有给我正确的输出 String timeDuration 10 00 for exampl
  • SpreadsheetAddRows 在中等大小的查询上失败

    编辑 我更改了名称 因为有一个类似的问题如何修复添加大型查询时 SpreadSheet 添加行函数崩溃的问题 那里描述了我的问题 所以我更简洁地进行了分述 问题是我的查询结果的电子表格添加行以我认为适中的大小 1600 行 27 列 轰炸了
  • 未找到对象 - XAMPP

    我最近在我的笔记本电脑上安装了 XAMPP windows 7 64 位 我刚刚用 HTML 编写了一个非常基本的 Hello World 脚本 但是 当我尝试运行它时 它显示 未找到对象 错误 404 这就是我正在做的 写了剧本 将其保存
  • 更改 tkinter 窗口边框样式

    我想让我的窗框看起来像旧的 windows 95 风格 现在 当我创建窗口时 tkinter 会自动采用我的操作系统 Windows 10 的样式 有办法改变这个吗 不 没有什么特别可以使窗口边框看起来不同 您唯一的选择是完全删除边框 例如
  • NETLOGO:使用上一个刻度的变量

    是否有一些原语可以使用前一个刻度的变量值 我尝试计算一个代理的 价格 变量 我的意思是使用包含其他代理的 价格 变量但来自上一个刻度的公式 不 NetLogo 中没有内置方法可以执行此操作 您最好的选择可能是创建一个名为以下内 容的变量va
  • 将 ioctl() 调用从 unix 移植到 linux,FIONBIO 出错

    我想使用 ioctl 来获取准备读取的字节数 我这样做的方式是 mysocket socket ioctl mysocket FIONBIO zero connect ioctl mysocket FIONREAD numBytes rea
  • 生成 [-1, 1] 范围内的随机数数组

    我正在尝试在 Fortran 中的 2D 数组中生成 1 1 范围内的随机数 我知道为了生成 1 和 1 范围内的随机数 我必须将数字重新调整为 0 2 但我不知道如何填充矩阵x 10 10 with randomReal 这是代码 pro
  • InstallShield 限量版支持 64 位安装程序吗?

    我刚刚开始学习 InstallShield LE 因为它似乎是唯一 官方 支持的安装程序项目 但我有一个简单的问题 我什至无法得到绝对的答案 ISLE 是否支持构建 64 位安装程序 我之所以这么问 是因为我发现至少有两篇文章说这是不可能的
  • 如何将两个不同Spout的输出发送到同一个Bolt?

    我有两个 Kafka Spout 我想将它们的值发送到同一个 Bolt 是否可以 对的 这是可能的 TopologyBuilder b new TopologyBuilder b setSpout topic 1 new KafkaSpou
  • 使用 PHP 以非 ASCII 字符输出日期

    我正在尝试以繁体中文输出日期 我将日期作为 Unix 时间戳 例如 1467244800 我正在做以下事情 我得到的输出是 Unicode 未定义 字符 30 2016 17 T 2016 18 Q G 2015 谁能告诉我我做错了什么 我
  • 使用端口 443 连接到 Heroku

    我是一名大学生 除了80 443之外的所有端口都被封锁 我可以通过以下方式连接到 github Host github com Hostname ssh github com Port 443 git push heroku master给
  • Eclipse 关闭钩子能够停止终止

    我正在开发一个插件 该插件执行外部工具 如果用户在进程正在运行时尝试退出 Eclipse 我必须提供一个确认对话框 有正在运行的进程 你真的想退出吗 如果用户点击No Eclipse 可能不会终止 我刚刚发现 如何挂钩退出命令来清理思考 该
  • Outlook 中 html 电子邮件的显示错误

    我使用以下代码创建了一封 html 电子邮件 div style background color orange max width 600px height 180px margin left auto margin right auto
  • Google Sheet Api get 函数在 nodejs 中返回未定义的值

    function changeData auth sheetId var sheets google sheets v4 sheets spreadsheets values update auth auth spreadsheetId s
  • 增量压缩和一次性压缩有什么区别?

    我正在尝试使用bz2 and or lzmapython 中的包 我正在尝试以 csv 格式压缩数据库转储 然后将其放入zip文件 我让它与这两个包一起使用一次性压缩 其代码如下所示 with ZipFile something zip w
  • 如何使用R中的Leaflet用一条线连接两个坐标

    我正在尝试使用 R 中的 Leaflet 包来绘制放大器并根据下表中的纬度和经度信息连接标记 Observation InitialLat InitialLong NewLat NewLong A 62 469722 6 187194 51
  • D3 Topojson 圆,半径以英里为单位

    假设现有投影 topojson 我想做的是在半径 r 以英里为单位的点 long lat 处创建一个圆 我知道有一个 d3 geo 函数可以实现此目的 但经过一番考虑后 我认为它与我的特定应用程序不太兼容 所以现在我正在寻找使用原生 svg
  • ios - 以编程方式将 .m4a 转换为 .mp3 文件

    这里我有m4a格式的音频 我需要转换成mp3格式 为此 我使用的代码为 void toMp3 NSString m4aFilePath pathToSave NSString mp3FileName NSString stringWithF