rpcsx/rpcs3
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
..
cmake_modules Warnings: Silence false warnings about fatal code paths 2020-12-29 14:17:34 +03:00
Crypto types.hpp: remove intrinsic includes 2020-12-21 21:11:25 +03:00
Emu Initial playlist-based custom soundtracks support (#9362) 2020-12-31 22:47:09 +03:00
Icons Qt: Add custom pad configs 2019-05-16 20:37:41 +02:00
Input types.hpp: more cleanup 2020-12-22 19:08:09 +03:00
Loader Don't randomly include "stdafx.h" 2020-12-22 14:32:30 +03:00
qt/etc Qt: use config to load translation file on startup 2020-02-06 17:41:50 +01:00
rpcs3qt memory viewer: Implement SPU mode, fix address GOTO 2020-12-30 15:42:56 +03:00
util Implement util/fifo_mutex.hpp 2020-12-31 20:07:50 +03:00
CMakeLists.txt Initial DualSense Support (#9308) 2020-12-13 00:00:45 +01:00
display_sleep_control.cpp Move types.h to util/types.hpp 2020-12-12 15:12:01 +03:00
display_sleep_control.h Remove BOM markers 2020-12-06 15:30:12 +03:00
emucore.vcxproj Buzz! emulated controller (#9504) 2020-12-31 21:02:03 +03:00
emucore.vcxproj.filters Buzz! emulated controller (#9504) 2020-12-31 21:02:03 +03:00
frame_icon.xpm
git-version.cmake CD: Fix experimental build warning for Travis 2020-03-27 23:00:22 +03:00
GLGSRender.vcxproj MSVC: remove MemLeak build support 2020-12-22 14:32:30 +03:00
GLGSRender.vcxproj.filters Move align helpers to util/asm.hpp 2020-12-18 18:07:42 +03:00
headless_application.cpp Emu: implement on_exit callback 2020-12-18 16:05:40 +01:00
headless_application.h Don't randomly include "stdafx.h" 2020-12-22 14:32:30 +03:00
main.cpp Don't randomly include "stdafx.h" 2020-12-22 14:32:30 +03:00
main_application.cpp Don't randomly include "stdafx.h" 2020-12-22 14:32:30 +03:00
main_application.h Remove BOM markers 2020-12-06 15:30:12 +03:00
OpenAL.vcxproj MSVC: remove MemLeak build support 2020-12-22 14:32:30 +03:00
OpenAL.vcxproj.filters Rewrite OpenAL backend to support new features 2019-01-12 21:29:56 +03:00
resource.h
resources.qrc Qt: use config to load translation file on startup 2020-02-06 17:41:50 +01:00
rpcs3.appdata.xml Update rpcs3.appdata.xml 2019-02-14 03:10:36 +03:00
rpcs3.desktop Make it pass desktop-file-validate in Ubuntu 14.04 2017-08-18 20:57:21 +03:00
rpcs3.icns Support macOS bundling for binary distribution 2018-12-16 18:17:21 +03:00
rpcs3.ico
rpcs3.plist.in CMake: Use Info.plist template for macOS bundle 2019-02-26 21:09:18 +00:00
rpcs3.png
rpcs3.rc
rpcs3.svg Optimise the SVG logo with svgcleaner 2020-01-17 08:31:00 +01:00
rpcs3.vcxproj Initial DualSense Support (#9308) 2020-12-13 00:00:45 +01:00
rpcs3.vcxproj.filters Initial DualSense Support (#9308) 2020-12-13 00:00:45 +01:00
rpcs3_version.cpp Remove BOM markers 2020-12-06 15:30:12 +03:00
rpcs3_version.h Remove BOM markers 2020-12-06 15:30:12 +03:00
stb_image.cpp C-style cast cleanup IV 2019-12-01 22:12:33 +03:00
stdafx.cpp Don't randomly include "stdafx.h" 2020-12-22 14:32:30 +03:00
stdafx.h Implement util/auto_typemap.hpp 2020-12-24 14:55:25 +03:00
VKGSRender.vcxproj MSVC: remove MemLeak build support 2020-12-22 14:32:30 +03:00
VKGSRender.vcxproj.filters Move align helpers to util/asm.hpp 2020-12-18 18:07:42 +03:00
windows.qrc Qt: Use additional windows resource file for qt.conf 2018-05-13 21:02:21 +04:00
XAudio.vcxproj MSVC: remove MemLeak build support 2020-12-22 14:32:30 +03:00
XAudio.vcxproj.filters Replace XAudio2 implementation with an unified Xaudio2Redist 2020-02-20 23:33:09 +03:00