iPhone播放音乐
来源:http://blog.csdn.net/htttw/article/details/7842295
iPhone播放音乐
今天我们简要介绍如何在iPhone中播放音乐:
强烈建议你参考官方文档(需要登录):
1.
打开XCode,新建一个Window-based Application,项目名称是MusicPlayer:


2.
打开MainWindow.xib,按下图加入控件:

其中,最上面是两个Label,左边的Current(sec)始终不变,右边的0显示当前已播放的时间,下面是一个Slider,类似与一般播放器的进度条,再下面是音量调节的Slider,它们的min都是0.0,max都是1.0。最底下是两个Button。
3.
由于播放声音需要用到AVFoundation.framework,因此我们将它加入到我们的工程中:

右击Frameworks,选择Add/Existing Frameworks,加入AVFoundation:

4.
打开MusicPlayerAppDelegate.h,修改如下:
- //
- // MusicPlayerAppDelegate.h
- // MusicPlayer
- //
- // Created by HuTao on 8/8/12.
- // Copyright __MyCompanyName__ 2012. All rights reserved.
- //
- #import <UIKit/UIKit.h>
- #import <AVFoundation/AVFoundation.h>
- @interface MusicPlayerAppDelegate : NSObject <UIApplicationDelegate>
- {
- UIWindow * window;
- IBOutlet UIButton * btnPlay;
- IBOutlet UILabel * labelVolume;
- IBOutlet UILabel * labelCurrentTime;
- IBOutlet UISlider * sliderCurrentTime;
- NSTimer * playTimer;
- AVAudioPlayer * player;
- }
- @property (nonatomic, retain) IBOutlet UIWindow * window;
- @property (nonatomic, retain) IBOutlet UIButton * btnPlay;
- @property (nonatomic, retain) IBOutlet UILabel * labelVolume;
- @property (nonatomic, retain) IBOutlet UILabel * labelCurrentTime;
- @property (nonatomic, retain) IBOutlet UISlider * sliderCurrentTime;
- -(IBAction)soundStartOrPause:(id)sender;
- -(IBAction)soundStop:(id)sender;
- -(IBAction)volumeChanged:(id)sender;
- -(IBAction)currentTimeChanged:(id)sender;
- -(void)updateSoundAt:(float)percent;
- -(void)updateCurrentTime;
- -(void)initPlayer;
- @end
首先,加入:
- #import <AVFoundation/AVFoundation.h>
其次:
btnLabel,labelVolume,labelCurrentTime,sliderCurrentTime都是控件对应的Outlet:
btnLabel:在点击了Start按钮后文本需要变成Pause,所以我们给Button也增加了一个Outlet;
labelVolume,labelCurrentTime:在滑动Slider时对应的Label也需要变化以反应当前值;
sliderCurrentTime:歌曲播放时需要通过Slider来反应当前已播放的时间,因此Slider也需要一个Outlet。
之后的playerTimer会每一定时间运行一次,根据当前已播放的时间更新进度条;AVAudioPlayer是AVFoundation提供的播放音乐的一个类。
之后的四个IBAction分别是:按下Start按钮;按下Stop按钮;滑动音量的Slider;滑动已播放时间的Slider对应的Action。
5.
打开MusicPlayerAppDelegate.m,修改如下:
- //
- // MusicPlayerAppDelegate.m
- // MusicPlayer
- //
- // Created by HuTao on 8/8/12.
- // Copyright __MyCompanyName__ 2012. All rights reserved.
- //
- #import "MusicPlayerAppDelegate.h"
- @implementation MusicPlayerAppDelegate
- @synthesize window;
- @synthesize btnPlay;
- @synthesize labelVolume;
- @synthesize labelCurrentTime;
- @synthesize sliderCurrentTime;
- #pragma mark -
- #pragma mark Application lifecycle
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- {
- //初始化AVAudioPlayer
- [self initPlayer];
- [window makeKeyAndVisible];
- return YES;
- }
- -(void)initPlayer
- {
- NSString * path = [[NSBundle mainBundle] pathForResource:@"北京欢迎你" ofType:@"mp3"];
- //判断是否找到该音乐文件
- if (path)
- {
- NSLog(@"Init sound");
- //用path路径初始化AVAudioPlayer
- player = [[AVAudioPlayer alloc]initWithContentsOfURL:[[NSURL alloc]initFileURLWithPath:path]error:nil];
- //初始化播放器
- [player prepareToPlay];
- //设置播放循环次数:如果numberOfLoops为负数 音频文件就会一直循环播放下去
- player.numberOfLoops = -1;
- //设置音频音量:volume的取值范围在[0.0f, 0.1f]之间
- player.volume = 0.5f;
- //将当前播放进度调为0
- [self updateSoundAt:0.0f];
- }
- }
- -(void)updateSoundAt:(float)percent
- {
- float atTime = (player ? player.duration * percent : 0.0f);
- NSString * time = [NSString stringWithFormat:@"%d", (int)atTime];
- labelCurrentTime.text = time;
- sliderCurrentTime.value = percent;
- }
- -(IBAction)soundStartOrPause:(id)sender
- {
- //点击Start按钮后开始播放音乐
- if(player)
- {
- UIButton * btn = (UIButton *)sender;
- if(![player isPlaying])
- {
- NSLog(@"Start sound");
- [player play];
- [btn setTitle:@"Pause" forState:UIControlStateNormal];
- if(!playTimer)
- {
- playTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateCurrentTime) userInfo:nil repeats:YES];
- }
- }
- else
- {
- NSLog(@"Pause sound");
- [player pause];
- [btn setTitle:@"Start" forState:UIControlStateNormal];
- }
- }
- }
- -(void)updateCurrentTime
- {
- [self updateSoundAt:1.0 * player.currentTime / player.duration];
- }
- -(IBAction)soundStop:(id)sender
- {
- //停止播放声音
- if(player)
- {
- NSLog(@"Stop sound");
- player.currentTime = 0;
- [player stop];
- [btnPlay setTitle:@"Start" forState:UIControlStateNormal];
- [self updateSoundAt:0.0f];
- }
- }
- -(IBAction)volumeChanged:(id)sender
- {
- UISlider * slider = (UISlider *)sender;
- NSString * value = [[NSString alloc]initWithFormat:@"%d%%", (int)(slider.value * 100)];
- labelVolume.text = value;
- player.volume = slider.value;
- [value release];
- }
- -(IBAction)currentTimeChanged:(id)sender
- {
- UISlider * slider = (UISlider *)sender;
- int time = (player ? slider.value * player.duration : 0);
- player.currentTime = time;
- [self updateSoundAt:slider.value];
- }
- - (void)dealloc
- {
- [window release];
- [btnPlay release];
- [labelVolume release];
- [labelCurrentTime release];
- [sliderCurrentTime release];
- [super dealloc];
- }
- @end
有几点说明:
1.先将要播放的音乐加入到Resouces中;
2. playTimer定时器每0.5秒运行一次,更新当前的进度条;
6.
下面要开始将控件和IBOutlet以及IBAction相连接了:
(a)
打开MainWindow.xib,按住Ctrl键,鼠标从Music Player Delegate上拖动到相应的Label上,将它和IBOutlet相连接:

