iOS:AudioSessionInitialize和AudioSessionSetProperty的弃用

时间:2014-01-30 18:22:26

标签: objective-c ios7 avaudiosession

我是Objective-C的新手,我正在尝试更新一些大约3年的代码来使用iOS 7.有两个或两个AudioSessionSetPropertyAudioSessionInitialize的实例出现在代码中:

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设备上的频率的示例演示应用程序,那就太棒了。

2 个答案:

答案 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

Play audio through upper (phone call) speaker

How to control hardware mic input gain/level on iPhone?

答案 1 :(得分:7)

我写了一篇简短的教程,讨论如何更新到新的AVAudioSession对象。我在GitHub上发布了它:"Replacing C functions deprecated in iOS 7."