iOS获取本地音频文件(属性/信息)

本文实例为大家分享了iOS获取本地音频文件的具体代码,供大家参考,具体内容如下

获取本地音频文件地址:

NSString *songsDirectory=MUSIC_FILE_ALL;//沙盒地址
  NSBundle *songBundle=[NSBundle bundleWithPath:songsDirectory];
  NSString *bundlePath=[songBundle resourcePath];

  NSArray *arrMp3=[NSBundle pathsForResourcesOfType:@"mp3" inDirectory:bundlePath];
  for (NSString *filePath in arrMp3) {
    [self.wMp3URL addObject:filePath];
  }

解析音频文件属性:

-(void)mDefineUpControl{
  NSString *filePath = [self.wMp3URL objectAtIndex: 0 ];//随便取一个,说明
  //文件管理,取得文件属性 

  NSFileManager *fm = [NSFileManager defaultManager];
  NSDictionary *dictAtt = [fm attributesOfItemAtPath:filePath error:nil]; 

  //取得音频数据   

  NSURL *fileURL=[NSURL fileURLWithPath:filePath];
  AVURLAsset *mp3Asset=[AVURLAsset URLAssetWithURL:fileURL options:nil]; 

  NSString *singer;//歌手
  NSString *song;//歌曲名 

  UIImage *image;//图片  

  NSString *albumName;//专辑名
  NSString *fileSize;//文件大小
  NSString *voiceStyle;//音质类型
  NSString *fileStyle;//文件类型
  NSString *creatDate;//创建日期
  NSString *savePath; //存储路径 

  for (NSString *format in [mp3Asset availableMetadataFormats]) {
    for (AVMetadataItem *metadataItem in [mp3Asset metadataForFormat:format]) {
      if([metadataItem.commonKey isEqualToString:@"title"]){
        song = (NSString *)metadataItem.value;//歌曲名 

      }else if ([metadataItem.commonKey isEqualToString:@"artist"]){
        singer = (NSString *)metadataItem.value;//歌手
      }
      //      专辑名称
      else if ([metadataItem.commonKey isEqualToString:@"albumName"])
      {
        albumName = (NSString *)metadataItem.value;
      }else if ([metadataItem.commonKey isEqualToString:@"artwork"]) {
        NSDictionary *dict=(NSDictionary *)metadataItem.value;
        NSData *data=[dict objectForKey:@"data"];
        image=[UIImage imageWithData:data];//图片
      } 

    }
  }
  savePath = filePath;
  float tempFlo = [[dictAtt objectForKey:@"NSFileSize"] floatValue]/(1024*1024);
  fileSize = [NSString stringWithFormat:@"%.2fMB",[[dictAtt objectForKey:@"NSFileSize"] floatValue]/(1024*1024)];
  NSString *tempStrr = [NSString stringWithFormat:@"%@", [dictAtt objectForKey:@"NSFileCreationDate"]] ;
  creatDate = [tempStrr substringToIndex:19];
  fileStyle = [filePath substringFromIndex:[filePath length]-3];
  if(tempFlo <= 2){
    voiceStyle = @"普通";
  }else if(tempFlo > 2 && tempFlo <= 5){
    voiceStyle = @"良好";
  }else if(tempFlo > 5 && tempFlo < 10){
    voiceStyle = @"标准";
  }else if(tempFlo > 10){
    voiceStyle = @"高清";
  } 

  NSArray *tempArr = [[NSArray alloc] initWithObjects:@"歌手:",@"歌曲名称:",@"专辑名称:",@"文件大小:",@"音质类型:",@"文件格式:",@"创建日期:",@"保存路径:", nil nil];
  NSArray *tempArrInfo = [[NSArray alloc] initWithObjects:singer,song,albumName,fileSize,voiceStyle,fileStyle,creatDate,savePath, nil nil];
  for(int i = 0;i < [tempArr count]; i ++){
    NSString *strTitle = [tempArr objectAtIndex:i];
    UILabel *titleLab = [[UILabel alloc] initWithFrame:CGRectMake(5, 5+i*30, 16*[strTitle length], 25)];
    [titleLab setText:strTitle];
    [titleLab setTextColor:[WASharedFontStyle mGetSharedFontColor]];
    [titleLab setFont:[UIFont systemFontOfSize:16]];
    [self.wInfoSV addSubview:titleLab]; 

    NSString *strInfo = [tempArrInfo objectAtIndex:i];
    UILabel *infoLab = [[UILabel alloc] initWithFrame:CGRectMake(titleLab.frame.origin.x+titleLab.bounds.size.width+5, 5+i*30, self.view.bounds.size.width-(titleLab.frame.origin.x+titleLab.bounds.size.width+5)-5, 25)];
    [infoLab setText:strInfo];
    [infoLab setTextColor:[WASharedFontStyle mGetSharedFontColor]];
    [infoLab setFont:[UIFont systemFontOfSize:16]];
    [self.wInfoSV addSubview:infoLab]; 

    if(i == [tempArr count]-1){
      [infoLab setFrame:CGRectMake(titleLab.frame.origin.x+titleLab.bounds.size.width+5, 5+i*30, self.view.bounds.size.width-(titleLab.frame.origin.x+titleLab.bounds.size.width+5)-5, 30*4)];
      [infoLab setLineBreakMode:NSLineBreakByWordWrapping];
      [infoLab setFont:[UIFont systemFontOfSize:12]];
      [infoLab setNumberOfLines:0];
    } 

    [self.wInfoSV setContentSize:CGSizeMake(self.view.bounds.size.width, i*45)]; 

  } 

} 

