Tag: avaudiosession

IOS:在后台播放声音

我正在一个小应用程序,我想要手机播放来自我的位置控制器的事件的声音文件。 问题是,当应用程序处于后台模式时,AVAudioPlayer不启动audio文件,但代码已经调度,获得NSLog输出。 另一件事是它在模拟器,但不是在手机上。 不是吗? 这是我的代码来播放文件: – (void)tryPlayTaleSound:(NSString*)fileName { NSString *backgroundMusicPath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"mp3"]; NSURL *backgroundMusicURL = [NSURL fileURLWithPath:backgroundMusicPath]; NSError *error; backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error]; // Check to see if iPod music is already playing //UInt32 propertySize = sizeof(otherMusicIsPlaying); //AudioSessionGetProperty(kAudioSessionProperty_OtherAudioIsPlaying, &propertySize, &otherMusicIsPlaying); // Play the music if no other music is playing […]

iOS AudioSessionSetActive()阻塞主线程?

在我的iOS应用程序中,我试图实现“躲闪”:当我的应用程序播放一个简短的“命令式”声音时,任何背景音乐都应该降低音量。 播放完毕后,音量应该恢复到原来的值。 实施后,躲避基本上按预期工作。 但是,当我在audioPlayerDidFinishPlaying中调用AudioSessionSetActive(NO)时:为了结束回避,在此时发生的任何UI更新中都有一个小的停顿。 这涉及到自定义绘图,以及为前。 自动滚动文字等等。 现在,这是一个问题: 这是iOS6中的一个已知问题吗? 我在iPod / iOS5上运行相同的代码,我没有看到这种行为。 或者我错过了代码的东西? 也许你们中的一个已经遇到同样的问题,并find一个可行的解决scheme。 非常感谢您的支持, 戈茨 – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //… NSError *err = nil; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:&err]; //… } – (void) playSound { // Enable ducking of music playing in the background (code taken from the Breadcrumb iOS Sample) UInt32 value = […]

audio会话中断结束后,AVAudioRecorder不能在后台录音

