在iPhone中播放音乐的威力

在iPhone中播放音乐的威力,iphone,objective-c,ios,audio,Iphone,Objective C,Ios,Audio,我正在拼命寻找如何在我的应用程序中通过iPod/音乐应用程序播放声音 我所能找到的一切都是关于通过麦克风获得声音的能量,或者通过AVAudioPlayer在我自己的应用程序中播放声音,然后使用averagePowerForChannel:方法。 我还搜索了MPMusicLayerController是否可以帮助我,但我从“nowPlayingItem”中得到的最接近我想要的是MPMediaItem,似乎我可以从当前播放的歌曲中获取很多信息,但与当前的电源不同 有什么方法可以简单地从我的应用程序中

我正在拼命寻找如何在我的应用程序中通过iPod/音乐应用程序播放声音

我所能找到的一切都是关于通过麦克风获得声音的能量,或者通过AVAudioPlayer在我自己的应用程序中播放声音,然后使用averagePowerForChannel:方法。 我还搜索了MPMusicLayerController是否可以帮助我,但我从“nowPlayingItem”中得到的最接近我想要的是MPMediaItem,似乎我可以从当前播放的歌曲中获取很多信息,但与当前的电源不同


有什么方法可以简单地从我的应用程序中的音乐应用程序获取当前播放歌曲的能量吗?

试试这个:
myPlayer=[MPMusicLayerController iPodMusicLayer]

您可以使用
myPlayer.volume
获取音量。
这是一个浮子。步骤为1/16。

Larme的答案在iOS 7中不受欢迎(MPMusicLayer
volume
属性和
IPodMusicLayer
方法)。试着用当前歌曲获得一个
AVAudioPlayer
实例(但是,当我做我的歌时,出于某种奇怪的原因,它总是返回
-120 dB
):

AVAudioPlayer*somePlayer=[AVAudioPlayer new];
__自动删除N错误*错误;
somePlayer=[somePlayer initWithContentsOfURL:[[MPMusicLayerController SystemMusicLayer]nowPlayingItem]属性值:MPMediaItemPropertyAsetUrl]错误:&error];
somePlayer.currentTime=[[MPMusicLayer控制器系统MusicLayer]当前播放时间];
somePlayer.volume=0;
[某个玩家玩];
[somePlayer setMeteringEnabled:是];
[somePlayer updateMeters];
NSMUTABLEARRY*amps=[NSMUTABLEARRY];
如果(错误!=nil){
NSLog(@“error:%@”,error.debugDescription);
}
for(int i=0;i
这是音量,不是电源。功率是一刻一刻的水平,是你在分贝表上看到的东西。(如果功率为0,则无论音量大小,都不会发出声音。)音量现在已被弃用。我已多年不参与此项目,因此我不确定您的答案是否有效(Larme的答案获得的是音量,而不是AlexChaffee评论的功率),但这似乎是我当时正在寻找的东西,所以我无论如何都会接受。希望你能帮助别人回答这个问题:)
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);