如何在Objective C iphone编码中播放声音

Posted

技术标签:

【中文标题】如何在Objective C iphone编码中播放声音【英文标题】:How to play a sound in objective C iphone coding 【发布时间】:2010-11-18 14:36:40 【问题描述】:

我正在开发一个应用程序,它使用一些硬件传感器在屏幕上提供数据,有一个随数字更新的标签。我想在数字超过 100 时播放声音。例如,假设它正在读取数字,然后它突然找到了一个好位置(或其他什么),然后我想要播放声音或点亮灯光。我是一个绝对的初学者,如果答案对一个绝对的初学者来说很容易理解,那就太好了。

【问题讨论】:

【参考方案1】:

我正在使用系统 AudioToolbox.framework 在我的简单游戏中播放声音。我将此静态函数添加到通用 MyGame 类中:

+ (SystemSoundID) createSoundID: (NSString*)name

  NSString *path = [NSString stringWithFormat: @"%@/%@",
                     [[NSBundle mainBundle] resourcePath], name];


  NSURL* filePath = [NSURL fileURLWithPath: path isDirectory: NO];
  SystemSoundID soundID;
  AudioservicesCreateSystemSoundID((__bridge CFURLRef)filePath, &soundID);
  return soundID;
 

我将“Morse.aiff”文件添加到项目资源中,并在(任何)类初始化中使用以下内容对其进行了初始化:

self.mySound = [MyGame createSoundID: @"Morse.aiff"];

然后我用这个电话播放了声音:

AudioServicesPlaySystemSound(mySound);

另外,别忘了导入 AudioServices.h 文件。

这个音频工具箱也可以播放不同的声音格式。

【讨论】:

请记住,您需要调用 AudioServicesDisposeSystemSoundID 以避免内存泄漏! (因为 SystemSoundID 来自较低级别的框架)【参考方案2】:

h

#import <AVFoundation/AVFoundation.h>

@interface CMAVSound : NSObject 
    AVAudioPlayer *audioPlayer;


- (id)initWithPath:(NSString*)fileNameWithExctension;
- (void)play;

@end

#import "CMAVSound.h"

@implementation CMAVSound

-(void)dealloc 
    [audioPlayer release];


- (id)initWithPath:(NSString*)fileNameWithExctension 
    if ((self = [super init])) 
        NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], fileNameWithExctension]];

        NSError *error;
        audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];

        if (audioPlayer == nil) 
            NSLog(@"%@", [error description]);
        
    
    return self;


- (void)play 
    [audioPlayer play];


@end

【讨论】:

【参考方案3】:

查看AVAudioPlayer 类的文档。它允许您播放声音剪辑。如果您在实现时遇到问题,请向我们展示一些代码。

【讨论】:

好的,谢谢,我会看看,接下来会展示,我知道这很愚蠢,但你具体想要什么?【参考方案4】:

如果声音长达 5 秒并且不需要立体声输出,我建议您使用系统声音来执行此操作。这是比任何其他解决方案都简单且更好的解决方案。 Apple 示例代码以名称 SysSound 提供

编辑1 或者也许教程可以帮助你更多 http://howtomakeiphoneapps.com/2009/08/how-to-play-a-short-sound-in-iphone-code/

【讨论】:

这很棒,def。有帮助。知道当它超过某个数字时如何使它工作吗? 没有看到任何代码很难说清楚,但是让我们猜猜你的数字是整数,你的代码中应该有 if 语句来比较值(将它放在你分配值的地方)然后在 if 语句下放置你的系统声音,它会播放 这解释了不同的播放器以及何时使用它们:developer.apple.com/library/ios/#documentation/AudioVideo/…【参考方案5】:

看看下面的链接;

http://blog.guvenergokce.com/avaudioplayer-on-iphone-simulator/57/

http://mobileorchard.com/easy-audio-playback-with-avaudioplayer/

【讨论】:

【参考方案6】:

在这里你可以找到 AudioServicesPlaySystemSound 的列表

http://iphonedevwiki.net/index.php/AudioServices

【讨论】:

以上是关于如何在Objective C iphone编码中播放声音的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Objective C 在 iphone 中制作 .zip 文件?

如何在 iPhone 的 Objective C 中执行 ZoneTag 的功能?

如何在iphone上使用objective c下载大文件

如何将 int 从 iPhone 发送到 Apple Watch 标签(objective-c)

如何在 iPhone SDK 中使用 Objective C 实现 UIViewAutoresizingFlexibleHeight 到 UIScrollView?

如何在 iOS Swift 或 Objective C 中检测 iPhone 卷访问 [关闭]