iOS - 拨打电话时在后台播放声音

时间:2015-08-05 11:31:13

标签: ios objective-c audio call

我在Obj-C中有一个可以拨打电话的应用程序,我想在用户按下按钮开始通话时发出声音。 打电话时,声音是否会在后台继续播放? 如果是这样,我怎么能实现这个目标呢?

先谢谢你

4 个答案:

答案 0 :(得分:1)

在.caf中查找声音或使用像这样的dafault

@property (assign) SystemSoundID pewPewSound;
@property (nonatomic) NSArray * soundArray;
self.soundArray = @[@"DECKALRM",@"LOW_GONG10"];

// sound - url path to your sound,(NSString*)[self.soundArray objectAtIndex:0];
// @"DECKALRM" - you custom sound name in your project

NSURL * pewPewURL = [[NSBundle mainBundle]URLForResource:sound withExtension:@"caf"];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)pewPewURL, &_pewPewSound);
AudioServicesPlaySystemSound(self.pewPewSound);

停止声音

AudioServicesRemoveSystemSoundCompletion(self.pewPewSound);
AudioServicesDisposeSystemSoundID(self.pewPewSound);

尝试举例this sound

答案 1 :(得分:1)

正在进行运营商电话呼叫时,绝对无法播放声音。

  

有时,当前播放的音频会被来自其他应用的音频中断。例如,在iPhone上,来电通话会在通话期间中断当前应用的音频。在多任务处理环境中,此类音频中断的频率可能很高。

与拨打电话的行为相同。它会在通话期间中断当前应用的音频(播放/录音)。

您可以在此处阅读更多内容:iOS Human Interface Guide

答案 2 :(得分:1)

请尝试此代码,这将在通话期间播放背景音。

但这有一个问题,它会在接收方产生回声。

请分享您的反馈并尝试解决回声问题

快乐编码:)

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:self.bgAudioFileName ofType: @"mp3"];    

NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath ];

myAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];

myAudioPlayer.numberOfLoops = -1;

 NSError *sessionError = nil;

    // Change the default output audio route

 AVAudioSession *audioSession = [AVAudioSession sharedInstance];

 // get your audio session somehow

 [audioSession setCategory:AVAudioSessionCategoryMultiRoute error:&sessionError];



BOOL success= [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:&sessionError];

[audioSession setActive:YES error:&sessionError];
    if(!success)
    {
        NSLog(@"error doing outputaudioportoverride - %@", [sessionError localizedDescription]);
    }
    [myAudioPlayer setVolume:1.0f];
    [myAudioPlayer play];
}

答案 3 :(得分:0)

创建一个 AudioSession 并按照以下方式播放音频文件 - 希望它对你有用!

func playBackgroundAudioSample() {
    let path = Bundle.main.path(forResource:"Morningsun", ofType: "mp3")
    
    self.customAudioSession = AVAudioSession()
    do {
        self.customAudioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: path!))
        try self.customAudioSession?.setCategory(.playAndRecord, mode: .default, options: [.allowBluetooth, .allowBluetoothA2DP, .mixWithOthers])
        self.customAudioPlayer?.play()
        print("Playback OK")
    }
    catch let error {
        print("Error while playing Bg sound:\(error)")
    }
}