rpcsx/rpcs3/Emu
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
..
Audio Don't randomly include "stdafx.h" 2020-12-22 14:32:30 +03:00
Cell Initial playlist-based custom soundtracks support (#9362) 2020-12-31 22:47:09 +03:00
CPU Remove deprecated _bit accessor from v128 2020-12-29 21:04:28 +03:00
Io Buzz! emulated controller (#9504) 2020-12-31 21:02:03 +03:00
Memory vm: implement vm::atomic_op, fetch_op helpers 2020-12-30 20:11:02 +03:00
NP types.hpp: more cleanup 2020-12-22 19:08:09 +03:00
RSX rsx: Implement Texture LOD Bias addend setting 2020-12-30 15:37:21 +03:00
CMakeLists.txt Buzz! emulated controller (#9504) 2020-12-31 21:02:03 +03:00
GameInfo.h Move types.h to util/types.hpp 2020-12-12 15:12:01 +03:00
GDB.cpp Add usz alias for std::size_t 2020-12-18 12:23:53 +03:00
GDB.h GDB: remove wrong_checksum_exception 2019-11-08 19:27:11 +03:00
IdManager.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
IdManager.h Move types.h to util/types.hpp 2020-12-12 15:12:01 +03:00
IPC.h Cleanup semaphore<> (sema.h) and mutex.h (shared_mutex) 2018-09-03 23:00:36 +03:00
localized_string.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
localized_string.h Remove BOM markers 2020-12-06 15:30:12 +03:00
localized_string_id.h Remove BOM markers 2020-12-06 15:30:12 +03:00
perf_meter.cpp perf_meter.cpp: register only named threads 2020-12-22 14:32:30 +03:00
perf_meter.hpp types.hpp: remove intrinsic includes 2020-12-21 21:11:25 +03:00
System.cpp Remove std typeinfo 2020-12-27 00:30:16 +03:00
System.h Don't randomly include "stdafx.h" 2020-12-22 14:32:30 +03:00
system_config.cpp Cleanup and move sysinfo.h -> util/sysinfo.hpp 2020-12-18 12:55:54 +03:00
system_config.h rsx: Implement Texture LOD Bias addend setting 2020-12-30 15:37:21 +03:00
system_config_types.cpp Firmware libraries settings overhaul 2020-12-13 21:52:24 +03:00
system_config_types.h Firmware libraries settings overhaul 2020-12-13 21:52:24 +03:00
title.cpp Cleanup and move sysinfo.h -> util/sysinfo.hpp 2020-12-18 12:55:54 +03:00
title.h Remove BOM markers 2020-12-06 15:30:12 +03:00
VFS.cpp types.hpp: remove intrinsic includes 2020-12-21 21:11:25 +03:00
VFS.h Improve Trophy Installer robustness 2020-10-01 22:00:57 +03:00