Ios 在录制应用程序中执行振动
我正在尝试在一个类似Snapchat的应用程序中执行振动,该应用程序使用音频输出和输入,并支持来自其他应用程序的音频混合,但这似乎是一个我最初认为更难的任务。重要的是要知道,我并没有试图在播放或录制过程中振动。通过阅读我能找到的所有关于该主题的文档,我了解到:Ios 在录制应用程序中执行振动,ios,avfoundation,avaudiosession,iphone-vibrate,Ios,Avfoundation,Avaudiosession,Iphone Vibrate,我正在尝试在一个类似Snapchat的应用程序中执行振动,该应用程序使用音频输出和输入,并支持来自其他应用程序的音频混合,但这似乎是一个我最初认为更难的任务。重要的是要知道,我并没有试图在播放或录制过程中振动。通过阅读我能找到的所有关于该主题的文档,我了解到: 为了支持播放和录制(输出和输入),我需要使用AVAudioSessionCategoryPlayAndRecord 任何录音类别(包括AvaudioSessionCategoryPlay和Record)都不支持通过AudioServic
- 为了支持播放和录制(输出和输入),我需要使用
AVAudioSessionCategoryPlayAndRecord
- 任何录音类别(包括
AvaudioSessionCategoryPlay和Record)都不支持通过
使手机振动AudioServicesPlaySystemSound(kSystemSoundID\u vibrate)
- 通过添加选项
,可以启用其他应用程序播放音频avaudiosessioncategoryooptionmixwithothers
NSError *error = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers error:&error];
对于我尝试过但失败的振动,可能的解决方案是:
- 振动前禁用共享的
,然后立即激活AVAudioSession
这成功地实现了振动,但之后,当我尝试录制电影时,音频被隐藏(或者其他原因导致它非常安静)。它还告诉我一个错误,即不允许在不首先删除会话的I/O设备的情况下停用会话[[AVAudioSession sharedInstance] setActive:NO error:nil]; AudioServicesPlaySystemSound (kSystemSoundID_Vibrate); [[AVAudioSession sharedInstance] setActive:YES error:nil];
- 振动前更改类别,然后将其更改回
这个解决方案不时出现,但似乎对我不起作用。即使类别似乎已设置,也不会发生振动。如果我在AVCaptureSession上设置了[[AVAudioSession sharedInstance] setActive:NO error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; [[AVAudioSession sharedInstance] setActive:YES error:nil]; AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); [[AVAudioSession sharedInstance] setActive:NO error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers error:nil]; [[AVAudioSession sharedInstance] setActive:YES error:nil];
,这可能仍然是一个有效的解决方案,但我还没有让它工作UseApplicationAudioSession=YES
UIImpactFeedbackGenerator
ui选择反馈生成器
UINotificationFeedbackGenerator
因此,我最近一直在尝试在我的应用程序中播放一个简单的哔哔声,其中一种方法是:
AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID);
这是一个从/system/Library/Audio/UISounds/
播放系统声音的函数,所有iOS版本都支持该函数
声音1350等于铃声被改变(振动)。所以
…振动约0.5秒
如果您对更多声音感兴趣,这里有一个链接,指向所有可播放的声音以及它们添加到的iOS版本:
作为参考,我不是使用AVCaptureSession
而是使用AVAudioEngine
来录制一些东西,就我的情况而言,我将其精确定位为必须暂停输入,以便在录制会话期间使用AudioServicesPlaySystemSound
正确播放振动
就我而言,我做了类似的事情
audioEngine?.pause()
AudioServicesPlaySystemSound(1519)
do {
try audioEngine.start()
} catch let error {
print("An error occurred starting audio engine. \(error.localizedDescription)")
}
我不确定它是否也适用于为AVCaptureSession
执行类似操作(即stopRunning()
和startRunning()
),但请将此留在这里,以防有人想尝试一下。谢谢,但我需要支持较旧的设备。我尝试了此解决方案,但应用程序录制时似乎出现了问题。反馈发生器不起作用Hello@PatrikVaber您找到录音振动的解决方案了吗?尝试振动时是否有AVAudioRecorder
实例录音?使用AudioServicesPlaySystemSound执行振动是我遇到的问题。使用1350而不是kSystemSoundID_振动(这只是4095的别名)没有什么区别。
audioEngine?.pause()
AudioServicesPlaySystemSound(1519)
do {
try audioEngine.start()
} catch let error {
print("An error occurred starting audio engine. \(error.localizedDescription)")
}