刚刚开始开发iOS 7,发现与AudioSession相关的函数和PropertyListeners在iOS 7中已被弃用。
在我使用以下方法检测耳机是否已插入设备或从设备中拔出之前:
/* add callback for device route change */
AudioSessionAddPropertyListener (
kAudioSessionProperty_AudioRouteChange,
audioRouteChangeListenerCallback,
(__bridge void *)(self));
然后实现侦听器回调,对内部算法做不同的事情。现在iOS7弃用了它,也没有任何替代方案的文档。这里有专家的解决方案吗?谢谢!
请尝试使用此代码执行Swift 4.2:
@objc func handleRouteChange(_ notification: Notification) {
let reasonValue = (notification as NSNotification).userInfo![AVAudioSessionRouteChangeReasonKey] as! UInt
let routeDescription = (notification as NSNotification).userInfo![AVAudioSessionRouteChangePreviousRouteKey] as! AVAudioSessionRouteDescription?
NSLog("Route change:")
if let reason = AVAudioSession.RouteChangeReason(rawValue: reasonValue) {
switch reason {
case .newDeviceAvailable:
NSLog(" NewDeviceAvailable")
case .oldDeviceUnavailable:
NSLog(" OldDeviceUnavailable")
case .categoryChange:
NSLog(" CategoryChange")
NSLog(" New Category: %@", AVAudioSession.sharedInstance().category.rawValue)
case .override:
NSLog(" Override")
case .wakeFromSleep:
NSLog(" WakeFromSleep")
case .noSuitableRouteForCategory:
NSLog(" NoSuitableRouteForCategory")
case .routeConfigurationChange:
NSLog(" RouteConfigurationChange")
case .unknown:
NSLog(" Unknown")
@unknown default:
NSLog(" UnknownDefault(%zu)", reasonValue)
}
} else {
NSLog(" ReasonUnknown(%zu)", reasonValue)
}
if let prevRout = routeDescription {
NSLog("Previous route:\n")
NSLog("%@", prevRout)
NSLog("Current route:\n")
NSLog("%@\n", AVAudioSession.sharedInstance().currentRoute)
}
}
并在func setupAudio会话()
中使用它
private func setupAudioSession() {
// Configure the audio session
let sessionInstance = AVAudioSession.sharedInstance()
// we don't do anything special in the route change notification
NotificationCenter.default.addObserver(self,
selector: #selector(self.handleRouteChange(_:)),
name: AVAudioSession.routeChangeNotification,
object: sessionInstance)
}
对于目标C,请尝试以下代码
- (void)handleRouteChange:(NSNotification *)notification
{
UInt8 reasonValue = [[notification.userInfo valueForKey:AVAudioSessionRouteChangeReasonKey] intValue];
AVAudioSessionRouteDescription *routeDescription = [notification.userInfo valueForKey:AVAudioSessionRouteChangePreviousRouteKey];
NSLog(@"Route change:");
switch (reasonValue) {
case AVAudioSessionRouteChangeReasonNewDeviceAvailable:
NSLog(@" NewDeviceAvailable");
break;
case AVAudioSessionRouteChangeReasonOldDeviceUnavailable:
NSLog(@" OldDeviceUnavailable");
break;
case AVAudioSessionRouteChangeReasonCategoryChange:
NSLog(@" CategoryChange");
NSLog(@" New Category: %@", [[AVAudioSession sharedInstance] category]);
break;
case AVAudioSessionRouteChangeReasonOverride:
NSLog(@" Override");
break;
case AVAudioSessionRouteChangeReasonWakeFromSleep:
NSLog(@" WakeFromSleep");
break;
case AVAudioSessionRouteChangeReasonNoSuitableRouteForCategory:
NSLog(@" NoSuitableRouteForCategory");
break;
default:
NSLog(@" ReasonUnknown");
}
NSLog(@"Previous route:\n");
NSLog(@"%@\n", routeDescription);
NSLog(@"Current route:\n");
NSLog(@"%@\n", [AVAudioSession sharedInstance].currentRoute);
}
并在(无效)设置中使用它音频会话
- (void)setupAudioSession {
// Configure the audio session
AVAudioSession *sessionInstance = [AVAudioSession sharedInstance];
// we don't do anything special in the route change notification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleRouteChange:)
name:AVAudioSessionRouteChangeNotification
object:sessionInstance];
}
处理通知AVAudioSessionRouteChangeNotify
(在iOS6.0及更高版本中可用。)
问题内容: 我必须根据浏览历史实现一些业务逻辑。 我想做的是这样的: URL更新后,有什么方法可以接收来自react-router的回调吗? 问题答案: 尝试检测路线变化时,可以使用功能。考虑到您正在使用,请用HOC 包装您的组件以访问道具。 返回一个函数。您将使用它来收听。 您可以像这样配置路线 index.js 然后在 AppContainer.js中 从历史文档: 您可以使用收听当前位置的更
我的应用程序需要知道用户选择的基本音频路径的能力。在iOS上,这是微不足道的,因为你只需注册一个回调,你就知道音频的确切去向。 在Android上,我很高兴看到< code>MediaRouter类,然而令我沮丧的是,没有可预测的方法来确定路由类型。例如,当切换到蓝牙A2DP设备时,唯一的标识项是< code>RouteInfo.getName()方法,但这会返回A2DP设备的友好名称,因此无法进
我正在查找在我的中检测路由更改。 此后,我将检查全局用户令牌,看看他是否已登录。然后我可以重定向用户,如果他没有登录。
问题内容: 尽管我在此站点上有许多有关音高检测概念的问题……他们都处理了我不熟悉的神奇 FFT 。我正在尝试构建需要实现音高检测的Android应用程序。我绝对不了解用于执行此操作的算法。 它不能 是 硬可以吗?毕竟,Android市场上大约有80亿个吉他调音器应用程序。 有人可以帮忙吗? 问题答案: 快速傅立叶变换将功能从时域更改为频域。因此,而不是在那里是信号,你是从麦克风获取和是信号的时间指
我正在寻求设计和Android应用程序,该应用程序能够以编程方式将音频分别路由到左右扬声器。也就是说,当播放歌曲时,它将首先通过右侧扬声器,然后将其路由到左侧扬声器。我的应用程序的目的是验证两个扬声器是否正常工作。到目前为止,我还没有成功找到任何可以做到这一点的API。
问题内容: 我有200多个MP3文件,我需要使用静音检测来拆分其中的每个文件。我尝试了Audacity和WavePad,但它们没有批处理过程,将它们一一制作很慢。 场景如下: 分割曲目,而静音2秒或更长时间 然后在这些音轨的开头和结尾添加0.5 s并将其另存为.mp3 BitRate 192立体声 标准化卷以确保所有文件的卷和质量相同 我尝试了FFmpeg,但没有成功。 问题答案: 我发现pydu