每当我启动以麦克风作为输入运行的AVCaptureSession时,它都会取消当前正在运行的任何背景音乐(例如iPod音乐).如果我注释掉添加音频输入的行,背景音频将继续.
有没有人知道用麦克风录制视频剪辑的方法,同时继续允许播放背景音频?当您尝试录制视频并且当前正在播放音乐时,也会出现错误.
试图这样做:
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
UInt32 doSetProperty = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty);
[[AVAudioSession sharedInstance] setActive: YES error: nil];
Run Code Online (Sandbox Code Playgroud)
但 'AudioSessionSetProperty' is deprecated: first deprecated in iOS 7.0
所以我试着这样做:
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *setCategoryError = nil;
[audioSession setCategory:AVAudioSessionCategoryPlayback
withOptions:AVAudioSessionCategoryOptionMixWithOthers
error:&setCategoryError];
[audioSession setActive:YES error:nil];
Run Code Online (Sandbox Code Playgroud)
但最后它没有奏效.感谢帮助!
objective-c ios avcapturesession avcapturedevice avaudiosession
在Xcode 4.5中启动了一个Cocos2D 2.1模板(没有物理引擎),针对iOS 6和iPad.在CDAudioManager.m文件中,以下代码...
AVAudioSession* session = [AVAudioSession sharedInstance];
session.delegate = self; // Which is what is automatically generated by the template.
Run Code Online (Sandbox Code Playgroud)
...生成以下警告......
"delegate deprecated: first deprecated in iOS 6"
Run Code Online (Sandbox Code Playgroud)
所以我转到苹果开发者文档,它在"委托","在iOS 6.0中不推荐使用."请使用此类通知部分中描述的通知.
问题是,它看起来就像我们想要做的一样 - 原谅我的经验不足 - 将AVAudioSession的委托设置为CDAudioManager实例本身.通知如何实现这一目标?或者我对上述代码的目标错了吗?
我有以下MPNowPlayingInfoCenter字典
@{MPMediaItemPropertyAlbumTitle: @"First Title",
MPMediaItemPropertyArtwork: [[MPMediaItemArtwork alloc] initWithImage:[UIImage imageNamed:@"Album-Cover.jpg"]],
MPMediaItemPropertyPlaybackDuration:[NSNumber numberWithDouble:self.storyAudioPlayer.duration],
MPNowPlayingInfoPropertyElapsedPlaybackTime:[NSNumber numberWithDouble:self.storyAudioPlayer.currentTime],
MPNowPlayingInfoPropertyPlaybackRate:@1.0
}
Run Code Online (Sandbox Code Playgroud)
其他一切工作正常,但我无法使用滑块寻找歌曲.如图所示.我错过了什么参数?

