rpcsx/rpcs3/Emu/Cell/Modules
Chris f8589de476
Initial playlist-based custom soundtracks support (#9362)
* Initial playlist-based custom soundtracks support

This is the initial implementation of playlist-based (cellSearch) custom soundtracks support.
It is based on the initial work by @Megamouse and currently uses a directory-based approach to manage albums and utilizes FFMPEG to read audio metadata.

Background: The real PS3 can import music in XMB from USB into its internal storage (/dev_hdd0/music) and additionally stores metadata (artist, trackname, tracknumber, ...) in a database (/dev_hdd0/mms/db/metadata_db_hdd). Games can make use of imported music via cellSearch.

For the time being, this implementation does NOT make use of metadata_db_hdd as the db-format is not well understood and a folder-based approch is easier to use. Users only have to create folders inside /dev_hdd0/music and add music to it to create a "playlist". This playlists contents will be sorted alphabetically. As a result, users could prefix numbers to the audio-files to force a specific order.

The only really supported audio format is MP3. I also added support for AAC, AC3, WMA, ATRAC3 and ATRAC3 plus, however, non of these formats were successfully tested for several reasons. AC3 and WMA are not enabled in the current FFMPEG build which makes reading codec-specific data impossible. We could enable these later if we want to. AAC actually could work but I was not able to get it working in WipeOut HD Fury. My guess is that the game does not support AAC. Finally, I could not find any ATRAC3 (or Plus) music to test with.

This implementation currently only implements parts of cellSearchStartListSearch() and cellSearchStartContentSearchInList(). There are several other functions which are still completely unimplemented and will probably be needed by other games. However, this implementation is a starting-point and is enough for WipeOut and maybe a few other games.

A video which showcases this custom soundtrack support is available here: https://www.youtube.com/watch?v=4nu1OCtONTY

Next steps:
 - Utilize sortKey in cellSearchStartContentSearchInList()
 - Eliminate TODOs
 - Implement the missing other functions
 - Test on more games - I do not own many that support custom soundtracks

Signed-off-by: gladiac1337 <gladiac@gmail.com>

Co-authored-by: Megamouse <studienricky89@googlemail.com>
Co-authored-by: Ani <ani-leo@outlook.com>
Co-authored-by: Ivan <nekotekina@gmail.com>
2020-12-31 22:47:09 +03:00
..
cell_FreeType2.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellAdec.cpp Remove HERE macro 2020-12-10 12:30:22 +03:00
cellAdec.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellAtrac.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellAtrac.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellAtracMulti.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellAtracMulti.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellAudio.cpp types.hpp: remove intrinsic includes 2020-12-21 21:11:25 +03:00
cellAudio.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
cellAudioIn.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
cellAudioOut.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellAudioOut.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellAuthDialog.cpp hle: cellAuthDialog 2020-02-22 16:03:14 +03:00
cellAvconfExt.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellBgdl.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellBgdl.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellCamera.cpp atomic.hpp: add atomic_t<bool> specialization 2020-12-07 17:13:12 +03:00
cellCamera.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellCelp8Enc.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellCelp8Enc.h Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
cellCelpEnc.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellCelpEnc.h Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
cellCrossController.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellCrossController.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellDaisy.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellDaisy.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellDmux.cpp Move align helpers to util/asm.hpp 2020-12-18 18:07:42 +03:00
cellDmux.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellDtcpIpUtility.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellFiber.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellFiber.h Add missing #includes to header files 2019-06-25 17:11:10 +03:00
cellFont.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellFont.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellFontFT.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellFontFT.h Add missing #includes to header files 2019-06-25 17:11:10 +03:00
cellFs.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellFs.h Add missing #includes to header files 2019-06-25 17:11:10 +03:00
cellGame.cpp Remove ASSUME macro 2020-12-10 14:08:02 +03:00
cellGame.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellGameExec.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellGcmSys.cpp Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
cellGcmSys.h HLE cellGcmSys: Make IOTable accurate 2020-02-19 18:11:30 +00:00
cellGem.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellGem.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
cellGifDec.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellGifDec.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellHttp.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellHttp.h Minor fixes 2019-07-01 04:33:23 +03:00
cellHttpUtil.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellHttpUtil.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellImeJp.cpp Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
cellImeJp.h Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
cellJpgDec.cpp Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
cellJpgDec.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
cellJpgEnc.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellJpgEnc.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellKb.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellKb.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
cellKey2char.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellL10n.cpp Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
cellL10n.h Clean vm::ps3 namespace use 2018-02-09 17:49:37 +03:00
cellLibprof.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellMic.cpp Remove HERE macro 2020-12-10 12:30:22 +03:00
cellMic.h Replace uint32_t with u32 2020-12-18 12:23:53 +03:00
cellMouse.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellMouse.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
cellMsgDialog.cpp PPU: Allow HLE execution from pure instruction decoder type interpreter 2020-12-15 11:18:51 +03:00
cellMsgDialog.h Don't randomly include "stdafx.h" 2020-12-22 14:32:30 +03:00
cellMusic.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellMusic.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellMusicDecode.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellMusicExport.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellNetAoi.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellNetCtl.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellNetCtl.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellOskDialog.cpp atomic.hpp: add atomic_t<bool> specialization 2020-12-07 17:13:12 +03:00
cellOskDialog.h Don't randomly include "stdafx.h" 2020-12-22 14:32:30 +03:00
cellOvis.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellPad.cpp std::chrono cleanup: always use steady_clock 2020-12-11 19:01:56 +03:00
cellPad.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
cellPamf.cpp Replace verify() with ensure() with auto src location. 2020-12-09 15:43:38 +03:00
cellPamf.h Replace verify() with ensure() with auto src location. 2020-12-09 15:43:38 +03:00
cellPesmUtility.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellPhotoDecode.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellPhotoExport.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellPhotoImport.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellPng.h Add missing #includes to header files 2019-06-25 17:11:10 +03:00
cellPngDec.cpp Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
cellPngDec.h Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
cellPngEnc.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellPngEnc.h Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
cellPrint.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellRec.cpp Use g_fxo for cellRec 2019-08-22 02:13:39 +03:00
cellRemotePlay.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellRemotePlay.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellResc.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellResc.h Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
cellRtc.cpp Replace uint32_t with u32 2020-12-18 12:23:53 +03:00
cellRtc.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
cellRtcAlarm.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellRudp.cpp Remove HERE macro 2020-12-10 12:30:22 +03:00
cellRudp.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSail.cpp Remove HERE macro 2020-12-10 12:30:22 +03:00
cellSail.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSailRec.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSaveData.cpp Move align helpers to util/asm.hpp 2020-12-18 18:07:42 +03:00
cellSaveData.h Don't randomly include "stdafx.h" 2020-12-22 14:32:30 +03:00
cellScreenshot.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellScreenshot.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSearch.cpp Initial playlist-based custom soundtracks support (#9362) 2020-12-31 22:47:09 +03:00
cellSearch.h Add missing #includes to header files 2019-06-25 17:11:10 +03:00
cellSheap.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSpudll.cpp Reintroduce LOG_CHANNEL 2018-08-25 15:39:00 +03:00
cellSpudll.h Add missing #includes to header files 2019-06-25 17:11:10 +03:00
cellSpurs.cpp vm: implement vm::atomic_op, fetch_op helpers 2020-12-30 20:11:02 +03:00
cellSpurs.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
cellSpursJq.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSpursJq.h Clean vm::ps3 namespace use 2018-02-09 17:49:37 +03:00
cellSpursSpu.cpp Remove deprecated _bit accessor from v128 2020-12-29 21:04:28 +03:00
cellSsl.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSsl.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellStorage.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellStorage.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSubDisplay.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSubDisplay.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
cellSync.cpp Remove HERE macro 2020-12-10 12:30:22 +03:00
cellSync.h Remove HERE macro 2020-12-10 12:30:22 +03:00
cellSync2.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSync2.h Add missing #includes to header files 2019-06-25 17:11:10 +03:00
cellSysCache.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSysconf.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSysconf.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSysmodule.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSysutil.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSysutil.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSysutilAp.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSysutilAvc.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSysutilAvc2.cpp rpcn 0.3.5 (#9227) 2020-11-10 08:55:49 +00:00
cellSysutilAvc2.h RPCN Client (#8663) 2020-08-27 20:47:04 +01:00
cellSysutilAvcExt.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSysutilMisc.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellSysutilNpEula.cpp hle: cellSysutilNpEula 2020-03-27 15:26:28 +03:00
cellUsbd.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellUsbd.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellUsbpspcm.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellUserInfo.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellUserInfo.h Add missing #includes to header files 2019-06-25 17:11:10 +03:00
cellVdec.cpp Move align helpers to util/asm.hpp 2020-12-18 18:07:42 +03:00
cellVdec.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
cellVideoExport.cpp Reintroduce LOG_CHANNEL 2018-08-25 15:39:00 +03:00
cellVideoOut.cpp Replace verify() with ensure() with auto src location. 2020-12-09 15:43:38 +03:00
cellVideoOut.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellVideoPlayerUtility.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellVideoUpload.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellVideoUpload.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellVoice.cpp Remove HERE macro 2020-12-10 12:30:22 +03:00
cellVoice.h Remove BOM markers 2020-12-06 15:30:12 +03:00
cellVpost.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellVpost.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
cellWebBrowser.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
cellWebBrowser.h Add missing #includes to header files 2019-06-25 17:11:10 +03:00
libad_async.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
libad_core.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
libmedi.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
libmixer.cpp types.hpp: more cleanup 2020-12-22 19:08:09 +03:00
libmixer.h Remove BOM markers 2020-12-06 15:30:12 +03:00
libsnd3.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
libsnd3.h Remove BOM markers 2020-12-06 15:30:12 +03:00
libsynth2.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
libsynth2.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
sceNp.cpp types.hpp: remove intrinsic includes 2020-12-21 21:11:25 +03:00
sceNp.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
sceNp2.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sceNp2.h atomic.hpp: replace std::atomic with atomic_t 2020-12-07 17:13:12 +03:00
sceNpClans.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sceNpClans.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
sceNpCommerce2.cpp rpcn 0.3.5 (#9227) 2020-11-10 08:55:49 +00:00
sceNpCommerce2.h Split BEType.h to util/v128.hpp and util/to_endian.hpp 2020-12-13 16:34:45 +03:00
sceNpMatchingInt.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sceNpSns.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sceNpSns.h atomic.hpp: replace std::atomic with atomic_t 2020-12-07 17:13:12 +03:00
sceNpTrophy.cpp MSVC: remove MemLeak build support 2020-12-22 14:32:30 +03:00
sceNpTrophy.h Don't randomly include "stdafx.h" 2020-12-22 14:32:30 +03:00
sceNpTus.cpp Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
sceNpTus.h Replace uint64_t with u64 2020-12-18 12:23:53 +03:00
sceNpUtil.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sceNpUtil.h atomic.hpp: replace std::atomic with atomic_t 2020-12-07 17:13:12 +03:00
StaticHLE.cpp Replace uint16_t with u16 2020-12-18 12:23:53 +03:00
StaticHLE.h Replace uint16_t with u16 2020-12-18 12:23:53 +03:00
sys_game.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sys_heap.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sys_io_.cpp Replace verify() with ensure() with auto src location. 2020-12-09 15:43:38 +03:00
sys_libc.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sys_libc_.cpp Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
sys_lv2dbg.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sys_lv2dbg.h Add missing #includes to header files 2019-06-25 17:11:10 +03:00
sys_lwcond_.cpp Remove HERE macro 2020-12-10 12:30:22 +03:00
sys_lwmutex_.cpp Move busy_wait() to asm.hpp 2020-12-18 12:23:53 +03:00
sys_mempool.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sys_mmapper_.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sys_net_.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sys_net_.h Clean vm::ps3 namespace use 2018-02-09 17:49:37 +03:00
sys_ppu_thread_.cpp Remove HERE macro 2020-12-10 12:30:22 +03:00
sys_prx_.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sys_rsxaudio_.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sys_spinlock.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sys_spu_.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
sysPrxForUser.cpp Remove HERE macro 2020-12-10 12:30:22 +03:00
sysPrxForUser.h Replace verify() with ensure() with auto src location. 2020-12-09 15:43:38 +03:00