IOS开发 铃声制作(库乐队)

IOS开发,实现铃声制作功能。
在IOS端,要设置铃声都是通过库乐队来制作的。

先看一下库乐队中铃声的文件结构。下面是弄的一个示例的文件,文件信息如下:
1521b6b120ba488f9cde1df0a33b6f64.png

 我们右击文件,点击显示包内容如下:
能看到一个aiff格式的音频。思考一下,当我们想要制作成铃声的音频文件是mp3或者是其他格式的音频是,发现,当隔空分享到库乐队时并没有库乐队选项。那是因为库乐队需要识别的是.band文件。

要是我们将音频转为aiff文件,然后塞入到这个band文件里面的Media。然后将这个band文件分享给库乐队就可以了呢?答案是:是的。下面我们开始操作!
f7d0ad8557f9454bb61eb3917c5a1fb3.png

一、实现流程

1、将没有音频文件的band文件导入项目中。也就是删掉aiff音频,剩下保存下来。 如下:
1259cf7822214755a9efe4418c7def4d.png

我把删掉音频后的band文件改了名字而已。 

700f20a67bed4685b51d568946cd2312.png

2、将bandfolder.band文件复制一份到沙盒中

NSArray *array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *dir = [array objectAtIndex:0];
NSString *cacheDirectory = dir;NSString* bandfolder = [cacheDirectory stringByAppendingPathComponent:@"bandFolder"];
if(![[NSFileManager defaultManager] fileExistsAtPath:bandfolder]) {BOOL success = [[NSFileManager defaultManager] copyItemAtPath:[[NSBundle mainBundle] pathForResource:@"bandfolder.band" ofType:nil] toPath:bandfolder error:NULL];
}

3、 创建一个分享的存放文件的文件夹

NSString* bandfolderDirectory = [cacheDirectory stringByAppendingPathComponent:@"bandfolderDirectory"];BOOL isDirectory = FALSE;
NSFileManager* fileMgr = [NSFileManager defaultManager];
if (![fileMgr fileExistsAtPath:bandfolderDirectory isDirectory:&isDirectory]){[fileMgr createDirectoryAtPath:bandfolderDirectory withIntermediateDirectories:YES attributes:nil error:nil];
}

4、拷贝一份bandFolder, 将第二步中沙盒的band文件拷贝多一份。然后把你自己的音频转码为aiff

//先拷贝一个bandFolder
NSURL *fileURL = @"换成你的音频URL";
NSString *fileName=[[filePath lastPathComponent] stringByDeletingPathExtension];NSString *copyAtPath = bandfolder;
NSString *copyToPath = [bandfolderDirectorystringByAppendingPathComponent:[NSString stringWithFormat:@"%@.band",fileName]];
[[NSFileManager defaultManager] copyItemAtPath:copyAtPath toPath:copyToPath error:NULL];//然后要把你自己的音频转码为aiff
ExtAudioConverter* converter = [[ExtAudioConverter alloc] init];
converter.inputFile = filePath;
converter.outputFile = [NSString stringWithFormat:@"%@/Media/ringtone.aiff",copyToPath];
converter.outputFileType = kAudioFileAIFFType;
[converter convert];

ExtAudioConverter类github上面搜一下有,附一个别的大佬的链接 

GitHub - Agisight/ExtAudioConverter: iso + simulator

5、最后一步:将band文件分享给库乐队就行了

 //弹出分享框并进行分享
NSArray *items = [NSArray arrayWithObjects:[NSURL fileURLWithPath:copyToPath],nil];
UIActivityViewController *activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
activityViewController.excludedActivityTypes = @[UIActivityTypeAirDrop];// 分享之后的回调
activityViewController.completionWithItemsHandler = ^(UIActivityType  _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) {if (completed) {} else  if(activityError){}
};
[self presentViewController:activityViewController animated:YES completion:^{}];

 二、完整代码