自iOS 7更新以来,录制应用程序发生了一些变化.我有一个应用程序曾经使用iOS 5和6,但当我尝试在iOS 7上运行它 - 录音没有响应.
我检查了互联网,看到有一种新方法需要调用.我试图将此代码放在viewDidAppear中:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
if([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission:)])
{
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
NSLog(@"permission : %d", granted);
}];
}
}
Run Code Online (Sandbox Code Playgroud)
'grant'总是1,虽然我没有授予任何权限,也没有看到任何请求弹出窗口.
顺便说一句,我正在尝试使用xcode 4.6.3来处理这个问题.我使用requestRecordPermission方法为AVAudioSession创建了一个类别,因为此方法仅在iOS 7中可用.
谢谢.
我有一个需要的应用程序:
像Snapchat一样,camera-viewcontroller是"swipeview"的一部分,因此始终打开.
然而,当打开和关闭应用程序时,音乐会产生短暂的"破解"噪音/声音,从而破坏音乐.
我在这里录制了它:https: //soundcloud.com/morten-stulen/hacky-sound-ios (3次出现)
我使用这些设置来更改appdelegate didFinishLaunchingWithOptions中的AVAudiosession:
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord,withOptions:
[AVAudioSessionCategoryOptions.MixWithOthers,
AVAudioSessionCategoryOptions.DefaultToSpeaker])
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print("error")
}
Run Code Online (Sandbox Code Playgroud)
我使用LLSimpleCamera控件进行视频录制,我将会话设置为:
_session.automaticallyConfiguresApplicationAudioSession = NO;
Run Code Online (Sandbox Code Playgroud)
似乎其他人也有与其他相机库相同的问题:https: //github.com/rFlex/SCRecorder/issues/127
https://github.com/rFlex/SCRecorder/issues/224
这家伙删除了audioDeviceInput,但我有点需要录制视频. https://github.com/omergul123/LLSimpleCamera/issues/48
我也尝试使用Apple的代码"AvCam",我仍然有同样的问题.Snapchat如何做到这一点?!
任何帮助将不胜感激,我很乐意提供更多信息或代码!
我用过
NotificationCenter.default.addObserver(self, selector: #selector(volumeChanged(_:)), name: NSNotification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), object: nil)
Run Code Online (Sandbox Code Playgroud)
过去可以听到音量控制变化,但这在 iOS 15 中不再起作用。
仅当您不关心用户在最大音量时按下音量时,下面的替代代码才有效。但是,我确实想知道每次按下按钮时的情况。
AVAudioSession.sharedInstance().addObserver(self, forKeyPath: "outputVolume", options: NSKeyValueObservingOptions.new, context: nil)
Run Code Online (Sandbox Code Playgroud)
即使音量处于最大/最小,聆听用户按下音量控制按钮的正确方法是什么?
我做了一个iPhone应用程序,在运动时使用.它会播放铃声,表示您(用户)应该从练习例程的一个步骤切换到下一个步骤.我设计了应用程序,以便您在使用应用程序时可以在iPod上听音乐,我希望音调可以在音乐上充分发声.我已经让这个工作......有点......
当音乐响亮时,很难听到音调.我理想的解决方案类似于iPod应用程序处理传入短信或电子邮件的方式.音乐音量降低,声音播放,音乐音量逐渐消失.
以下是我到目前为止尝试过的方法:
我以前常常AudioServicesPlaySystemSound播放声音.
我初始化声音是这样的:
CFBundleRef mainBundle = CFBundleGetMainBundle();
soundFileURLRef = CFBundleCopyResourceURL(mainBundle, CFSTR ("bell"), CFSTR ("wav"), NULL);
AudioServicesCreateSystemSoundID (soundFileURLRef, &soundFileID);
Run Code Online (Sandbox Code Playgroud)
我在适当的时候使用以下方式播放声音:
AudioServicesPlaySystemSound (self.soundFileID);
Run Code Online (Sandbox Code Playgroud)
这播放声音很好,但是听到嘈杂的音乐太难了.试图2 ...
我试图降低iPod音量,播放声音,然后将音量恢复到之前的水平.
如果当前步骤还剩1秒,则开始降低音量:
if ([self.intervalSet currentStepTimeRemainingInSeconds] == 1) {
self.volumeIncrement = originalVolume/5.0f;
[NSTimer scheduledTimerWithTimeInterval:0.5f
target:self
selector:@selector(fadeVolumeOut:)
userInfo:[NSNumber numberWithInt:1]
repeats:NO];
}
Run Code Online (Sandbox Code Playgroud)
这是fadeVolumeOut:方法:
- (void) fadeVolumeOut:(NSTimer *)timer {
if (!TARGET_IPHONE_SIMULATOR) {
NSNumber *volumeStep = (NSNumber *)[timer userInfo];
int vStep = [(NSNumber *)volumeStep intValue];
float volume = [[MPMusicPlayerController iPodMusicPlayer] volume];
volume = volume - self.volumeIncrement; …Run Code Online (Sandbox Code Playgroud)我遇到以下问题:每当我将播放和录制类别设置为我的应用程序中的音频会话时,AirPlay就不可用:
[[AVAudioSession sharedInstance]
setCategory: AVAudioSessionCategoryPlayAndRecord
error: &setCategoryError];
Run Code Online (Sandbox Code Playgroud)
此调用使AirPlay消失并立即将音频重新路由到扬声器.
问题可以很容易地重现,例如在avTouchXcode文档中的示例项目中,通过用以下AVAudioSessionCategoryPlayback类别替换类别 AVAudioSessionCategoryPlayAndRecord:在原始示例中,AirPlay选择器是可见的并允许更改输出源,而AVAudioSessionCategoryPlayAndRecord选择器类别则消失.
有没有正确的方法切换到AVAudioSessionCategoryPlayAndRecord类别,以便AirPlay仍然可用?
(这样的问题已经被问到,但没有得到任何答案.)
所以在我的应用程序中,在iOS 6上运行,一切似乎都可以正常使用音频.我使用旧的C API格式来捕获使用回调的中断; 通过设置:AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, (__bridge void *)self)它很棒.但是,使用iOS 7 SDK时,似乎在设备接到呼叫或闹钟响起时,我的中断回调永远不会被调用.
经过一番环顾,我听说旧的C api已被弃用,你应该转向更新的AVAudioSession功能.更多阅读显示AVAudioSession委托已被弃用,您应该使用NSNotificationfor AVAudioSessionInterruptionNotification来捕获中断并做任何需要完成的事情.
对我来说,似乎这个通知从未被实际触发,因此我从未得到适当的中断,然后在通话结束后打破了我的所有音频内容.
我这样注册通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AudioInterruption:) name:AVAudioSessionInterruptionNotification object:nil];
Run Code Online (Sandbox Code Playgroud)
现在,该AudioInterruption:函数只是记录它被触发了.日志和任何断点都没有触发.
要清楚,最初音频播放和录制工作正常.发生中断时(例如来电或闹钟),不会触发中断通知.如果需要更多周围代码,请告诉我.
我有以下代码(重新)开始AVAudioEngine连接到AVAudioEngineConfigurationChangeNotification:
do {
try self.engine.start()
} catch {
DDLogError("could not start sound engine")
self.soundEnabled = false
return
}
Run Code Online (Sandbox Code Playgroud)
self.engine定义为
private let engine = AVAudioEngine()
Run Code Online (Sandbox Code Playgroud)
但是,我经常通过Crashlytics收到崩溃报告
致命异常:com.apple.coreaudio.avfaudio错误561015905
在包含的线上try self.engine.start().
561015905是AVAudioSessionErrorCodeCannotStartPlaying从我的理解,这应该是一个NSError错误代码,而不是一个例外,应该由我catch在上面的代码中的空白捕获.不过,该应用程序似乎只是崩溃了.我错过了什么?
我知道有些情况下应用程序会在可能发生此错误的后台唤醒,我会很好,只要我能够以某种方式发现它,就像我想的那样do/catch.
avaudiosession ×10
ios ×9
objective-c ×3
audio ×2
swift ×2
airplay ×1
cocoa-touch ×1
delegates ×1
interruption ×1
ios7 ×1
ipad ×1
iphone ×1
permissions ×1
record ×1