我是Objective-C的新手,我正在尝试更新一些大约3年的代码来使用iOS 7.有两个或两个AudioSessionSetProperty
和AudioSessionInitialize
的实例出现在代码中:
1:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
AudioSessionInitialize(NULL,NULL,NULL,NULL);
[[SCListener sharedListener] listen];
timer = [NSTimer scheduledTimerWithTimeInterval: 0.5 target: self selector: @selector(tick:) userInfo:nil repeats: YES];
// Override point for customization after app launch
[window addSubview:viewController.view];
[window makeKeyAndVisible];
}
而且2:
- (id)init {
if ([super init] == nil){
return nil;
}
AudioSessionInitialize(NULL,NULL,NULL,NULL);
Float64 rate=kSAMPLERATE;
UInt32 size = sizeof(rate);
AudioSessionSetProperty (kAudioSessionProperty_PreferredHardwareSampleRate, size, &rate);
return self;
}
出于某种原因,此代码在模拟器中的iOS7上运行,但不在运行iOS7的设备上运行,我怀疑这些弃用是原因。我一直在阅读本网站上的文档和相关问题,似乎我需要使用AVAudioSession
。我一直在尝试更新代码很久了,我不确定如何正确切换到AVAudioSession
。有谁知道上面这两种方法需要看什么?
旁注:我已经设法找到了一篇概述过渡的文章: https://github.com/software-mariodiana/AudioBufferPlayer/wiki/Replacing-C-functions-deprecated-in-iOS-7 但我似乎无法将其应用于上面的代码。
我正在尝试更新的代码是来自git的小型频率检测应用: https://github.com/jkells/sc_listener
或者,如果有人可以指向我可以检测iOS设备上的频率的示例演示应用程序,那就太棒了。
答案 0 :(得分:15)
正如您所观察到的,几乎所有旧的Core Audio AudioSession函数都已被弃用,转而支持AVAudioSession。
AVAudioSession是一个单例对象,当你第一次调用它时会被初始化:
[AVAudioSession sharedInstance]
没有单独的initialize
方法。但是你需要激活音频会话:
BOOL activated = [[AVAudioSession sharedInstance] setActive:YES error:&error];
关于使用AVAudioSession
设置硬件采样率,请参阅我的回答:
How can I obtain the native (hardware-supported) audio sampling rates in order to avoid internal sample rate conversion?
其他比较& Core Audio audioSession和AVFoundation的AVAudioSession之间的对比是我围绕同一主题的一些其他答案:
How Do I Route Audio to Speaker without using AudioSessionSetProperty?
use rear microphone of iphone 5
答案 1 :(得分:7)
我写了一篇简短的教程,讨论如何更新到新的AVAudioSession对象。我在GitHub上发布了它:"Replacing C functions deprecated in iOS 7."