我很新的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];
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,这段代码可以在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 …
任何人都可以向我指出文档,说明不同iPhone版本的原生采样率,以避免core-audio内部采样率转换?
编辑: 否则,请您指点一个源代码示例,说明如何以编程方式获取这些值?
编辑: 此Apple文档(第26页)是指Canonical音频格式,但仅提及样本类型(PCM)和位深度(16位).它没有提到捕获硬件直接支持的任何本机采样率.这些是我正在寻找的价值观.
我有一个应用程序,可以同时收听和播放声音.默认情况下,声音输出通过耳机.所以我使用以下代码通过扬声器进行路由:
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);
Run Code Online (Sandbox Code Playgroud)
这很好用.但现在,我想在连接耳机或外接扬声器时通过耳机传送声音.我怎么做到这一点?
理想情况下,当应用程序启动时,所有其他声音(即音乐等)应该静音.
谢谢!
iphone objective-c avaudioplayer avaudiorecorder audiosession
我的iOS6和工作代码将蓝牙设置为输出:
// create and set up the audio session
AVAudioSession* audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory: AVAudioSessionCategoryPlayAndRecord error: nil];
[audioSession setActive: YES error: nil];
// set up for bluetooth microphone input
UInt32 allowBluetoothInput = 1;
OSStatus stat = 0;
stat = AudioSessionSetProperty (
kAudioSessionProperty_OverrideCategoryEnableBluetoothInput,
sizeof (allowBluetoothInput),
&allowBluetoothInput
);
Run Code Online (Sandbox Code Playgroud)
从iOS7开始,不推荐使用AudioSessionSetProperty方法.遵循此主题如何在不使用AudioSessionSetProperty的情况下将音频路由到扬声器?您可以将输出更改为AVAudioSessionPortOverrideSpeaker或AVAudioSessionPortOverrideNone但此处没有蓝牙选项.
我的实际目标是支持不使用A2DP但使用HFP的蓝牙设备.
那么如何在不使用弃用方法的情况下实现这一目标呢?
在我的iOS应用程序中,我想显示一个Alert,如果Mic is not available in the device.
我怎么检查这个?
我试过这个 -
-(void)checkMic
{
UInt32 sessionCategory = kAudioSessionCategory_RecordAudio;
OSStatus status = AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof (sessionCategory), &sessionCategory); //..always seems to return OK..
status = AudioSessionSetActive (true);
if(status)
{
//mic is not available
}
}
Run Code Online (Sandbox Code Playgroud)
但是此代码显示错误消息 - 已弃用.
ios ×3
objective-c ×3
ios7 ×2
audiosession ×1
avfoundation ×1
bluetooth ×1
core-audio ×1
hardware ×1
iphone ×1
microphone ×1