AFSoundManager

iOS audio playing (both local and streaming) and recording made easy through a complete and block-driven Objective-C class. AFSoundManager uses AudioToolbox and AVFoundation frameworks to serve the audio. You can pick a local file or you can use a URL to stream the audio, the choice is up to you.
这是一个用block方式编写的简单易用的iOS音频播放(支持本地与流媒体方式) 以及录制的类。AFSoundManager使用了AudioToolbox、AVFoundation框架来处理音频。你可以使用一个本地的文件,或者 是一个网络上的URL流媒体音频,怎么用取决于你呢。

Installation
AFSoundManager is available on CocoaPods so you can get it by adding this line to your Podfile:
AFSoundManager支持CocoaPods,你可以添加以下一句话到Podfile中来使用:
pod 'AFSoundManager'
If you don't use CocoaPods, you will have to import these files into your project:
如果你不想使用CocoaPods,你可以导入以下几个头文件即可:
AFSoundManager.h
AFSoundManager.m
AFAudioRouter.h
AFAudioRouter.m
Also, you need to import the AudioToolbox framework and te AudioFoundation framework.
当然,你需要引入AudioToolbox与AudioFoundation框架。
Usage
First of all, make sure that you have imported the main class into the class where you are going to play audio.
首先,确保在你要使用的地方引入了以下头文件:
#import "AFSoundManager.h"
Then, you only need to call one method to start playing your audio.
然后,你只需要调用一个方法就可以播放音频了。
Local playing
If you need to play a local file, call -startPlayingLocalFileWithName:atPath:withCompletionBlock:. If you want to use the default path, just set it as nil.
如果你想播放以下本地的文件,调用-startPlayingLocalFileWithName:atPath:withCompletionBlock:方法,如果你想使用默认的路径,只需要将path设置成nil即可。
Example:
例如:
[[AFSoundManager sharedManager] startPlayingLocalFileWithName:@"filename.mp3" atPath:nil withCompletionBlock:^(int percentage, CGFloat elapsedTime, CGFloat timeRemaining, NSError *error) {
if (!error)
//This block will be fired when the audio progress increases in 1%
} else {
//Handle the error
}
}];
Audio streaming
For remote audio, call -startStreamingRemoteAudioFromURL:andBlock:
如果要播放流媒体,调用-startStreamingRemoteAudioFromURL:andBlock:
Example:
例子:
[[AFSoundManager sharedManager] startStreamingRemoteAudioFromURL:@"http://www.example.com/audio/file.mp3" andBlock:^(int percentage, CGFloat elapsedTime, CGFloat timeRemaining, NSError *error) {
if (!error)
//This block will be fired when the audio progress increases in 1%
} else {
//Handle the error
}
}];
Control
If you need to pause, resume or stop the current playing, guess what, there's a method for that!
如果你想要暂停,恢复或者停止当前播放的音频,猜猜怎么弄?用以下方法即可!
[[AFSoundManager sharedManager]pause];
[[AFSoundManager sharedManager]resume];
[[AFSoundManager sharedManager]stop];
[[AFSoundManager sharedManager]restart];
For going back or forward, you have to specify the second where to continue playing the audio by calling -moveToSecond:
如果要快进或者倒退,你需要指定在什么地方来继续播放,调用方法-moveToSecond:
For example, if you need to move the audio to the second 288, call
例如,你需要将音频快进到288s,调用
[[AFSoundManager sharedManager]moveToSecond:288];
If you are using a UISlider, for example, and you need to work with values between 0.000000 and 1.000000, don't you worry, we got it:
如果你想用一个UISlider,其取值范围是介于0.00000与1.00000之间,不用急,你可以这么用:
[[AFSoundManager sharedManager]moveToSection:0.345680]; //That will move the audio to the 34.568% of its total progress
You can also change the speed rate of the playing.
你也可以修改播放的速度。
[[AFSoundManager sharedManager]changeSpeedToRate:2.0];
The normal rate would be 1.0, while the half-speed playback would be 0.5 and the double speed playback 2.0
默认的播放速度是1.0,你也可以让播放速度变快(设置成2.0)或者是播放速度变慢(设置成0.5)
In order to change the volume, call -changeVolumeToValue: by passing a decimal number between 0.000000 (mute) and 1.000000 (maximum volume). Example:
修改音量的话,调用-changeVolumeToValue:,你传入的值介于0.00000-1.00000即可:
[[AFSoundManager sharedManager] changeVolumeToValue:0.750000]; //This will put the volume at 75%
Playing status
In order to get noticed of the playing status changes, you need to implement theAFSoundManagerDelegate by adding it to your class, just like other delegates.
为了获取到播放状态的变更,你需要实现theAFSoundManagerDelegate代理,就像使用其他代理方法一样。
Then, just implement the currentPlayingStatusChanged: method in the class you want to get notified about the status changes in.
然后,你只需要实现以下的方法currentPlayingStatusChanged:,在这个方法里面,你可以获取到状态值的变化。
-(void)currentPlayingStatusChanged:(AFSoundManagerStatus)status {
switch (status) {
case AFSoundManagerStatusFinished:
//Playing got finished
break;
case AFSoundManagerStatusPaused:
//Playing was paused
break;
case AFSoundManagerStatusPlaying:
//Playing got started or resumed
break;
case AFSoundManagerStatusRestarted:
//Playing got restarted
break;
case AFSoundManagerStatusStopped:
//Playing got stopped
break;
}
}
Handle the change in each case.
你可以在每种状态中获取到事件。
Background playing
If you want to enable background playing, make sure you have Background Modes enabled on your project, under the Capabilities section:
如果你想要支持后台播放,确保你已经开启了后台播放,请在Capabilities这个地方进行设置:
Also, add this information to your info.plist file:
然后,在你的info.plist文件中进行对应的设置:
Output manage
AFSoundManager also lets you choose which device do you want to use to play the audio. I mean, even if you have your headphones plugged in, you can force the audio to play on the built-in speakers or play it through the headphones.
AFSoundManager支持让你选择用什么设备来播放音频,我的意思是,即使你插入了耳机,你也可以强制用你的喇叭来播放音频:
If the headphones (or any external speaker) are plugged in and you want to play it on the built-in speakers, call:
如果耳机插入了(或者是其他外放设备),这时候你还是想用内置的喇叭,调用:
[[AFSoundManager sharedManager] forceOutputToBuiltInSpeakers];
If you want to play it through the default device (in this case the headphones or the external speaker) call
如果你想使用默认的设备(这种情况下的意思是外部设备),调用:
[[AFSoundManager sharedManager] forceOutputToDefaultDevice];
And if you want to check if the headphones, or a external speaker, are currently plugged in on the device, check it with -areHeadphonesConnected. Example:
如果你想检测一下这个当前外部设备时候已经插入进来,用这个方法来检测:
if ([[AFSoundManager sharedManager] areHeadphonesConnected]) {
//Headphones connected
} else {
//Headphones NOT connected
}
Recording audio
Start recording audio from the device's microphone is easy peasy!
从设备录音是非常简单的呢!
[[AFSoundManager sharedManager] startRecordingAudioWithFileName:@"recording" andExtension:@"mp3" shouldStopAtSecond:25];
If you don't want recording to stop automatically, set shouldStopAtSecond as 0 or nil.
如果你不想录音的时候自动停止,将shouldStopAtSecond设置成0或者nil。
Control the recording
AFSoundManager let's you perform several actions with your current recording:
AFSoundManager给你提供了几种方法来控制当前的音频录制:
AFSoundManager
[[AFSoundManager sharedManager] pauseRecording]; // Pauses the current recording
[[AFSoundManager sharedManager] resumeRecording]; // Resumes the current recording (if it's paused)
[[AFSoundManager sharedManager] stopAndSaveRecording]; // Stops the current recording and closes the file
[[AFSoundManager sharedManager] deleteRecording]; // Delete the current recording (perform this before stoping it)
Lastly, to get the current recording duration, call -timeRecorded which will return a NSTimeInterval object.
最后,如果要获取当前的录音的时间,调用-timeRecorded这个方法,他会给你返回NSTimeInterval的对象。
License
AFSoundManager is under MIT license so feel free to use it!
AFSoundManager支持MIT协议,所以,你可以免费的使用!
Author
Made by Alvaro Franco. If you have any question, feel free to drop me a line at alvarofrancoayala@gmail.com
作者是Alvaro Franco。有任何问题, 给我发邮件( alvarofrancoayala@gmail.com )吧。
AFSoundManager的更多相关文章
- [翻译] AFSoundManager
AFSoundManager iOS audio playing (both local and streaming) and recording made easy through a comple ...
随机推荐
- 类库项目如何既能支持netcore2.0,也能支持net4.5
手动更改项目配置 .csporj 中的代码 <TargetFramework>netcoreapp2.</TargetFramework> 改成 <TargetFrame ...
- Dinic算法----最大流常用算法之一
——没有什么是一个BFS或一个DFS解决不了的:如果有,那就两个一起. 最大流的$EK$算法虽然简单,但时间复杂度是$O(nm^2)$,在竞赛中不太常用. 竞赛中常用的$Dinic$算法和$SAP$, ...
- 旋转/非旋转treap的简单操作
treap(树堆) 是在二叉搜索树的基础上,通过维护随机附加域,使其满足堆性质,从而使树相对平衡的二叉树: 为什么可以这样呢? 因为在维护堆的时候可以同时保证搜索树的性质: (比如当一棵树的一个域满足 ...
- Nodejs + express + ejs
特性 <% %> 用于控制流 <%= %> 用于转义的输出 (会对数据字符进行转义) // 数据源 // app.js var tem={ title:"我是中间部分 ...
- html5 移动端开发
移动端开发总结 目录 1.手机与浏览器 2.Viewport(视窗) 3. 媒体查询 4.px,em,rem,pt 5.设备像素比devicePixelRatio 6.移动web中的图标及字体 ...
- springmvc中Controller前端控制器的映射与返回数据,以及异常处理
.@RequestMapping映射 该注解中存的是映射路径的字符串 1.1 value的值是一个数组,也就是说可以定义多个访问路径,同时“.action”可以省略,前端控制器中主要查找主体部分.注意 ...
- 弧形菜单2(动画渐入)Kotlin开发(附带java源码)
弧形菜单2(动画渐入+Kotlin开发) 前言:基于AndroidStudio的采用Kotlin语言开发的动画渐入的弧形菜单...... 效果: 开发环境:AndroidStudio2.2.1+gra ...
- 5 使用ip代理池爬取糗事百科
从09年读本科开始学计算机以来,一直在迷茫中度过,很想学些东西,做些事情,却往往陷进一些技术细节而蹉跎时光.直到最近几个月,才明白程序员的意义并不是要搞清楚所有代码细节,而是要有更宏高的方向,要有更专 ...
- Apache的主要目录和配置文件详解
一.Apache 主要配置文件注释Apache的主配置文件:/etc/httpd/conf/httpd.conf默认站点主目录:/var/www/html/Apache服务器的配置信息全部存储在主配置 ...
- HBuilder设置APP状态栏
一. 前言 状态栏就是手机屏幕最顶部的区域,包括了:信号.运营商.电量等信息.通常APP都有属于自己的色调风格,为了达到整体视觉美观,通常会设置状态栏和标题栏的色调设置成一致. 图例: 二.状态栏状态 ...