2010-09-18 15 views
43

Chcę utworzyć aplikację, która tworzy dźwięk, muzykę lub dźwięk systemowy, gdy iPhone jest w trybie cichym. Czy można odtwarzać dźwięk dowolnego rodzaju, niezależnie od tego, czy muzyka lub dźwięki systemowe są w trybie cichym?Odtwarzaj dźwięk na telefonie iPhone nawet w trybie cichym.

+13

Gdybym użytkownika, chciałbym być ostrzeżony przez które "feature" ... W końcu użytkownik, który przełącza telefon w tryb cichy, prawdopodobnie ma nadzieję, że telefon pozostanie cichy. –

+2

Myślałem, że celem trybu cichego było sprawić, by telefon pozostał ** cichy **? –

+0

jeśli były ważne numery, które należy wybrać, to jest pomocne –

Odpowiedz

111

To nie jest wskazane, ale kim jestem, aby powiedzieć, że nie możesz tego zrobić. Być może masz dobry powód, aby odtwarzać dźwięk.

Jeśli używasz sesji audio, a następnie obejmować <AVFoundation/AVFoundation.h> na początku pliku i

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

powinno załatwić sprawę. Uwaga: jeśli odtwarzasz muzykę lub dźwięki, odtwarzanie iPoda zostanie wstrzymane.

Gdy zostało to zrobione, prawdopodobnie gdzieś w inicjalizacji jednej z klas, które odtwarza dźwięki, można utworzyć wystąpienia brzmi tak:

// probably an instance variable: AVAudioPlayer *player; 
NSString *path = [[NSBundle mainBundle] pathForResource...]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url]; 

Kiedy to się robi, można grać z nim w każdej chwili chcesz z:

[player play]; // Play the sound 
[player pause]; // Pause the sound halfway through playing 
player.currentTime += 10 // skip forward 10 seconds 
player.duration // Get the duration 

I inne fajne rzeczy. Sprawdź odwołanie do klasy AVAudioPlayer.

+0

czy jest jakikolwiek kod do odtwarzania dźwięku w trybie cichym –

+7

To powinna być zaakceptowana odpowiedź. – Tyilo

+0

Cześć chłopaki, najpierw dzięki cool_me5000 za odpowiedź.W moim przypadku dźwięk brzmi, gdy aplikacja jest w tle (z minimalną głośnością), ale jeśli aplikacja jest na pierwszym planie (z minimalną głośnością), dźwięk nie jest odtwarzany. Testuję w pokerze iPoda touch 4 (powiedziałem to, ponieważ nie ma cichego przełącznika). Czy wiesz, co mogę zmienić, aby aplikacja brzmiała w obu sytuacjach? – xarly

12

Tak, można odtwarzać dźwięk, gdy telefon jest ustawiony na wibracje. Po prostu użyj klasy AVAudioPlayer.

By default, playing an Audio Session sound will ~not~ respect the setting of the mute switch on the iPhone. In other words, if you make a call to play a sound and the silent (hardware) switch on the iPhone is set to silent, you’ll still hear the sound.

To jest to, czego chcesz. Teraz wiesz, że grając w sesji audio, gdy Twój telefon jest w trybie cichym, nadal odtwarza dźwięk, który musisz tylko wiedzieć, jak utworzyć sesję audio, aby odtworzyć dźwięk, na przykład: pobrana z tej strony: http://iosdevelopertips.com/audio/playing-short-sounds-audio-session-services.html

SystemSoundID soundID; 
NSString *path = [[NSBundle mainBundle] 
    pathForResource:@"RapidFire" ofType:@"wav"];  

AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID); 
AudioServicesPlaySystemSound (soundID); 

Aby to działało, musisz zaimportować plik nagłówkowy, a także dodać AudioToolbox.framework do swojego projektu.

I to wszystko.

Od tej chwili wiesz, że możesz odtwarzać dźwięk, gdy telefon jest wibrujący. Nie potrzebujesz dodatkowego lub specjalnego kodu, aby umożliwić tę funkcję, ponieważ już to robi domyślnie.

Pk

+1

Już tego nie robi –

+2

Nie działa na iOS9 – user2875404

+1

@ user2875404 bez żartów. :) – Pavan

2

Wystarczy umieścić to w swojej viewDidLoad:

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, 
         sizeof(sessionCategory), &sessionCategory); 
9

Works na iOS 6 i powyżej

NSError *setCategoryErr = nil; 
NSError *activationErr = nil; 
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&setCategoryErr]; 
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr]; 
+0

w Swift 'zrobić { try AVAudioSession.sharedInstance(). SetCategory (AVAudioSessionCategoryPlayback) try AVAudioSession.sharedInstance(). SetActive (true) } catch niech błąd jak NSError { błąd raport // }' – Guy

1

Do odtwarzania dźwięku w trybie cichym, a nawet gdy idzie na tle, spróbuj tego:

P ut ten kod w aplikacji: didFinishLaunchingWithOpitons:

[[AVAudioSession sharedInstance] setDelegate:self]; 
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 
[[AVAudioSession sharedInstance] setActive:YES error:nil]; 
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

i ten kod w applicationDidEnterBackground:

[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; 
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

konfiguracja również tryb tła Odtwarzanie Audio/Air Play i obejmują AVFoundation nagłówek.

7

I Swift 2 i Swift 3

do { 
     try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
     try AVAudioSession.sharedInstance().setActive(true) 
    } catch { 
     print(error) 
    } 
1

dla Objective C, można odtwarzać dźwięk systemowy z następującego kodu:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 
*The system path could be modified.* 
NSString *path = @"/System/Library/Audio/UISounds/begin_record.caf"; 
NSURL *url = [NSURL fileURLWithPath:path]; 
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
[player play]; 
Powiązane problemy