首页 > 其他分享 >音频 caf转MP3 到上传服务端

音频 caf转MP3 到上传服务端

时间:2023-05-10 11:56:32浏览次数:46  
标签:audioRecorder nil audioPlayer manager caf NSString MP3 音频 服务端

今天一个录制音频到服务端的功能

音频录制  

导入头文件

#import <CoreMedia/CoreMedia.h>

#import <AVFoundation/AVFoundation.h>

两个对象

@property (nonatomic, strong) AVAudioRecorder *audioRecorder;//  录音对象

@property (nonatomic, strong) AVAudioPlayer *audioPlayer;// 播放对象

@property (nonatomic ,strong) NSURL *recorderUrl;// acf本地文件url

@property (nonatomic ,strong) NSURL *mp3Url;// MP3 文件url

 

 //设置音频会话

    AVAudioSession *session = [AVAudioSession sharedInstance];//    获取音频会话的实例

    NSError *sessionError;

    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];//    设置音频会话类别

 

    if (session == nil) {

        NSLog(@"创建音频会话失败  %@",[sessionError description]);

    }else{

        [session setActive:YES error:nil];

    }

 

    _recorderUrl = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingString:@"这里自己写文件名称就行"]];

    NSMutableDictionary *recordict = [NSMutableDictionary dictionary];

    [recordict setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];

    [recordict setValue:[NSNumber numberWithFloat:11025.0] forKey:AVSampleRateKey];

    [recordict setValue:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey];

    [recordict setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];

    [recordict setValue:[NSNumber numberWithInt:AVAudioQualityHigh] forKey:AVEncoderAudioQualityKey];

 

    _audioRecorder = [[AVAudioRecorder alloc] initWithURL:_recorderUrl settings:recordict error:nil];

    _audioRecorder.delegate = self;

    _audioRecorder.meteringEnabled = YES;

    [_audioRecorder prepareToRecord];

    [_audioRecorder record];

    _audioPlayer = nil;

 

录制成功以后播放本地音频

 [_audioRecorder stop];

_audioRecorder = nil;

    NSError *playerError;

    _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:_recorderUrl error:&playerError];

    if (_audioPlayer == nil) {

        NSLog(@"创建录音失败 %@",[_audioPlayer description]);

    }

    _audioPlayer.delegate = self;

    NSLog(@"播放录音");

    if ([_audioPlayer isPlaying]) {//   如果在播放状态下

        [_audioPlayer pause];

    }else{

        NSError *playerError;

        if (_audioPlayer == nil) {

            NSLog(@"创建录音失败 %@",[playerError description]);

        }

        NSLog(@"正在播放");

        [_audioPlayer play];

    }

到这里 播放没问题 就上传

 [_audioRecorder stop];

_audioRecorder = nil;

[_audioPlayer stop];

这里转MP3

需要导入 lame静态库 这个转MP3

参考文章:https://www.jianshu.com/p/c1bdab0ddf59

https://www.jianshu.com/p/d0645a6d8834

 这里参考上面文章 

上传到服务端

// 上传音频

+ (void)uploadRecordWithURLString:(NSString *)URLString

                 parameters:(id)parameters

                 uploadData:(NSData *)uploadData

                 uploadName:(NSString *)uploadName

                    success:(void (^)(id responseObject))success

                    failure:(void (^)(NSError *error))failure;

 

#pragma mark -- 上传音频 --

这里data 

 NSData *data = [[NSData alloc] initWithContentsOfFile:[NSHomeDirectory() stringByAppendingFormat:@"/Documents/%@", @"Mp3File.mp3"]];//就是本地存的MP3 文件

 

+ (void)uploadRecordWithURLString:(NSString *)URLString parameters:(id)parameters uploadData:(NSData *)uploadData uploadName:(NSString *)uploadName success:(void (^)(id _Nonnull))success failure:(void (^)(NSError * _Nonnull))failure {

    NSString *urlStr = [NSString stringWithFormat:@"%@%@",NETWORKINGURL,URLString];

    

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    manager.requestSerializer = [AFJSONRequestSerializer serializer];

    manager.responseSerializer = [AFJSONResponseSerializer serializer];

    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

    [manager.requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];

    [manager.requestSerializer setValue:[[NSUserDefaults standardUserDefaults] objectForKey:@"token"] forHTTPHeaderField:@"token"];

    

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    formatter.dateFormat = @"yyyyMMddHHmmss";

    NSString *string = [formatter stringFromDate:[NSDate date]];

    NSString *fileName = [NSString stringWithFormat:@"%@.mp3",string];

    [manager POST:urlStr parameters:parameters headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {

        [formData appendPartWithFileData:uploadData name:uploadName fileName:fileName mimeType:@"application/octet-stream"];

    } progress:^(NSProgress * _Nonnull uploadProgress) {

        

    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

        if (success) {

            success(responseObject);

        }

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        if (failure) {

            failure(error);

        }

    }];

    

}

 

