当前位置:主页 > G生活报 >CS193P第十六堂课摘要及心得笔记 >

CS193P第十六堂课摘要及心得笔记

   时间: 2020-06-06   来源: G生活报 阅读: 287

在这一次的课程内容中,我们将看到如何在 iPhone 上操作多媒体相关的内容,包含播放音乐、音效还有影片。此外,还会顺便谈到要如何让应用程式出现在设定的程式中,还请读者们多加指教!

声音播放

一般来讲,我们在 iPhone 平台上涉及声音的操作大约可以归类为以下几种:

  • 长度不固定的音乐档
  • 线上串流的音讯
  • 录音
  • 而以上这些功能,在 iPhone 上大多是由 Core Audio 这套 Framwork 来达成,这套 Framework 包含了许多不同层级的功能,如下面所列:

    较高层、包装成简单使用的介面:

    低层级,需要花比较多功夫设定但提供较多的控制选项:

    在我们的开发过程中,我们可以依照使用的情境来决定要用哪一种 API,但大多数的情况,我们可以单纯的就直接使用包装过、抽象化的 System Audio API 和 AVAudioPlayer 就可以了。

    首先我们就先来看看 System Audio API,诚如上面所提及的,这一系列的 API 是用来播放较短的音效,也就是五秒钟以内的声音档,具有以下特色:

    而在使用上可以分为两步骤,首先我们要先注册音效,在透过注册所得到的 ID 呼叫另外一函式播放。範例程式码如下:

    NSURL *fileURL = . // 档案位置 SystemSoundID myID; // 建立 IDAudioServicesCreateSystemSoundID fileURL, &myID); // 注册音效 AudioServicesPlaySystemSound ; // 播放音效AudioServicesDisposeSystemSoundID ; // 当记忆体不足时,删除已注册的音效

    有趣的是,iPhone 预设有一组常数 kSystemSoundID_Vibrate 代表着 iPhone 振动的 ID,所以我们可以透过呼叫 AudioServicesPlaySystemSound ; 来让手机振动。不过需要注意,由于硬体的缺乏,若是 iPod Touch 的话则不会有任何反应。

    而当我们如果需要播放比较长的档案时,就得借助 AVAudioPlayer 了!此类别具备了那些 Sound Audio API 所没有提供的功能,像是循环播放、控制暂停播放或是同时播放数个音效等等。简单的使用範例如下:

    AVAudioPlayer *player; NSString *path = [[NSBundle mainBundle] pathForResource.]; NSURL *url = [NSURL fileURLWithPath:path]; player = [[AVAudioPlayer alloc] initWithContentsOfURL:url];

    要注意的是,虽然他建立的时候使用的是 NSURL,但就如同 Sound Audio API 一样,只支援本机端的档案,并不能线上串流播放。至于何播放、暂停音乐时,只需要呼叫其 play 和 pause 方法就好了,相当的容易理解。

    就如同大多数的 Cocoa Touch API 一样,AVAudioPlayer 录製音效

    除了音效的播放之外,我们也可以透过 AVAudioRecorder 来录製音效,使用的方式与上面的 AVAudioPlayer 相当类似:

    AVAudioRecorder *recorder; NSError *error = nil; NSURL *url = [NSURL .]; // 预计写入的位置 recorder = [[AVAudioRecorder alloc] initWithURL:url settings:nil error:&error];

    而录製和暂停的方法名称分别为 record 和 pause,只需要对建立好的 AVAudioRecorder 呼叫即可。而 delegate 的方法也几乎跟 AVAudioPlayer 相同,在这边笔者就不加详述。

    MediaPlayer

    除了上述的几个 API 之外,Cocoa Touch 也提供了 MediaPlayer 这个 Framework,让我们能够轻易的取用使用者所储存在 iPhone 中的音乐资料和影片。

    而就如同我们挑选照片时会使用 UIImagePickerController 一般,MPMediaPickerController 则是用来存取使用者的音乐。这个类别可以指定让使用者挑选单一或是複数个影音资料,对于可挑选的影音资料也可以进行设定。而当使用者挑选完之后,则是会呼叫 delegate 方法 mediaPicker: didPickMediaItems: 来进行回传。

    经由 MPMediaPickerController 所回传的会是 MPMediaItemCollection 物件,这个物件可以呈现播放清单、专辑等等,有兴趣的读者还请自行参考文件。

    影片播放

    在 iPhone 上若我们需要播放影片,必须透过 MPMoviePlayerController

    设定

    我们在 iPhone 内建的设定程式中可以看到许多软体的设定选项,这些设定的选项会在我们将软体安装进 iPhone 时一併加入到设定程式中。背后的运作则是透过修改应用程式的 NSUserDefault 来对应用程式进行沟通。

    虽然 iPhone OS 提供了一个统一的地方让使用者作应用程式设定,但若是我们将所有的设定一股脑的统统放到其中,会造成整个 iPhone OS 的操作迟缓。因此 Apple 在他们的官方文件中建议,对于比较常用的选项,像是股票软体的股票代码、地图软体的显示模式切换等,这一类的设定应该要直接放在应用程式中。而对于比较少修改的设定,像是 Safari 的搜寻引擎或是 E-Mail 帐号等,则就会适合放在设定程式中。

    而我们要如何建立设定的介面呢?事实上,这些介面是系统自动建立的,我们并不需要做额外的设定,只需要在 XCode 中加入 Settings Bundle,里面会包含着一个 root.plist,其中就会纪录所需要建立的设定选项,包含 TextField、Switch 和 Slider 等等有支援。详细的使用方式请参考官方的文件说明。

    结论

    这次的内容主要对于多媒体相关的 API 做概略性的介绍。在下一次的课程中,我们将学到如何使用 Bonjour 这套 Apple 所制定的网路协定来让 iPhone 之间进行网路的互动,还请各位读者继续支持。

    参考资源
    上一篇:
    下一篇:
    猜你喜欢...
    相关信息
    图文欣赏
    精彩推荐 
    搞笑百态 
    精彩文章
    
    申博太阳城_申博官网管理网|百姓生活动态|网站地图 申博官网备用网址_申博官网网站 申博官网备用网址_sunbet(官网)管理