【问题标题】:Simple way to play a sound file (.aif)播放声音文件 (.aif) 的简单方法
【发布时间】:2011-08-26 17:38:46
【问题描述】:

我正在使用 Xcode 为 Mac OS X 制作一个应用程序,我希望它在发生某些事情时播放警报声。

在 Objective-C/Cocoa 中播放声音的最简单代码是什么?请注意,我的声音文件是.aif

另外,我应该将声音文件放在我的项目中的什么位置?

谢谢。

【问题讨论】:

    标签: objective-c cocoa macos audio


    【解决方案1】:

    要在 Mac 上播放音频,您可以将NSSound 用于基本活动,或者使用更强大的CoreAudio 框架来处理更复杂的任务。


    如果您要使用NSSound 来实现此目标,您的代码将如下所示:

    NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"replace-with-file-name" ofType:@"aif"];
    NSSound *sound = [[NSSound alloc] initWithContentsOfFile:resourcePath byReference:YES];
    // Do something with sound, like [sound play] and release.
    

    NSSound *sound = [NSSound soundNamed:@"replace-with-file-name-without-the-extension"];
    // Do something with sound, like [sound play], but don't release (it's autoreleased).
    

    如果您要使用第二个 sn-p,则必须确保声音文件的扩展名是 aiff 而不仅仅是 aif,因为 +soundNamed: 会查找非常特定的文件扩展名;我认为aif 不在该列表中。

    使用CoreAudio比较复杂,所以如果你只是想玩它并搞乱非常简单的设置,只需使用NSSound

    【讨论】:

    • 谢谢,你能给我举个例子说明如何在代码中使用 NSSound 吗?
    • 谢谢它的工作,还有一个问题:我的声音是例如 1 分钟,然后我释放它,它会继续播放吗?
    • Andy,NSSound Class Reference 声明声音一旦被释放就会停止播放:“释放后,声音对象会停止播放声音(根据需要),以便释放相应的音频资源。”所以如果你创建了一个声音,开始播放它,然后在它完成播放之前释放它,声音就会停止。
    【解决方案2】:

    声音的基本播放非常简单。

    您可以使用NSSound 类以几种不同的方式加载文件,例如,按名称:

    NSSound * myAwesomeSound = [NSSound soundNamed:@"AwesomeSound"];
    

    如果您想保留它,则需要保留它。

    在这种情况下,该类将在某些特定目录(包括您的应用程序包)中搜索具有该名称的声音文件。一个重要的注意事项是该文件必须具有.aiff(带有两个 f's)扩展名才能被此方法找到。*

    您可能会将声音文件存储在项目的 Resources 文件夹中;这就是通常保存“媒体”文件的地方。

    然后你可以很简单地播放它,也许使用按钮按下:

    - (IBAction)playTheSound:(id)sender {
        NSSound * myAwesomeSound = [NSSound soundNamed:@"AwesomeSound"];
        [myAwesomeSound play];
    }
    

    还可以进行一些基本的传输控制:暂停、停止、检查声音是否结束,等等。详情请见Sound Programming Topics Guide


    *当然也可以使用其他格式。

    【讨论】:

      【解决方案3】:

      例如,添加 AudioToolbox 框架,将声音文件添加到您的资源/项目中,然后将以下内容添加到您的 .h:

      #import <AudioToolbox/AudioToolbox.h>
      

      然后:(在您的 .h 中的 @interface { blah } 之后)

      - (IBAction) playSound;
      

      将以下内容添加到您的 .m 中:(将“Ping”和“wav”更改为各自的文件名和类型)

      - (IBAction) playSound
      {
          SystemSoundID soundID;
          NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"Ping" ofType:@"wav"];
          AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID);
          AudioServicesPlaySystemSound(soundID); 
          [soundFile release];
      }
      

      【讨论】:

        【解决方案4】:

        您可以将 .aif 文件复制并添加到 Xcode 中的项目中,如下所示:

        1. 按住 Command 并单击 Classes 文件夹(在 xCode 中)
        2. 选择添加 > 现有文件
        3. 导航到包含您的 .aif 的目录并选择它(它们)。单击添加。 (可选:选中“复制项目”复选框并点击添加。)

        查看 Apple 的示例和重要信息:herehere

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-18
          • 2014-03-10
          • 1970-01-01
          • 2011-08-22
          相关资源
          最近更新 更多