Quick summary
In NHL Legacy custom music plays only briefly at the start of a match, then
becomes permanently silent. Investigation of the log shows this is not a
decode failure — cellMusicDecode HLE implementation appears to decode the
entire MP3 file at maximum CPU speed instead of at playback rate, causing
the game to receive status=1 (decode finished) prematurely and issue
SetDecodeCommand2(STOP) before the audio has actually been heard.
Reproduction steps
- Place a custom MP3 in
dev_hdd0/music/<folder>/
- Boot NHL Legacy, configure custom music in EA Trax Manager
- Start a match
Observed behavior (from log)
Music Decode Thread decoder timestamps:
- At wall-clock
0:02:00.262 decoder starts on mix.mp3
- At wall-clock
0:02:05.654 (5.4 seconds later) decoder logs
timestamp_us=14148034560 — i.e. ~3 hours 55 minutes of audio decoded
- Decoder then logs
waiting until track is consumed...
Game-side reaction:
- At
0:03:14.148 game calls cellMusicDecodeGetDecodeStatus2 →
returns status=1
- Immediately after, game calls
cellMusicDecodeSetDecodeCommand2(0x0) (STOP)
- Decoder logs
finished playlist
- 36 seconds later,
EAAudioCore Dac thread begins calling
cellMusicDecodeRead2 to consume buffered audio — every call fails with
CELL_MUSIC_DECODE_ERROR_NO_LPCM_DATA (8000+ occurrences in the log)
- No further
SetDecodeCommand2(START) is issued — music is silent for
the rest of the session
Expected behavior
cellMusicDecode should produce decoded PCM data at approximately the
playback rate of the source, not at maximum CPU speed. status=1 should
arrive only when the actual audio content has been delivered to the game,
not when the source file has been fully read from disk and decoded into a
buffer. This matches the real PS3 behavior where decoding and playback
are tied to the audio hardware clock.
System configuration
- RPCS3 build: 0.0.40-19381-2613d7ee Alpha
- OS: Windows
- Game: NHL Legacy Edition [serial — подставь свой, BLUS31418 или BLES02220]
- Custom music: single MP3 file, ~4 hours, re-encoded via
ffmpeg -map_metadata -1 -id3v2_version 3 -c:a libmp3lame -b:a 192k -ar 44100 -ac 2
Attachments
Full log: RPCS3.log.gz (attached)
Filtered music_lines.txt (attached) showing the complete cellMusicDecode
call sequence including the race between Music Decode Thread and
EAAudioCore Dac thread.
Related
This may be related to but is distinct from #12309 (which describes
decode-level LPCM failures). In the present issue, the decoder works
correctly — the failure mode is the racing between decoder output speed
and game-side playback consumption.
Quick summary
In NHL Legacy custom music plays only briefly at the start of a match, then
becomes permanently silent. Investigation of the log shows this is not a
decode failure —
cellMusicDecodeHLE implementation appears to decode theentire MP3 file at maximum CPU speed instead of at playback rate, causing
the game to receive
status=1(decode finished) prematurely and issueSetDecodeCommand2(STOP)before the audio has actually been heard.Reproduction steps
dev_hdd0/music/<folder>/Observed behavior (from log)
Music Decode Threaddecoder timestamps:0:02:00.262decoder starts onmix.mp30:02:05.654(5.4 seconds later) decoder logstimestamp_us=14148034560— i.e. ~3 hours 55 minutes of audio decodedwaiting until track is consumed...Game-side reaction:
0:03:14.148game callscellMusicDecodeGetDecodeStatus2→returns
status=1cellMusicDecodeSetDecodeCommand2(0x0)(STOP)finished playlistEAAudioCore Dacthread begins callingcellMusicDecodeRead2to consume buffered audio — every call fails withCELL_MUSIC_DECODE_ERROR_NO_LPCM_DATA(8000+ occurrences in the log)SetDecodeCommand2(START)is issued — music is silent forthe rest of the session
Expected behavior
cellMusicDecodeshould produce decoded PCM data at approximately theplayback rate of the source, not at maximum CPU speed.
status=1shouldarrive only when the actual audio content has been delivered to the game,
not when the source file has been fully read from disk and decoded into a
buffer. This matches the real PS3 behavior where decoding and playback
are tied to the audio hardware clock.
System configuration
ffmpeg -map_metadata -1 -id3v2_version 3 -c:a libmp3lame -b:a 192k -ar 44100 -ac 2Attachments
Full log: RPCS3.log.gz (attached)
Filtered music_lines.txt (attached) showing the complete cellMusicDecode
call sequence including the race between Music Decode Thread and
EAAudioCore Dac thread.
Related
This may be related to but is distinct from #12309 (which describes
decode-level LPCM failures). In the present issue, the decoder works
correctly — the failure mode is the racing between decoder output speed
and game-side playback consumption.