附图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • IOS中微信小程序播放缓存的音频文件的方法

    很多时候我们都想把数据预先缓存到本地,节省带宽.但是最近在处理微信小程序播放缓存到本地的音频文件的时候,遇到一些小问题,然后对于安卓和IOS需要采用不同的播放策略. 首先,如果哪怕用audio标签来播放在线的音频文件,假如服务端没有实现断点续传,IOS是无法播放的,这个需要注意. 对于缓存在小程序的音频(wx.saveFile(OBJECT)保存的音频),IOS只能通过播放背景音乐的接口播放,其它播放方法都没有成功实践,而对于安卓,内部 audio 上下文 innerAudioContext 对

  • 详解iOS应用中播放本地视频以及选取本地音频的组件用法

    MPMoviePlayerControlle播放本地视频 MPMoviePlayerControlle与AVAudioPlayer有点类似,前者播放视频,后者播放音频,不过也有很大不同,MPMoviePlayerController 可以直接通过远程URL初始化,而AVAudioPlayer则不可以.不过大体上用起来感觉差不多.废话少说进入体验. 格式支持:MOV.MP4.M4V.与3GP等格式,还支持多种音频格式. 首先你得引入 MediaPlayer.framework.然后在使用到MPMo

  • 小程序ios音频播放没声音问题的解决

    小程序提供了录音和播放音频的能力,从基础库 1.6.0 开始支持了wx.getRecorderManager(),录音都采用wx.getRecorderManager()提供的api,播放音频文件采用wx.createInnerAudioContext()提供的api 导入录音和播放音频功能 const recorderManager = wx.getRecorderManager(); // 录音功能 const innerAudioContext = wx.createInnerAudioC

  • iOS中的音频服务和音频AVAudioPlayer音频播放器使用指南

    AudioServicesPlaySystemSound音频服务 对于简单的.无混音音频,AVAudio ToolBox框架提供了一个简单的C语言风格的音频服务.你可以使用AudioservicesPlaySystemSound函数来播放简单的声音.要遵守以下几个规则: 1.音频长度小于30秒 2.格式只能是PCM或者IMA4 3.文件必须被存储为.caf..aif.或者.wav格式 4.简单音频不能从内存播放,而只能是磁盘文件 除了对简单音频的限制外,你对于音频播放的方式也基本无法控制.一旦音

  • 解决ios微信下vue项目组件切换并自动播放音频问题

    最近在做一个英语答题项目 , 项目需求是通过答题取的成绩 , 答题的题型是分为 , 听音选图 , 看图选词 , 和填空题 . 项目总共分为了3个页面 , 开始页 ,答题页 和结束页面 ,答题页关于每种题型 , 我做了相应的组件 , 每次切换题目的时候 ,显示对应的的组件 , 要求听音选图的时候会自动播放音频 . 惯例 , ios下的safari和微信内置浏览器都不支持audio的自动播放 , 通常的解决方案都是通过 document.addEventListener('WeixinJSBridg

  • iOS开发中音频视频播放的简单实现方法

    前言 我们在平时的iOS开发中,音视频的播放有很多种,目前系统的自带的都属于 AVFoundation 框架,更加接近于底层,所以灵活性很强,更加方便自定义 还有就是第三方音视频视频播放,特点是功能强大,实现简单,支持流媒体,下面来逐一介绍,给大家参考学习,下面来一起看看详细的介绍吧. 播放系统音效或者短音效 注意: 这里的资源长度最多30秒 资源必须在 Target --> Build Phases --> Copy Bundle Resources 引入资源文件,否则获取不到文件 if l

  • iOS使用音频处理框架The Amazing Audio Engine实现音频录制播放

    iOS 第三方音频框架The Amazing Audio Engine使用,实现音频录制.播放,可设置配乐. 首先看一下效果图: 下面贴上核心控制器代码: #import "ViewController.h" #import <AVFoundation/AVFoundation.h> #import "HWProgressHUD.h" #import "UIImage+HW.h" #import "AERecorder.h&

  • iOS开发中音频工具类的封装以及音乐播放器的细节控制

    一.控制器间数据传递 两个控制器之间数据的传递 第一种方法: 复制代码 代码如下: self.parentViewController.music=self.music[indexPath.row]; 不能满足 第二种做法:把整个数组传递给它 第三种做法:设置一个数据源,设置播放控制器的数据源是这个控制器.self.parentViewController.dataSource=self;好处:没有耦合性,任何实现了协议的可以作为数据源. 第四种做法:把整个项目会使用到的音频资源交给一个工具类去

  • iOS开发实现音频播放功能

    音频播放 1.介绍 - 功能介绍 用于播放比较长的音频.说明.音乐 ,使用到的是AVFoundation - 框架介绍 * AVAudioPlayer * 初始化: 注意 : (3)必须声明全局变量的音乐播放对象.或者是属性的音乐播放对象  才可以播放 (4)在退出播放页面的时候 一定要把播放对象置空  同时把delegate置空 导入框架:#import <AVFoundation/AVFoundation.h> 声明全局变量 @interface ViewController ()<

  • 详解iOS App中调用AVAudioPlayer播放音频文件的用法

    要给工程中添加音频,首先要导入音频的框架 AVFoundation.framework 然后新建一个类继承于UIViewController, 我这里就叫FirstVC. 首先在 AppDelegate.m中初始化根视图 复制代码 代码如下: #import "AppDelegate.h" #import "FirstVC.h" @implementation AppDelegate - (void)dealloc {     [_window release];

随机推荐