2012-10-26 8 views
5

Sto cercando disperatamente come ottenere la potenza di un suono riprodotto tramite l'app iPod/Music nella mia applicazione.Ottenere la potenza di una musica riprodotta in iPhone

Tutto ciò che sono riuscito a trovare era ottenere la potenza di un suono tramite il microfono o riprodurre un suono nella mia app tramite AVAudioPlayer e quindi utilizzare il metodo averagePowerForChannel :. Ho anche cercato se il MPMusicPlayerController poteva aiutarmi, ma il più vicino che ottengo da quello che voglio è l'MPMediaItem di "nowPlayingItem", e sembra che io possa accedere a molte informazioni dal brano attualmente riprodotto, ma niente come il potere attuale .

C'è un modo per ottenere semplicemente la potenza corrente di un brano riprodotto dall'app Musica nella mia app?

risposta

0

La risposta di Larme è deprecata con iOS 7 (l'attributo volume di MPMusicPlayer e il metodo iPodMusicPlayer). Prova a modificare per ottenere un'istanza AVAudioPlayer con il brano corrente (tuttavia, quando lo faccio mio, per qualche strana ragione, ritorna sempre -120 dB):

AVAudioPlayer *somePlayer = [AVAudioPlayer new]; 
__autoreleasing NSError* error; 
somePlayer = [somePlayer initWithContentsOfURL:[[[MPMusicPlayerController systemMusicPlayer] nowPlayingItem] valueForProperty:MPMediaItemPropertyAssetURL] error:&error]; 
somePlayer.currentTime = [[MPMusicPlayerController systemMusicPlayer] currentPlaybackTime]; 
somePlayer.volume = 0; 
[somePlayer play]; 
[somePlayer setMeteringEnabled:YES]; 
[somePlayer updateMeters]; 
NSMutableArray* amps = [NSMutableArray array]; 
if (error != nil) { 
    NSLog(@"error: %@", error.debugDescription); 
} 
for (int i = 0; i < somePlayer.numberOfChannels; i++) { 
    [amps addObject:@(([somePlayer peakPowerForChannel:i] + 160.0)/160.0)]; 
    NSLog(@"Amplitude: %f db for channel %i", [somePlayer averagePowerForChannel:i], i); 
} 
float amp = 0; 
for (NSNumber *x in amps) { 
    amp += [x floatValue]; 
} 
amp /= amps.count; 
NSLog(@"amp: %f", amp); 
+0

Non lavoro più su questo progetto da anni, quindi non sono sicuro che la risposta funzioni (la risposta di Larme arriva il volume, e non il potere come ha commentato AlexChaffee), ma questo sembra essere il tipo di cose che stavo cercando in quel momento, quindi lo accetterò comunque. Spero che aiuti qualcun altro con questa risposta :) – GawenBerger

0

Prova questo: myPlayer = [MPMusicPlayerController iPodMusicPlayer];

È possibile ottenere il volume con myPlayer.volume. È un galleggiante. Un passaggio è 1/16.

+1

Questo è il volume, non il potere. Il potere è il livello momento per momento, la cosa che vedresti su un misuratore di decibel. (Se la potenza è 0, non viene emesso alcun suono, a prescindere dal volume.) – AlexChaffee

+0

Il volume è ora obsoleto –

Problemi correlati