使用按钮 iPhone SDK 进行简单的声音播放
Posted
技术标签:
【中文标题】使用按钮 iPhone SDK 进行简单的声音播放【英文标题】:Simple sound play with button iPhone SDK 【发布时间】:2012-07-08 17:33:20 【问题描述】:我已经尝试了几个小时在单击按钮后播放简单的声音,但我无法做到。在尝试了几个教程之后,我在这个链接中关注了一个:
http://www.mybringback.com/tutorial-series/1126/xcode-4-tutorial-ios-ipad-iphone-20-playing-sound-with-button/
这是.h文件:
#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>
@interface soundTestViewController : UIViewController
-(IBAction) playSound;
@end
这是 .m 文件:
#import "soundTestViewController.h"
@implementation soundTestViewController
-(IBAction) playSound
CFBundleRef mainBundle=CFBundleGetMainBundle();
CFURLRef soundFileURLRef;
soundFileURLRef =CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"mysound", CFSTR("mp3"), NULL);
UInt32 soundID;
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
AudioServicesPlaySystemSound(soundID);
- (void)didReceiveMemoryWarning
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
- (void)viewDidUnload
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
- (void)dealloc
[super dealloc];
@end
但是,构建结果会出现错误:
Build soundTest of project soundTest with configuration Debug
Ld build/Debug-iphonesimulator/soundTest.app/soundTest normal i386
cd /Users/joegeneric/Documents/soundTest
setenv MACOSX_DEPLOYMENT_TARGET 10.6
setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk -L/Users/joegeneric/Documents/soundTest/build/Debug-iphonesimulator -F/Users/joegeneric/Documents/soundTest/build/Debug-iphonesimulator -F/Users/joegeneric/Documents/soundTest -filelist /Users/joegeneric/Documents/soundTest/build/soundTest.build/Debug-iphonesimulator/soundTest.build/Objects-normal/i386/soundTest.LinkFileList -mmacosx-version-min=10.6 -Xlinker -objc_abi_version -Xlinker 2 -framework Foundation -framework UIKit -framework CoreGraphics -framework AVFoundation -framework AudioToolbox -o /Users/joegeneric/Documents/soundTest/build/Debug-iphonesimulator/soundTest.app/soundTest
ld: warning: in /Users/joegeneric/Documents/soundTest/AVFoundation.framework/AVFoundation, missing required architecture i386 in file
ld: warning: in /Users/joegeneric/Documents/soundTest/AudioToolbox.framework/AudioToolbox, missing required architecture i386 in file
Undefined symbols:
"_AudioServicesPlaySystemSound", referenced from:
-[soundTestViewController playSound] in soundTestViewController.o
"_AudioServicesCreateSystemSoundID", referenced from:
-[soundTestViewController playSound] in soundTestViewController.o
ld: symbol(s) not found
你能展示我做错了什么或任何其他更简单的关于在 iPhone SDK 中播放声音的工作教程吗?
【问题讨论】:
我想如果你能发布你的代码,它会很容易提供帮助..! 【参考方案1】:[除了masimobio的正确答案]
您提供的教程链接提到了适用于 iOS 的 Xcode 4,但您的构建结果中的“setenv MACOSX_DEPLOYMENT_TARGET 10.6”行表明您的部署目标为 Mac。
您需要将您的项目构建架构更改为 iOS,并检查您的目标是 IOS,而不是 OSX。
例如要更改您的构建架构,请单击您的项目并选择构建设置以显示基础 SDK。
您的 IBAction 也缺少发件人。它应该在你的控制器头文件中声明为
-(IBAction) playSound:(id)sender;
并在您的控制器 .m 文件中实现为
-(IBAction) playSound:(id)sender
// your code here
另外,不要忘记使用 control-drag 将代码中的 IBAction 链接到 XIB,以创建动作-目标对。
播放声音的最简单演示是 SysSound。如果您搜索 Xcode 文档或通过 Apple Developer 网站的 Sample Code 下,它是可用的。
【讨论】:
我的目标是iOS 4.2,如果我删除方法“playSound”,它运行没有任何问题。但是在添加方法时,它给出了错误 我已经用更多细节修改了我的答案。希望这会有所帮助。 谢谢,但还是不行,可能我的xcode 3.2版本太旧了 不这么认为。您的 AudioToolbox 调用都需要 iOS 2.0 及更高版本,因此应该不是问题。您是否像我在上面的回答中所说的那样通过添加“:(id)发件人”来修复您的 playSound 方法? 我做到了,但没有帮助。这个周末真的让我发疯了【参考方案2】:您是否将 AudioToolbox 框架添加到您的 Target, 和你的代码中的这个导入?
#import <AudioToolbox/AudioToolbox.h>
【讨论】:
以上是关于使用按钮 iPhone SDK 进行简单的声音播放的主要内容,如果未能解决你的问题,请参考以下文章
如何在iphone sdk的Touch down事件中设置增加声音的速率并重复这个声音