2013-03-22 9 views
6

Desidero creare un pulsante che silenzia l'audio da un AVPlayer.Controllo volume AVPlayer

Perché non posso utilizzare .volume con AVPlayer, solo con AVAudioPlayer? C'è un altro modo per cambiare il volume?

es music.volume = 0.0;

Grazie per le vostre risposte.

risposta

11

A partire dal iOS 7, semplicemente c tutti:

myAvPlayer.volume = 0; 

In caso contrario, si dovrà utilizzare la soluzione fastidioso setAudioMix. Sto rilevando il supporto per questo nella mia app come segue:

if ([mPlayer respondsToSelector:@selector(setVolume:)]) { 
    mPlayer.volume = 0.0; 
} else { 
    NSArray *audioTracks = mPlayerItem.asset.tracks; 

    // Mute all the audio tracks 
    NSMutableArray *allAudioParams = [NSMutableArray array]; 
    for (AVAssetTrack *track in audioTracks) { 
     AVMutableAudioMixInputParameters *audioInputParams =[AVMutableAudioMixInputParameters audioMixInputParameters]; 
     [audioInputParams setVolume:0.0 atTime:kCMTimeZero]; 
     [audioInputParams setTrackID:[track trackID]]; 
     [allAudioParams addObject:audioInputParams]; 
    } 
    AVMutableAudioMix *audioZeroMix = [AVMutableAudioMix audioMix]; 
    [audioZeroMix setInputParameters:allAudioParams]; 

    [mPlayerItem setAudioMix:audioZeroMix]; // Mute the player item 
} 
+2

Grazie Doug! Stavo cercando questo per un paio d'ore. Per fortuna basta impostare una proprietà su AVPLayer: D – Mapedd

+2

Una risposta perfetta, semplice, bella! –

+0

@doug perché l'hai cambiato in '1.0' - solo un refuso? – CupawnTae

3

Ho usato sotto il codice per silenziare AVPlayer.

float volSet = 0 ; 
AVAsset *avAsset = [[avPlayer currentItem] asset] ; 
NSArray *audioTracks = [avAsset tracksWithMediaType:AVMediaTypeAudio] ; 

NSMutableArray *allAudioParams = [NSMutableArray array] ; 
for(AVAssetTrack *track in audioTracks){ 
AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters] ; 
[audioInputParams setVolume:volSet atTime:kCMTimeZero] ; 
[audioInputParams setTrackID:[track trackID]] ; 
[allAudioParams addObject:audioInputParams]; 
} 
AVMutableAudioMix *audioVolMix = [AVMutableAudioMix audioMix] ; 
[audioVolMix setInputParameters:allAudioParams]; 
[[avPlayer currentItem] setAudioMix:audioVolMix]; 
+0

Questo funziona: [[MPMusicPlayerController applicationMusicPlayer] setVolume: 0.0 ]; –

+0

e questo non è AVPlayer, credo ... – BhushanVU

+0

funziona ancora ma imposta il volume di sistema – kezi

2

modo migliore è come seguendo

AVAssetTrack* assetTrackAudio = [arrayTracks objectAtIndex:0]; 

    AVMutableAudioMixInputParameters* audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters]; 
    [audioInputParams setVolume:currentVolume atTime:playerCursorStartPosition]; 
    [audioInputParams setTrackID:[assetTrackAudio trackID]]; 

    NSArray* audioParams = [NSArray arrayWithObject:audioInputParams]; 
    AVMutableAudioMix* audioMix = [AVMutableAudioMix audioMix]; 
    [audioMix setInputParameters:audioParams]; 

    AVPlayerItem* item = [player currentItem]; 
    [item setAudioMix:audioMix]; 
+0

Penso che funzioni solo con AVAudioPlayer. Quando lo uso con AVPlayer non succede nulla. –

+0

non funziona anche con AVPlayer. Ho fatto questo prima –

+1

@ user2196602: Funziona sicuramente con AVPlayer. Per favore controlla la [documentazione Apple] (http://developer.apple.com/library/ios/#qa/qa1716/_index.html) – execv

0

controlla questo link

apple documentation for muting audio

seguito è riportato il codice di

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[self myAssetURL] options:nil]; 
NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio]; 

// Mute all the audio tracks 
NSMutableArray *allAudioParams = [NSMutableArray array]; 
for (AVAssetTrack *track in audioTracks) { 
    AVMutableAudioMixInputParameters *audioInputParams =[AVMutableAudioMixInputParameters audioMixInputParameters]; 
    [audioInputParams setVolume:0.0 atTime:kCMTimeZero]; 
    [audioInputParams setTrackID:[track trackID]]; 
    [allAudioParams addObject:audioInputParams]; 
} 
AVMutableAudioMix *audioZeroMix = [AVMutableAudioMix audioMix]; 
[audioZeroMix setInputParameters:allAudioParams]; 

// Create a player item 
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset]; 
[playerItem setAudioMix:audioZeroMix]; // Mute the player item 

// Create a new Player, and set the player to use the player item 
// with the muted audio mix 
AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem]; 

// assign player object to an instance variable 
self.mPlayer = player; 

// play the muted audio 
[mPlayer play]; 
0

Come di iOS 7 v'è anche una proprietà muted su AVPlayer:

@property (nonatomic, getter=isMuted) BOOL muted NS_AVAILABLE(10_7, 7_0);