0
首先:我對音頻處理了解不多。我知道與核心音頻,你可以得到一個播放軌道的信息。iPhone - 獲取當前點的音頻振幅
我的目標是在SpriteKit節點與當前歌曲從iTunes是它的規模(比如,規模應在1.0
在其最響亮和0.0
在最安靜的)的電流幅值/響度。
我可以做節點編程(將xScale
和yScale
設置爲float
amp
)。我的問題涉及獲得amp
的價值。
這裏是我的代碼:
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 averagePowerForChannel:i]);
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);
// set xScale and yScale to "amp"
[somePlayer stop];
我得到的是-120 dB
和滯後的恆定輸出(這是我的update
方法)。它通常是60 fps,在我的iPhone 6上是10-11。任何想法如何解決這個問題?我在網上搜索了一個小時,但什麼也沒有。