搞定 记录下来 

 

标签:audioRecorder,nil,audioPlayer,manager,caf,NSString,MP3,音频,服务端
From: https://www.cnblogs.com/xiaodeng90/p/17387549.html

相关文章

  • 笛卡尔树Kattis-Scaffolding
    笛卡尔树Kattis-Scaffolding注释已经写在代码里了,注意下建树就行#include<bits/stdc++.h>/*先对题意进行分析,每次带m根柱子,进行x轮,每次往左/右/上搭建,问x的最小值?一开始在想,怎么就会有最小值呢?后来发现题目说不能往下走我们还是把图看成一棵树就是说你可以向两个子节点去走,......
  • socket服务端
    Socket实现在接收到不同的消息时启动PeriodicCallback返回不同的数据,并且关闭时只关闭其中某一个定时器首先,你需要对MainHandler进行修改,添加一个字典callbacks,用于保存每个消息对应的回调函数和其它相关信息,例如:importtornado.ioloopimporttornado.webclassMainHand......
  • COMP3425数据挖掘
    COMP3425辅导、辅导c/c++,Python编程COMP3425andCOMP8410DataMiningS12023Assignment2:DescriptionofDataDataandMetadataThedatasuppliedfortheassignmentarisesfromTheAustralianDataArchive’sANUPollDataverse[1].Asastudentofthecourse,you......
  • COMP30023 远程程序调用
    ​ COMP30023Project2RemoteProcedureCallOutdate:28April2023Duedate:Nolaterthan5pmMonday22May,2023AESTWeight:15%ofthefinalmark1ProjectOverviewRemoteProcedureCall(RPC)isacrucialtechnologyindistributedcomputingthate......
  • SVN服务端使用说明(二)
    服务端使用说明服务端安装完成后,进行创建用户,新建Repositiories等 项目描述Repositories仓库,可分不同文件夹进行存储项目。Users用户,可新增,删除,设置密码等Groups用户组,对不同用户可进行组划分Jobs计划任务,属于企业版高级功能(本文档暂不涉及),可定时备份仓库文件。1)创建用......
  • 获取WebView发送给服务端的Accept-Language请求头
    1,WebView没有提供获取Accept-Language请求头的接口2,WebView的publicWebResourceResponseshouldInterceptRequest(WebViewview,WebResourceRequestrequest){}回调中WebResourceRequest不包含Accept-Language请求头,即使客户端向服务器端发送的请求中包含该请求头3,javascr......
  • PostgreSQL 12 文档: PostgreSQL 服务端程序
    PostgreSQL服务器应用这一部分包含PostgreSQL服务器应用和支持工具的参考信息。这些命令只在数据库服务器所在的主机上运行才有用。其他工具程序在PostgreSQL客户端应用中列出。目录initdb —创建一个新的PostgreSQL数据库集簇pg_archivecleanup —清理PostgreSQL WAL......
  • QQ和微信amr转mp3
    微信和QQ导出的amr音频文件,大家可以发现用一般播放器都是无法正常播放的。原因是虽然音频格式是amr,但却不是标准amr编码的,而是采用了Silkv3音频编码,导致很多播放器都播放不了。本工具可以对此类amr进行单个文件快速播放或批量格式转换成MP3。下载:链接:https://pan.baidu.com/s......
  • 魔兽服务端编译部署NPCBots和机器人模块教程
    魔兽服务端编译部署NPCBots和机器人模块教程大家好,我是艾西。在平时自己一个人玩魔兽的时候是不是会比较无聊,因为游戏机制或副本难度自己一个人无法进行快乐的玩耍。今天艾西教大家编译部署NPCBots和Al机器人模块,直接一个人玩魔兽也不孤单首先到GIT去下载ai机器人以及bots模块解压......
  • 魔兽世界服务端自定义添加NPC教程
    魔兽世界自定义NPC教程大家好,我是艾西今天跟大家聊一下自定义NPC,自定义NPC可以添加自己想要售卖的物品以及定价等可以更好的将一个游戏设定以及游戏的拓展性有质的提升creature表是游戏所有生物人物等表格Creature_template是所有生物模板,根据生物模板可以创建很多的生物。我们在某......