//1.将项目中的bandFolder.band复制一份到沙盒
NSArray *array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *dir = [array objectAtIndex:0];
NSString *cacheDirectory = dir;NSString* bandfolder = [cacheDirectory stringByAppendingPathComponent:@"bandFolder"];
if(![[NSFileManager defaultManager] fileExistsAtPath:bandfolder]) {BOOL success = [[NSFileManager defaultManager] copyItemAtPath:[[NSBundle mainBundle] pathForResource:@"bandfolder.band" ofType:nil] toPath:bandfolder error:NULL];
}//2.创建一个后续分享band文件存放其的文件夹
NSString* bandfolderDirectory = [cacheDirectory stringByAppendingPathComponent:@"bandfolderDirectory"];BOOL isDirectory = FALSE;
NSFileManager* fileMgr = [NSFileManager defaultManager];
if (![fileMgr fileExistsAtPath:bandfolderDirectory isDirectory:&isDirectory]){[fileMgr createDirectoryAtPath:bandfolderDirectory withIntermediateDirectories:YES attributes:nil error:nil];
}//3.拷贝一份band文件,变将你的音频转换为aiff格式。注意:转换的输出路径对应band文件里面的音频路径
//3.1先拷贝一个bandFolder
NSURL *fileURL = @"换成你的音频URL";
NSString *fileName=[[filePath lastPathComponent] stringByDeletingPathExtension];NSString *copyAtPath = bandfolder;
NSString *copyToPath = [bandfolderDirectorystringByAppendingPathComponent:[NSString stringWithFormat:@"%@.band",fileName]];
[[NSFileManager defaultManager] copyItemAtPath:copyAtPath toPath:copyToPath error:NULL];//3.2然后要把你自己的音频转码为aiff
ExtAudioConverter* converter = [[ExtAudioConverter alloc] init];
converter.inputFile = filePath;
converter.outputFile = [NSString stringWithFormat:@"%@/Media/ringtone.aiff",copyToPath];
converter.outputFileType = kAudioFileAIFFType;
[converter convert];//4.最后一步,分享到库乐队
NSArray *items = [NSArray arrayWithObjects:[NSURL fileURLWithPath:copyToPath],nil];
UIActivityViewController *activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
activityViewController.excludedActivityTypes = @[UIActivityTypeAirDrop];// 分享之后的回调
activityViewController.completionWithItemsHandler = ^(UIActivityType  _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) {if (completed) {} else  if(activityError){}
};
[self presentViewController:activityViewController animated:YES completion:^{}];

注意点:就是苹果设置铃声最长只能30s,如果你的音频超过30s,在被自动截取为前30s的音频.建议是先自行裁剪为30s,再将其转为aiff格式,塞入到.band包,再传给库乐队

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/412216.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Clickhouse集群化(一)k8s集群搭建

