获得在iPhone上播放音乐的力量

Gaw*_*ger 5 iphone audio objective-c ios

我正在拼命搜索如何在我的应用程序中通过iPod /音乐应用程序获得声音的强大功能.

我能找到的一切都是通过麦克风获取声音的力量,或通过AVAudioPlayer在我自己的应用程序中播放声音,然后使用averagePowerForChannel:方法.我还搜索了MPMusicPlayerController是否可以帮助我但是我得到的最接近的是"nowPlayingItem"的MPMediaItem,似乎我可以从当前播放的歌曲中获取大量信息,但没有像当前的功能那样.

有没有办法简单地在我的应用程序中获取从音乐应用程序播放的歌曲的当前功能?

DDP*_*AGE 0

Larme 的答案在 iOS 7 中已被弃用(volume属性MPMusicPlayeriPodMusicPlayer方法)。尝试这样做来获取AVAudioPlayer当前歌曲的实例(但是,当我这样做时,由于某种奇怪的原因,它总是返回-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);
Run Code Online (Sandbox Code Playgroud)