我可以noErr = 0在OS X库中轻松找到源代码.但是很难OSStatus在iOS上找到完整的错误代码列表.
在Mac OS X上,找到类似的东西并不难
kAudioHardwareUnsupportedOperationError
Run Code Online (Sandbox Code Playgroud)
但我似乎无法找到iOS OSStatus代码的有用信息.有一个完整的列表或任何指向定义它们的头文件的指针会很好.
谢谢!
更新:
我不认为我的问题与上述问题重复."可能重复"问题的操作想要将他已经知道的4-char代码转换为人类可读的字符串.相反,这是我的进一步规范:
我甚至不知道用于iOS的4-char或typedefed整数.我希望看到类似完整代码列表的内容,就像您在许多C++框架/库设计中通常会看到的那样,例如枚举列表,标准异常,甚至是OSX k-something代码,至少可以可以单独在Xcode文档中找到.
我对这些代码的使用包括:
在我的自定义函数中,例如,一些必须返回OSStatus的CoreAudio回调,我想返回这些内置的人类可读代码来指示运行时错误的类型.没有列表,除了noErr之外,我不知道该返回什么.
显然,许多OSX k代码在iOS环境下是未定义的,因此它们不能透明地使用.
更新(结论):
我终于找到了一个线索:在Xcode文档(管理器)中搜索关键字"结果代码",我们在"系统指南"结果中获得或多或少的归类返回代码文档部分.这对我原来的问题来说已经足够了. -
与音频会话编程相关的许多常量实际上是四字符串(音频会话服务参考).这同样适用于从函数返回的OSStatus代码AudioSessionGetProperty.
问题是,当我尝试打开这些东西时,它们看起来像1919902568.我可以将其插入计算器并打开ASCII输出,它会告诉我"roch",但必须有一个编程方式做这个.
我使用以下块在我的一个C函数中取得了有限的成功:
char str[20];
// see if it appears to be a four-character code
*(UInt32 *) (str + 1) = CFSwapInt32HostToBig(error);
if (isprint(str[1]) && isprint(str[2]) && isprint(str[3]) && isprint(str[4])) {
str[0] = str[5] = '\'';
str[6] = '\0';
} else {
// no, format as integer
sprintf(str, "%d", (int)error);
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是从当前函数中抽象出这个特性,以便在别处使用它.我试过了
char * fourCharCode(UInt32 code) {
// block
}
void someOtherFunction(UInt32 foo){
printf("%s\n",fourCharCode(foo));
}
Run Code Online (Sandbox Code Playgroud)
但这给了我"à*€/3íT:ê*€/ +€/",而不是"roch".我的C fu不是很强大,但我的预感是上面的代码试图将内存地址解释为字符串.或者可能存在编码问题?有任何想法吗?
有没有人有一些适用于 Mac OS X 的 SIMPLE 录音机的示例代码?我只想录制来自 MacBook Pro 内置麦克风的声音并将其保存到文件中。就这些。
我已经搜索了几个小时,是的,有一些示例可以录制语音并将其保存到文件中,例如http://developer.apple.com/library/mac/#samplecode/MYRecorder/Introduction/Intro.html。Mac OS X 的示例代码似乎比 iPhone 的类似示例代码复杂约 10 倍。
对于 iOS,命令非常简单:
soundFile =[NSURL FileURLWithPath:[tempDir stringByAppendingString:@"mysound.cap"]];
soundSetting = [NSDictionary dictionaryWithObjectsAndKeys: // dictionary setting code left out goes here
soundRecorder = [[AVAudioRecorder alloc] initWithURL:soundFile settings:soundSetting error:nil];
[soundRecorder record];
[soundRecorder stop];
Run Code Online (Sandbox Code Playgroud)
我认为有代码可以为 Mac OS X 执行此操作,就像 iPhone 版本一样简单。感谢您的帮助。
这是代码(目前播放器不起作用)
#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
@interface MyAVFoundationClass : NSObject <AVAudioPlayerDelegate>
{
AVAudioRecorder *soundRecorder;
}
@property (retain) AVAudioRecorder *soundRecorder;
-(IBAction)stopAudio:(id)sender;
-(IBAction)recordAudio:(id)sender;
-(IBAction)playAudio:(id)sender;
@end
#import "MyAVFoundationClass.h" …Run Code Online (Sandbox Code Playgroud)