标签: avaudiosession

AVCaptureSession和背景音频iOS 7

每当我启动以麦克风作为输入运行的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

14
推荐指数
2
解决办法
6149
查看次数

Cocos2D 2.1:iOS 6中不推荐使用"Delegate".如何设置此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中不推荐使用."请使用此类通知部分中描述的通知.

http://developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVAudioSession_ClassReference/DeprecationAppendix/AppendixADeprecatedAPI.html#//apple_ref/occ/instp/AVAudioSession/delegate

问题是,它看起来就像我们想要做的一样 - 原谅我的经验不足 - 将AVAudioSession的委托设置为CDAudioManager实例本身.通知如何实现这一目标?或者我对上述代码的目标错了吗?

delegates cocos2d-iphone avaudiosession

13
推荐指数
3
解决办法
1万
查看次数

如何在iOS Lock Screen控制面板中启用音频滑块?

我有以下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)

其他一切工作正常,但我无法使用滑块寻找歌曲.如图所示.我错过了什么参数?

锁屏截图

avaudioplayer ios avaudiosession mpnowplayinginfocenter

13
推荐指数
1
解决办法
4649
查看次数

requestRecordPermission什么都不做

自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中可用.

谢谢.

permissions record ios avaudiosession ios7

13
推荐指数
2
解决办法
7405
查看次数

使用Spotify /背景音乐打开相机

我有一个需要的应用程序:

  • 使用应用程序时播放的背景音乐(例如,spotify)
  • 播放背景音乐,当观看从AVPlayer的电影时
  • 录制视频时停止播放音乐

像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如何做到这一点?!

任何帮助将不胜感激,我很乐意提供更多信息或代码!

iphone audio objective-c ios avaudiosession

13
推荐指数
1
解决办法
4259
查看次数

聆听音量按钮按下的正确方式(iOS 15)

我用过

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)

即使音量处于最大/最小,聆听用户按下音量控制按钮的正确方法是什么?

avaudioplayer ios avaudiosession swift

13
推荐指数
1
解决办法
2148
查看次数

降低iPod音量以播放应用程序声音(如本机SMS应用程序)

我做了一个iPhone应用程序,在运动时使用.它会播放铃声,表示您(用户)应该从练习例程的一个步骤切换到下一个步骤.我设计了应用程序,以便您在使用应用程序时可以在iPod上听音乐,我希望音调可以在音乐上充分发声.我已经让这个工作......有点......

当音乐响亮时,很难听到音调.我理想的解决方案类似于iPod应用程序处理传入短信或电子邮件的方式.音乐音量降低,声音播放,音乐音量逐渐消失.

以下是我到目前为止尝试过的方法:

  1. 我以前常常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 ...

  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)

cocoa-touch avaudioplayer iphone-sdk-3.0 ios avaudiosession

12
推荐指数
2
解决办法
6743
查看次数

AVAudioSessionCategoryPlayAndRecord使AirPlay不可见

我遇到以下问题:每当我将播放和录制类别设置为我的应用程序中的音频会话时,AirPlay就不可用:

[[AVAudioSession sharedInstance]
        setCategory: AVAudioSessionCategoryPlayAndRecord
        error: &setCategoryError];
Run Code Online (Sandbox Code Playgroud)

此调用使AirPlay消失并立即将音频重新路由到扬声器.

问题可以很容易地重现,例如在avTouchXcode文档中的示例项目中,通过用以下AVAudioSessionCategoryPlayback类别替换类别 AVAudioSessionCategoryPlayAndRecord:在原始示例中,AirPlay选择器是可见的并允许更改输出源,而AVAudioSessionCategoryPlayAndRecord选择器类别则消失.

有没有正确的方法切换到AVAudioSessionCategoryPlayAndRecord类别,以便AirPlay仍然可用?

(这样的问题已经被问到,但没有得到任何答案.)

objective-c ipad ios avaudiosession airplay

12
推荐指数
1
解决办法
2368
查看次数

AVAudioSession中断

所以在我的应用程序中,在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:函数只是记录它被触发了.日志和任何断点都没有触发.

要清楚,最初音频播放和录制工作正常.发生中断时(例如来电或闹钟),不会触发中断通知.如果需要更多周围代码,请告诉我.

audio interruption ios avaudiosession

12
推荐指数
1
解决办法
9891
查看次数

AVAudioEngine.start()崩溃,即使它包含在do/catch中

我有以下代码(重新)开始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.

ios avaudiosession swift avaudioengine

12
推荐指数
2
解决办法
1939
查看次数