环境准备: vm 17 pro 有些功能必须pro版本才会提供(https://download.csdn.net/download/weixin_40663313/89677277?spm1001.2014.3001.5501)夸克下载链接 centos 7.9 docker:1.26 k8s:1.21.14 1. 创建虚拟机 …

2022 年高教社杯全国大学生数学建模竞赛-C 题 古代玻璃制品的成分分析与鉴别详解+分类模型Python代码源码

前言 简单介绍一下我自己:博主专注建模四年,参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。参与过十余次数学建模大赛,三次美赛获得过二次M奖一次H奖,国赛二等奖。**提…

游戏引擎详解——图片

图片 图片的格式 图片文件格式pngjpg 纹理压缩格式ETC1/2PVRTCASTC 图片的属性 图片属性解释分辨率宽高像素值(pt),如:1024*1024位深度用来存储像素颜色的值,如RGBA8888,红黄蓝透明度4个维度每个8bit&…

深度解析HarmonyOS SDK实况窗服务源码,Get不同场景下的多种模板

HarmonyOS SDK实况窗服务(Live View Kit)作为一个实时呈现应用服务信息变化的小窗口,遍布于设备的各个使用界面,它的魅力在于将复杂的应用场景信息简洁提炼并实时刷新,在不影响当前其他应用操作的情况下,时…

脑波传感与认知计算的深入探讨

随着神经科学和计算机技术的不断发展,脑波传感与认知计算逐渐成为研究的前沿领域。脑波传感技术可以捕捉人类大脑的电活动,从而解读大脑的思维过程和认知状态;而认知计算则通过模拟人类的思维方式来进行信息处理和决策。这两个领域的结合&…

红蓝对抗,你懂得多少?

红蓝对抗,你懂得多少? “HW行动”是国家应对网络安全问题所做的重要布局之一。“HW行动”从2016年开始,随着我国对网络安全的重视,涉及单位不断扩大,越来越多的单位都加入到HW行动中。2024年HW行动就在眼前&#xff0…

【RPC基础知识】

定义 RPC(Remote Procedure Call) 即远程过程调用,通过名字我们就能看出 RPC 关注的是远程调用而非本地调用。 为什么要 RPC ? 因为,两个不同的服务器上的服务提供的方法不在一个内存空间,所以&#xff…

MVC与设计模式理解-lnmp学习之路

一、MVC 前言: MVC是一种应用架构模式,也可以说是一种业务架构或是一种应用设计思想,用于组织业务逻辑并分离代码的。 MVC组成结构是Model-View-Controller,Model是管控数据层,View是管控视图层,Controlle…

基于矢量光场的光学加工技术

欢迎关注GZH《光场视觉》 摘要:作为光的一个基本属性,偏振、振幅和相位提供的自由度对光场调控具有重要作用。具有空间结构偏振态、振幅和相位分布的矢量光场因其具有不同于传统光场的独特性质而被应用于诸多领域。近年来,时空分布特性更加丰…

合宙LuatOS开发板使用手册——Air700EAQ

EVB-Air700EL&700EY 开发板是合宙通信推出的基于 Air700EL&700EY 模组所开发的, 包含电源,SIM 卡,USB,PCB 天线等必要功能的最小硬件系统。 以方便用户在设计前期对 模块进 行性能评估,功能调试,软…

“面试宝典:高频算法题目详解与总结”

干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…

JavaScript 的进阶概念补充:V8 引擎的垃圾回收机制

JavaScript 的进阶概念补充:V8 引擎的垃圾回收机制 JavaScript 的垃圾回收机制在各大浏览器中实现有所不同,其中 V8 引擎(Google Chrome 和 Node.js 中使用的 JavaScript 引擎)尤为知名。理解 V8 引擎的垃圾回收机制,…

Linux_kernel简介01

--------------------------------------------------------- 力扣专题 --------------------------------------------------------- 一、嵌入式开发 1、ARM的历史 ARM原本含义(Acom RISC Machine)后来Acron公司独立出了ARM部门,成立了ARM公司(Advan…

消费电子钛时代到来!天工股份抢占发展高地,业绩爆发式增长、前景广阔

消费电子“钛时代”正加速到来。 27日凌晨,苹果正式定档iPhone 16系列新品的发布会日期。据悉,本次iPhone 16 Pro系列将全系标配钛金属中框,继续沿用并升级此前在iPhone 15 Pro系列上应用的钛金属材质。 回看去年9月秋季新品发布会&#xf…

VIVADO自定义 IP封装

简介 本章节主要针对VIVAO 2020.2版本做IP自定义封装,其中涉及到IP寄存器读写配置,自定义接口封装等介绍。 IP封装 IP标准自定义步骤一般有创建工程,封装IP,自定义内容,添加自定义库这4个步骤,下面…

音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息

通过FFprobe命令可以显示WAV音频文件每个packet(也称为数据包或多媒体包)的信息: ffprobe -of json -show_packets XXX.wav 输出如下: 其中: 1.codec_type:packet类型,表示该路流是视频还是音…

《机器学习》 基于GANs构建数字图像生成器

文章目录 引言生成对抗网络的基本原理生成对抗网络的数学表达生成对抗网络的应用生成对抗网络的挑战与优化生成对抗网络的实现示例结论:机器学习和ai技术的出现成为了C……SD……N 热榜的爹。 使用机器学习技术对热榜文章进行分析 引言 生成对抗网络(Ge…

macos USB外接键盘ctrl键绑定方法 解决外接USB键盘与mac键盘不一致问题

mac电脑外接USB键盘后我们需要修改一下 ctrl键的绑定后才符合我们的使用习惯,因为标准USB键盘和mac键盘上面的ctrl键是不一样的, mac上面的 command 键 对应我们USB键盘上面的 ctrl 键. 修改方法: 偏好设置 --> 键盘 点击修饰键 后 选择键盘里面选择 USB键盘 ,然后调换…

鸿蒙( Beta5.0版)开发实战:自定义TabBar页签

介绍 本示例主要介绍了TabBar中间页面如何实现有一圈圆弧外轮廓以及TabBar页签被点击之后会改变图标显示,并有一小段动画效果。 效果图预览 使用说明: 依次点击tabBar页面,除了社区图标之外,其它图标往上移动一小段距离。 实现…

【SpringCloud应用框架】GateWay网关

Spring Cloud Alibaba 之初识GateWay网关 文章目录 一、网关介绍二、网关对比三、GateWay基本概念:执行流程: 总结 一、网关介绍 在微服务架构中,一个系统会被拆分为多个微服务。如果没有网关存在,我们只能在客户端记录梅哥为服务…