rpcsx/rpcs3/Emu/Cell
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
..
lv2 Buzz! emulated controller (#9504) 2020-12-31 21:02:03 +03:00
Modules Initial playlist-based custom soundtracks support (#9362) 2020-12-31 22:47:09 +03:00
Common.h Move types.h to util/types.hpp 2020-12-12 15:12:01 +03:00
ErrorCodes.h Butcher narrow cast a little (don't print value). 2020-12-22 14:32:30 +03:00
MFC.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
MFC.h Move types.h to util/types.hpp 2020-12-12 15:12:01 +03:00
PPCDisAsm.h Cleanup disasm classes a bit 2020-12-21 13:46:26 +03:00
PPUAnalyser.cpp Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
PPUAnalyser.h Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
PPUCallback.h Fix bug with vector arg alignment in BIND_FUNC and callbacks. 2020-12-18 18:07:42 +03:00
PPUDisAsm.cpp Disasm: read instruction contents only once 2020-12-21 13:46:26 +03:00
PPUDisAsm.h Cleanup disasm classes a bit 2020-12-21 13:46:26 +03:00
PPUFunction.cpp LV2: cleanup syscall table (#9106) 2020-10-21 10:04:34 +03:00
PPUFunction.h Fix bug with vector arg alignment in BIND_FUNC and callbacks. 2020-12-18 18:07:42 +03:00
PPUInterpreter.cpp types.hpp: remove intrinsic includes 2020-12-21 21:11:25 +03:00
PPUInterpreter.h PPU: implement VNMSUBFP (precise variant) 2020-06-07 22:44:07 +03:00
PPUModule.cpp Move align helpers to util/asm.hpp 2020-12-18 18:07:42 +03:00
PPUModule.h Remove BOM markers 2020-12-06 15:30:12 +03:00
PPUOpcodes.h Remove constexpr from ppu/spu decoders. 2020-12-10 15:06:01 +03:00
PPUThread.cpp MSVC: remove MemLeak build support 2020-12-22 14:32:30 +03:00
PPUThread.h Don't randomly include "stdafx.h" 2020-12-22 14:32:30 +03:00
PPUTranslator.cpp types.hpp: remove intrinsic includes 2020-12-21 21:11:25 +03:00
PPUTranslator.h Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
RawSPUThread.cpp Fix SPU ELF loader 2020-12-23 20:50:33 +03:00
RawSPUThread.h Migration to named_thread<> 2018-10-19 22:22:35 +03:00
SPUAnalyser.cpp spu_iname: refactor to use actual strings 2020-03-26 15:26:55 +03:00
SPUAnalyser.h Move types.h to util/types.hpp 2020-12-12 15:12:01 +03:00
SPUASMJITRecompiler.cpp types.hpp: remove intrinsic includes 2020-12-21 21:11:25 +03:00
SPUASMJITRecompiler.h types.hpp: remove intrinsic includes 2020-12-21 21:11:25 +03:00
SPUDisAsm.cpp types.hpp: remove intrinsic includes 2020-12-21 21:11:25 +03:00
SPUDisAsm.h types.hpp: remove intrinsic includes 2020-12-21 21:11:25 +03:00
SPUInterpreter.cpp types.hpp: remove intrinsic includes 2020-12-21 21:11:25 +03:00
SPUInterpreter.h Make spu_decoder<> objects constexpr 2020-03-24 12:18:37 +03:00
SPUOpcodes.h Remove constexpr from ppu/spu decoders. 2020-12-10 15:06:01 +03:00
SPURecompiler.cpp SPU LLVM: Fix edgecase in icelake codegen 2020-12-29 22:01:11 +03:00
SPURecompiler.h SPU LLVM: fix spu_cache dependency 2020-05-31 21:54:04 +03:00
SPUThread.cpp Fix minor typo 2020-12-23 20:50:33 +03:00
SPUThread.h Don't randomly include "stdafx.h" 2020-12-22 14:32:30 +03:00