我在我的应用程序录制audio,无论是在前景和背景。 我也处理AVAudioSessionInterruptionNotification中断开始时停止录音,当它结束时再次开始。 虽然在前台它如预期的那样工作,当应用程序在后台录制时,我收到一个电话,它不会在通话结束后再次开始录音。 我的代码如下: – (void)p_handleAudioSessionInterruptionNotification:(NSNotification *)notification { NSUInteger interruptionType = [[[notification userInfo] objectForKey:AVAudioSessionInterruptionTypeKey] unsignedIntegerValue]; if (interruptionType == AVAudioSessionInterruptionTypeBegan) { if (self.isRecording && !self.interruptedWhileRecording) { [self.recorder stop]; self.interruptedWhileRecording = YES; return; } } if (interruptionType == AVAudioSessionInterruptionTypeEnded) { if (self.interruptedWhileRecording) { NSError *error = nil; [[AVAudioSession sharedInstance] setActive:YES error:&error]; NSDictionary *settings = @{ AVEncoderAudioQualityKey: @(AVAudioQualityMax), […]

AVAudioSession中断

所以在我的应用程序,在iOS 6上运行,似乎一切正常与audio。 我使用旧的C API格式来使用callback来捕获中断。 通过设置: AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, (__bridge void *)self) ,这是伟大的。 尽pipe使用iOS 7 SDK,似乎我的中断callback从来没有被调用,当设备接到电话或闹钟closures。 听了一些后,我听说旧的C API已被弃用,你应该转移到新的AVAudioSessionfunction。 更多的阅读表明,AVAudioSession委托已被弃用,你应该使用AVAudioSessionInterruptionNotification的NSNotification捕捉中断,做任何需要做的事情。 对我来说,似乎这个通知从来没有真正被解雇,所以我从来没有得到正确的打断,这就打破了通话结束后的所有audio内容。 我注册了这样的通知: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AudioInterruption:) name:AVAudioSessionInterruptionNotification object:nil]; 现在, AudioInterruption:函数简单地logging它被触发。 日志和任何断点都不会被触发。 要清楚,最初的audio播放和录音工作正常。 发生中断时(例如来电或警报),不会触发中断通知。 如果需要更多的周边代码,请告诉我。

AVAudioRecorder averagePowerForChannel总是返回-120.0

我正在尝试使用AVAudioRecorder的averagePowerForChannel方法来监视iPad / iPhone应用程序的麦克风input级别。 我有一个callback轮询平均水平 – 在iPhone上工作正常,并返回合理的水平,但由于某种原因在iPad上,它总是返回-120.0。 这里是我的一些设置代码: – (void) setupMic { if (micInput) { [micInput release]; micInput = nil; } NSURL *newURL = [[NSURL alloc] initFileURLWithPath:@"/dev/null"]; NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init]; [recordSettings setObject:[NSNumber numberWithInt:kAudioFormatAppleLossless] forKey: AVFormatIDKey]; [recordSettings setObject:[NSNumber numberWithFloat:22050.0] forKey: AVSampleRateKey]; // [recordSettings setObject:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey]; [recordSettings setObject:[NSNumber numberWithInt:12800] forKey:AVEncoderBitRateKey]; [recordSettings setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; […]

替代弃用的AudioSessionGetProperty,适用于iOS 7

我正在使用AudioSessionGetProperty来检查'audioIsAlreadyPlaying'。 Xcode说: 'AudioSessionGetProperty'已被弃用:首先在iOS 7.0中弃用 请有人告诉我,我应该用什么来获得audioIsAlreadyPlaying属性。 AudioSessionGetProperty(kAudioSessionProperty_OtherAudioIsPlaying, &propertySize, &audioIsAlreadyPlaying); return audioIsAlreadyPlaying;

AVAudioPlayer在locking屏幕上

我已经使用AVAudioPlayer (而不是AVPlayer )实现了一个audio播放器。 我可以用下面的方法处理远程控制事件。 到目前为止,它工作得很好,但是我看到这些事件UIEventSubtypeRemoteControlEndSeekingForward两个subtypes : UIEventSubtypeRemoteControlEndSeekingForward和UIEventSubtypeRemoteControlEndSeekingBackward 。 – (void)remoteControlReceivedWithEvent:(UIEvent *)event { //if it is a remote control event handle it correctly if (event.type == UIEventTypeRemoteControl) { if (event.subtype == UIEventSubtypeRemoteControlPlay) { [self playAudio]; } else if (event.subtype == UIEventSubtypeRemoteControlPause) { [self pauseAudio]; } else if (event.subtype == UIEventSubtypeRemoteControlTogglePlayPause) { [self togglePlayPause]; } else if […]

iOS – AVAudioPlayer在后台不会继续播放下一首歌曲

所以我有一个应用程序,播放一堆歌曲,而用户可以翻阅一本漫画书。 我使用AVAudioPlayer,并设置了播放歌曲的顺序。 所以当一首歌完成后,下一首将会播放。 这应用程序打开时,完美的工作。 当应用程序在后台时发生问题。 我设置了应用程序在后台播放,而且工作正常。 所以当用户按下主屏幕时,音乐继续播放。 问题发生在歌曲结束时,应该打开应用程序时播放下一首歌曲。 相反,没有发生。 根据我的NSLog语句正确的方法被调用,但没有任何反应。 这是我的代码: – (void)audioPlayerDidFinishPlaying: (AVAudioPlayer *)player successfully: (BOOL) flag { NSLog(@"Song finished"); if ([songSelect isEqualToString: @"01icecapades"]) { isPlay = @"yes"; songSelect = @"02sugarcube"; imageSelect = @"playbanner02"; [self performSelector:@selector(triggerSong) withObject:nil afterDelay:0]; [self performSelector:@selector(triggerBanner) withObject:nil afterDelay:0]; } else if ([songSelect isEqualToString: @"02sugarcube"]) { isPlay = @"yes"; songSelect = […]

在endInterruption调用AVAudioSessionDelegate,但不调用beginInterruption

当应用程序启动并将代理设置为appDelegate时,我正在设置AVAudioSession。 似乎一切似乎正在工作(播放等),除了在代表的beginInterruption没有被调用时,电话接到一个电话。 当通话结束endInterruption正在被调用。 我唯一的想法是,我使用的audio播放器代码基于AVAudioPlayer,但现在使用AVPlayer。 AVAudioPlayer委托处理中断的callback函数仍然存在,但是看起来很奇怪,它们会以任何方式冲突。

AVAudioRecorder支持什么格式的声音录制?

我在http://developer.apple.com/library/ios/#documentation/MusicAudio/Reference/CoreAudioDataTypesRef/Reference/reference.html#//apple_ref/doc/find了不同的值列表(audio数据格式) UID / TP40004488 audio数据格式标识符audio数据格式的标识符,用于AudioStreamBasicDescription结构中。 kAudioFormatLinearPCM ='lpcm', kAudioFormatAC3 ='ac-3', kAudioFormat60958AC3 ='cac3', kAudioFormatAppleIMA4 ='ima4', kAudioFormatMPEG4AAC ='aac', kAudioFormatMPEG4CELP ='celp', kAudioFormatMPEG4HVXC ='hvxc', kAudioFormatMPEG4TwinVQ ='twvq', kAudioFormatMACE3 ='MAC3', kAudioFormatMACE6 ='MAC6', kAudioFormatULaw ='ulaw', kAudioFormatALaw ='alaw', kAudioFormatQDesign ='QDMC', kAudioFormatQDesign2 ='QDM2', kAudioFormatQUALCOMM ='Qclp', kAudioFormatMPEGLayer1 ='.mp1', kAudioFormatMPEGLayer2 ='.mp2', kAudioFormatMPEGLayer3 ='.mp3', kAudioFormatTimeCode ='时间', kAudioFormatMIDIStream ='midi', kAudioFormatParameterValueStream ='apvs', kAudioFormatAppleLossless ='alac' kAudioFormatMPEG4AAC_HE ='aach', kAudioFormatMPEG4AAC_LD ='aacl', kAudioFormatMPEG4AAC_ELD ='aace', […]