2014-06-09 18 views
41

Tôi đang thử nghiệm ứng dụng của mình trong XCode 6 và tìm sự cố với AVAudioSession trong iOS8.iOS8 AVAudioSession setKích hoạt lỗi

Khi tôi gọi

[[AVAudioSession sharedInstance] setActive:NO error:nil];

tôi nhận được thông báo lỗi sau:

AVAudioSession.mm:623: -[AVAudioSession setActive:withOptions:error:]: Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.

Trong AVAudioSession.h, nó nói

Note that this method will throw an exception in apps linked on or after iOS 8 if the session is set inactive while it has running or paused I/O (e.g. audio queues, players, recorders, converters, remote I/Os, etc.).

Nhưng tôi không chắc chắn như thế nào có thể Tôi kiểm tra xem có đang chạy I/O không và làm thế nào tôi có thể vứt bỏ tất cả khi tôi cần đặt lại phiên âm thanh.

+1

Bạn có thể giải thích ngữ cảnh và đưa ra trường hợp sử dụng tại sao bạn muốn kiểm tra xem có đang chạy I/O không? – vladof81

+0

@vladof Nếu không có lỗi như vậy, tôi không cần phải kiểm tra chạy I/O. Vì vậy, tình hình là, tôi muốn chắc chắn rằng không có chạy I/O khi tôi gọi setActive: NO – xialin

+0

Bạn có sửa lỗi này không? – Anton

Trả lời

10

Tôi đã giải quyết vấn đề này, chèn mã này vào phương thức AVAudioPlayerDelegate.

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{ 
    [audioPlayer stop]; 
    [audioPlayer prepareToPlay]; 
} 

nơi audioPlayer là biến được khai báo trong tiêu đề lớp học của tôi.

hướng dẫn PrepareToPlay sẽ giải quyết vấn đề của bạn!

+0

cũng đã giải quyết được vấn đề của tôi !! cảm ơn!! – arjavlad

+1

không hoạt động với tôi trong iOS 9.3: -/ – d4Rk

+0

@ d4Rk nó cho tôi trên iOS 9.3: '[audioPlayer stop]; [audioPlayer PrepareToPlay]; [[AVAudioSession sharedInstance] setActive: NO lỗi: nil]; ' –

0

tôi pasueed avplayer tôi trước khi AVAudioSession setActive NO;

[self.audioPlayer pause]; [[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];

1

Được cảnh báo. Nếu bạn đang phát một bộ phim (ngay cả khi không có âm thanh và đoạn âm thanh bị xóa) thì nó vẫn sẽ tạo một chuỗi I/O sẽ luôn gây ra lỗi trên.

1

Tôi đang sử dụng AVAudioEngine và AVAudioPlayerNode để phát âm thanh. Tôi gặp cùng một vấn đề. Môi trường của tôi là iOS 10.

Tôi sử dụng AVAudioSession.sharedInstance() để xử lý AVAudioSession. Khi tôi chạy ứng dụng của tôi trong mô phỏng mọi thứ đều ổn, nhưng khi tôi chuyển nó sang thiết bị của mình. Nó đã thất bại.

Tôi cho rằng tôi đang sử dụng cùng một phiên để xử lý ghi và phát. Vì vậy, nó có thể gây ra một số vấn đề lạ. Trong trường hợp của tôi, tôi ghi lại âm thanh và trì hoãn 1 giây để chơi nó. Vì vậy, khi tôi sử dụng stopRecordingAudio(), tôi thêm đoạn mã này:

if audioEngine.running { 
    audioEngine = AVAudioEngine() // var audioEngine = AVAudioEngine() 
    try! AVAudioSession.sharedInstance().setActive(false) 
} 

Sau khi xác định lại audioEngine, audioEngine đã bị buộc phải dừng lại và phiên được phát hành. Tai nạn không bao giờ xảy ra nữa.

Hy vọng thư này có thể giúp bạn.

Các vấn đề liên quan