web-dev-qa-db-ja.com

デバイスがサイレントモードのときにオーディオを再生する-ios swift

Xcode 7.1、Swiftを使用してアプリケーションを作成しています。オーディオを再生したいです。すべて順調。今、私の問題は、デバイスがサイレントモードまたはミュートになっているときに音を聞きたいことです。どうすればいいですか?

次のコードを使用してオーディオを再生しています

currentAudio!.stop()
            currentAudio = try? AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("sample_audio", ofType: "mp3")!));

            currentAudio!.currentTime = 0

            currentAudio!.play();
26
Amsheer

play() AVPlayerのメソッドを呼び出す前にこの行を入れてください。

Objective Cの場合

[[AVAudioSession sharedInstance]
            setCategory: AVAudioSessionCategoryPlayback
                  error: nil];

In Swift

do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
 }
 catch {
    // report for an error
 }
67
rushisangani

Swift 3.0およびXcode> 8

デバイスがRINGERモードとSLIENTモードのときにビデオでサウンドを再生します

 do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        //print("AVAudioSession Category Playback OK")
        do {
            try AVAudioSession.sharedInstance().setActive(true)
            //print("AVAudioSession is Active")
        } catch _ as NSError {
            //print(error.localizedDescription)
        }
    } catch _ as NSError {
        //print(error.localizedDescription)
    }
6
Saumil Shah

Swift 4

ビデオを再生する前にこの行を使用してください

try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
4
faraz khonsari

AppDelegateクラスを使用できます。

デバイスがサイレントモードのときにサウンドを有効にする(オーディオまたはビデオ用)には、 AVAudioSessionCategoryPlaybackを使用します

func applicationDidBecomeActive(_ application: UIApplication) {

    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
    } catch {
        print("AVAudioSessionCategoryPlayback not work")
    }
}

デバイスがサイレントモードのとき(たとえば電話に応答するとき)にサウンドを無効にするには、 AVAudioSessionCategorySoloAmbientを使用します

func applicationWillResignActive(_ application: UIApplication) {

    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategorySoloAmbient)
    } catch {
        print("AVAudioSessionCategorySoloAmbient not work")
    }
}
4
maxwell

Swift 4.2

   do {
        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
    } catch let error {
        print("Error in AVAudio Session\(error.localizedDescription)")
    }
2
Yogendra Singh

あなたはこれを通過することができます、それはあなたを助けるでしょう

次のオーディオセッションカテゴリを使用する場合、iOSではサウンドはミュートされません:AVAudioSessionCategoryPlayback,AVAudioSessionCategoryRecord,AVAudioSessionCategoryPlayAndRecord

func playSound (Sound: String, Type: String) {

        //Prepare the sound file name & extension
        var alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(Sound, ofType: Type)!)

        //Preparation to play
        AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
        AVAudioSession.sharedInstance().setActive(true, error: nil)

        //Play audio

        var error: NSError?
        audioPlayer = AVAudioPlayer(contentsOfURL: alertSound, error: &error)
        audioPlayer.prepareToPlay()
        audioPlayer.play()
        }
0
Moin Shirazi
import AVKit

これをAppDelegateのapplicationDidBecomeActiveセクションに追加します

func applicationDidBecomeActive(_ application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
        do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback)
            print("AVAudioSession Category Playback OK")
            do {
                try AVAudioSession.sharedInstance().setActive(true)
                print("AVAudioSession is Active")
            } catch {
                print(error.localizedDescription)
            }
        } catch {
            print(error.localizedDescription)
        }
    }
0
Asha Antony

Swift 5.0.1

try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback)
0
bytepunch