我試圖在我的應用中獲取iOS的iPod播放歌曲的分貝水平。我知道我可以用[[[MPMusicPlayerController iPodMusicPlayer] nowPlayingItem]獲得關於該歌曲的信息,並且我知道我可以使用AVAudioPlayer peakPowerForChannel方法來分辨歌曲的分貝級別,但是我沒有運氣串起這兩者來對歌曲進行採樣當前播放歌曲的分貝級別。當前歌曲在後臺播放的樣本分貝水平
回答
我正在尋找同樣的東西,我能夠做到這一點,但它不是一個簡單的過程。
首先,我使用TSLibraryExport將iPod中的歌曲導出到我的app目錄中。原因是經過多次嘗試,1)AVPlayer和MPMusicPlayerController根本不會給你分貝級別。 2)無論如何,AVAudioPlayer不會從MediaPicker讀取MPMediaItemPropertyAssetURL。似乎來自iPod的NSURL不是真正的文件路徑,因此它不會讀取它。至少我不能這樣做。
所以,
1)立即下載的TSLibraryExport,你會看到從iPod導出到您的應用程序的方法。我只是用這些從圖書館:
-(IBAction) handleExportTapped {}
-(void) updateExportProgress: (NSTimer*) timer {} //this is actually nice to display the progress
-(void) setUpAVPlayerForURL: (NSURL*) url {} //this is triggered after the export is done
static BOOL coreAudioCanOpenURL (NSURL* url) {}
static NSString* myDocumentsDirectory() {}
2)一旦你能夠從iPod的出口到你的應用程序,在setUpAVPlayerForURL或任何你的方法名是初始化AVAudioPlayer。
-(void) setUpAVPlayerForURL: (NSURL*) url {
newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: url error: nil];
[newPlayer setMeteringEnabled:YES];
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(getLevel:) userInfo:nil repeats: YES];
[newPlayer play];}
newPlayer是在頭文件中聲明的AVAudioPlayer實例變量。
3)現在,您已將歌曲導入到您的應用中,並且正在播放,您可以顯示分貝的方式。在我的測試中,我只是將它們放入標籤中。
- (void)getLevel:(NSTimer *)timer {
if (newPlayer.playing == YES) {
[newPlayer updateMeters];
dBLevel = [newPlayer averagePowerForChannel:1]; //dBlevel is a float ivar declared in my header file
dBLabel.text = [NSString stringWithFormat:@"%.01f",dBLevel]; //%.01f is just to show 2 decimals
nowPlayingLabel.text = [NSString stringWithFormat:@"%.01f",[newPlayer peakPowerForChannel:1]];
}
關於這個壞事是因爲要複製的文件,你的應用程序將需要更多的空間,和第二,我認爲用戶可能因爲不同的文件類型,不會導出文件,兼容性,等等等等等等......
我希望這有助於。我花了幾天的時間嘗試在網上閱讀很多東西后想出一個解決方案,但這似乎是唯一一個使它成爲可能的解決方案。
答案可以在這個問題上找到:How can I implement a volume meter for a song currently playing? (iPhone OS 3.1.3)
它使用的AVAudioPlayer
averagePowerForChannel
還有一個代碼示例完成:
如果你想這個通過選擇曲目整合從媒體播放器,以下鏈接建議在此過程中:
iphone - Using MPMediaItems with AVAudioPlayer - Stack Overflow
我能夠以更簡單的方式做到你想要的混合。
代碼很簡單,我猜你是在嘗試類似的事情。這對我有效:
MPMediaItem *item = musicPlayer.nowPlayingItem;
NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL];
[self playSong:url];
_audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[_audioPlayer setNumberOfLoops:-1];
[_audioPlayer setMeteringEnabled:YES];
- 1. AppleScript改變當前在iTunes中播放的歌曲的評分
- 2. 如何停止當前播放的歌曲並播放下一首歌曲?
- 3. 本地通知使用swift在後臺播放歌曲?
- 4. 使用AVAudioPlayer播放當前播放歌曲的藝術作品
- 5. Android:在播放新歌之前停止播放歌曲。
- 6. 網絡音樂播放器可以播放歌曲樣本
- 7. 如何在cookie中保存當前正在播放的歌曲?
- 8. 獲取當前正在播放的Windows媒體播放器中的歌曲
- 9. 獲取當前正在播放歌曲的Windows媒體播放器
- 10. 如何獲取在jPlayer中播放歌曲的當前時間?
- 11. 在iTunes中獲取當前播放的歌曲
- 12. 從spotify使用libspotify獲取當前正在播放的歌曲
- 13. 當前正在從Windows 10播放歌曲'正在播放'卡片
- 14. 停止播放歌曲然後播放新歌曲(播放歌曲不會停止)
- 15. mediaPlayer CompletionListener在完成歌曲之前播放下一首歌曲
- 16. iOS - AVAudioPlayer不會在後臺繼續播放下一首歌曲
- 17. Flash播放器「現在播放列表」不中斷當前歌曲
- 18. 如何在ubuntu上點擊任何其他歌曲後停止當前正在播放的歌曲
- 19. 選擇歌曲在微調然後播放歌曲Android開發
- 20. 檢索當前播放的歌曲的Spotify的專輯封面
- 21. AxWindowsMediaPlayer播放歌曲
- 22. 播放DRM歌曲
- 23. C#:AxWMPLib - 播放歌曲的一部分
- 24. Swift IOS:獲取當前播放歌曲的標題
- 25. 獲取當前播放的歌曲標題和藝術家
- 26. 如何使用Python獲取Rhythmbox中當前播放的歌曲
- 27. 如何暫停當前的Zune歌曲,用BackgroundAudioPlayer播放我自己的聲音,然後恢復Zune歌曲?
- 28. AxWMPLib.AxWindowsMediaPlayer歌曲結束後自動播放
- 29. 播放選定的歌曲
- 30. Google Analytics(分析) - 跟蹤歌曲播放
雖然這使我得到了我想要的90%,但我仍然堅持我的位置,因爲AVAudioPlayer類需要通過指向要播放的文件或內存來創建緩衝...我沒有那個..我想獲得用戶已經通過iPod播放歌曲的信息。 – FierceMonkey
看到我上面的編輯! – snibbe
我查看了你的鏈接,但我仍然沒有看到從用戶在後臺播放的歌曲中獲得音量的方法。 – FierceMonkey