iphone - 获得在 iPhone 中播放的音乐的力量

标签 iphone objective-c ios audio

我正在拼命寻找如何在我的应用程序中获得通过 iPod/Music 应用程序播放的声音的力量。

我所能找到的一切都是关于通过麦克风获得声音的力量,或者通过 AVAudioPlayer 在我自己的应用程序中播放声音,然后使用 averagePowerForChannel: 方法。 我还搜索了 MPMusicPlayerController 是否可以帮助我,但我从我想要的最接近的是“nowPlayingItem”的 MPMediaItem,而且我似乎可以从当前播放的歌曲中访问很多信息,但没有像当前功率那样的信息。

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

最佳答案

Larme 的回答在 iOS 7 中被弃用(MPMusicPlayervolume 属性和 iPodMusicPlayer 方法)。尝试使用此方法获取当前歌曲的 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);

关于iphone - 获得在 iPhone 中播放的音乐的力量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13086620/

相关文章:

ios - iOS 7 状态栏中的 MFMailComposeViewController 是黑色的

iphone - 如何在 iOS 应用程序中实现自定义(平面图图像) map ……?

iphone - 尝试使用 EventKit 时获取 "Undefined symbols"?

ios - 我如何 "hide"一个 UIRefreshControl?

iphone - 更新 XCode 项目模板详细信息

iphone - 如何在 iOS 6 中登录 facebook?

ios - Json解析、字典值打印

ios - 在 C 中分配/释放结构指针的动态数组

iphone - 关闭/呈现模态视图 Controller - viewdidLoad 再次调用

ios - Swift `=String()` 和 `: String!` 中的 2 个字符串初始化有什么区别