要注意的是不要忘了连接btnStart!一共要连两个Slider,两个Label和一个Button。
(b)
右键Button,选择Touch Up Inside,将后面的小圆圈拖动到Music Player Delegate上,连接相应的IBAction:

要注意的是Slider需要连接ValueChanged事件:

7.
运行结果如下:

最后我把代码也上传上来了:
http://download.csdn.net/detail/htttw/4484442
完成!
iPhone播放音乐的更多相关文章
- iOS开发系列--扩展--播放音乐库中的音乐
众所周知音乐是iOS的重要组成播放,无论是iPod.iTouch.iPhone还是iPad都可以在iTunes购买音乐或添加本地音乐到音乐 库中同步到你的iOS设备.在MediaPlayer.fram ...
- iOS8 用AVAudioPlayer播放音乐(Swift)
AVAudioPlayer 类提供了播放音频文件的功能,在本次教程中,我们将对一个音乐文件进行播放暂停和停止操作,此外还会显示标题和播放时间.本次教程使用iOS8和Xcod6.3.1 打开Xcode创 ...
- pcDuino-V2利用madplay播放音乐
在pcDuino的UBUNTU系统下,打开控制台,利用apt-get来下载madplay软件. sudo apt-get install madplay 播放音乐: madplay xxx.mp3 x ...
- matlab播放音乐
最近在做计算,写了一些matlab代码,脑壳还疼,所以决定发挥一下逗B精神,写一个程序玩一下. 想了想,既然写代码的时候喜欢听歌,而且我的电脑打开网易音乐的速度巨慢(不知道为什么..),那些一个程序直 ...
- go语言让windows发出声音,或者播放音乐
go语言让windows发出声音,或者播放音乐的例子:会发出alert警告的声音 ( 这是我应群员的求助写的, 如果你需要了解其中的调用原理或过程 或更多go语言调用win32api的资料,加群: 2 ...
- Inno调用dll --- 实现背景播放音乐
Inno 播放音乐可以调用系统api函数mciSendString来实现,而mciSendString函数存在C:\Windows\System32\winmm.dll中,因此最终只要成功从该dll文 ...
- 【分享】4412开发板ubuntu 12.0.4播放音乐没有声音解决方法
转自迅为论坛:http://bbs.topeetboard.com 准备工作 1.下载 vim 在命令行上输入 apt-get install vim 下载 vim 2.输入 vim /etc/hos ...
- 在Linux终端命令行下播放音乐的命令(Ubuntu)
现在的 Linux 桌面已经发展的很好了,在桌面下播放音乐操作起来也很简单.那么我们还记得在桌面不是那么好的时候我们是怎么播放音乐的么?哎,我是想不起来了,实在是太难了. 不过现在我们可以先安装一个小 ...
- C# 调用系统winmm.dll 播放音乐wav mp3
using System.Runtime.InteropServices;//放wav public partial class frmMain : Form { 系统放 播放音乐 wav mp3 [ ...
随机推荐
- ABBYY是怎么自定义主窗口的
启动 ABBYY FineReader OCR文字设别软件时,将打开其主窗口.同时将显示任务窗口,可以启动内置或自定义自动化任务. 主窗口显示目前打开的 ABBYY FineReader 文档. ● ...
- 在 SVG 中添加交互性
原文地址:http://www.ibm.com/developerworks/cn/xml/x-svgint/ SVG 中的交互性可以分为三个领域 -- 链接.事件和脚本.本文将依次讨论这三个领域. ...
- unity中的欧拉角
unity中欧拉角用的是heading - pitch -bank系统(zxy惯性空间旋转系统):当认为旋转顺序是zxy时,是相对于惯性坐标系旋转.当认为旋转顺序是yxz时,是相对于物体坐标系旋转. ...
- RSA openssl_public_encrypt false
这个问题困扰了我好久,最后发现,原来这个函数只能最大长度为117个字节.如果加密的串超过这个长度,就会返回false.
- 搭建EF6.0+MVC4搭建框架——之路由配置
为了适应项目需求,需要将前后台的控制器和视图等文件分开,便于修改和维护: 方案一:在原有的Controller下新增Admins文件夹用于放置后台控制器文件: 控制器文件目录如下图: 视图文件目录:
- SQL常见的可优化点
# 索引相关 # ################################################### 1. 查询(或更新,删除,可以转换为查询)没有用到索引 这是最基础的步骤,需要 ...
- StringBuilder与StringBuffer的区别(转)
相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...
- js正则及常用方法函数总结
正则表达式作为一种匹配处理字符串的利器在很多语言中都得到了广泛实现和应用,web开发本质上是处理字符串(服务端接受请求处理后拼接字符串作为响应,这在早期的CGI编程中最明显,然后客户端解析字符串进行渲 ...
- hibernate 自生双向一对多 多对一管理 (树)
<span style="font-size: large;">package com.javacrazyer.test; import java.io.Seriali ...
- Microsoft Dynamics CRM2011 必备知识点
一.CRM基本知识 1.CRM2001 有几个服务端点? 答:对外公开的服务,如Web服务,WCF,Restful API 2.一个ERP系统,要访问CRM的数据,CRM2011有哪些现有的服务入口提 ...