mirror of
https://github.com/GTAmodding/re3.git
synced 2024-11-15 07:48:59 +00:00
Fix MP3 player
This commit is contained in:
parent
bf7280b55b
commit
139c6bfcf3
2 changed files with 176 additions and 196 deletions
|
@ -2046,55 +2046,95 @@ cSampleManager::StartPreloadedStreamedFile(uint8 nStream)
|
||||||
bool
|
bool
|
||||||
cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||||
{
|
{
|
||||||
|
int i = 0;
|
||||||
uint32 position = nPos;
|
uint32 position = nPos;
|
||||||
char filename[MAX_PATH];
|
char filename[MAX_PATH];
|
||||||
|
|
||||||
if ( m_bInitialised && nFile < TOTAL_STREAMED_SOUNDS )
|
if ( !m_bInitialised || nFile >= TOTAL_STREAMED_SOUNDS )
|
||||||
{
|
return false;
|
||||||
|
|
||||||
if ( mp3Stream[nStream] )
|
if ( mp3Stream[nStream] )
|
||||||
{
|
{
|
||||||
AIL_pause_stream(mp3Stream[nStream], 1);
|
AIL_pause_stream(mp3Stream[nStream], 1);
|
||||||
AIL_close_stream(mp3Stream[nStream]);
|
AIL_close_stream(mp3Stream[nStream]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( nFile == STREAMED_SOUND_RADIO_MP3_PLAYER )
|
if ( nFile == STREAMED_SOUND_RADIO_MP3_PLAYER )
|
||||||
{
|
{
|
||||||
uint32 i = 0;
|
do
|
||||||
do {
|
{
|
||||||
if(i != 0 || _bIsMp3Active) {
|
// Just switched to MP3 player
|
||||||
|
if ( !_bIsMp3Active && i == 0 )
|
||||||
|
{
|
||||||
|
if ( nPos > nStreamLength[STREAMED_SOUND_RADIO_MP3_PLAYER] )
|
||||||
|
position = 0;
|
||||||
|
tMP3Entry *e = _pMP3List;
|
||||||
|
|
||||||
|
// Try to continue from previous song, if already started
|
||||||
|
if(!_GetMP3PosFromStreamPos(&position, &e) && !e) {
|
||||||
|
nFile = 0;
|
||||||
|
strcpy(filename, m_szCDRomRootPath);
|
||||||
|
strcat(filename, StreamedNameTable[nFile]);
|
||||||
|
|
||||||
|
mp3Stream[nStream] = AIL_open_stream(DIG, filename, 0);
|
||||||
|
if ( mp3Stream[nStream] )
|
||||||
|
{
|
||||||
|
AIL_set_stream_loop_count(mp3Stream[nStream], 1);
|
||||||
|
AIL_set_stream_ms_position(mp3Stream[nStream], position);
|
||||||
|
AIL_pause_stream(mp3Stream[nStream], 0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if ( e->pLinkPath != NULL )
|
||||||
|
mp3Stream[nStream] = AIL_open_stream(DIG, e->pLinkPath, 0);
|
||||||
|
else {
|
||||||
|
strcpy(filename, _mp3DirectoryPath);
|
||||||
|
strcat(filename, e->aFilename);
|
||||||
|
|
||||||
|
mp3Stream[nStream] = AIL_open_stream(DIG, filename, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( mp3Stream[nStream] ) {
|
||||||
|
AIL_set_stream_loop_count(mp3Stream[nStream], 1);
|
||||||
|
AIL_set_stream_ms_position(mp3Stream[nStream], position);
|
||||||
|
AIL_pause_stream(mp3Stream[nStream], 0);
|
||||||
|
|
||||||
|
_bIsMp3Active = true;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// fall through, start playing from another song
|
||||||
|
}
|
||||||
|
} else {
|
||||||
if(++_CurMP3Index >= nNumMP3s) _CurMP3Index = 0;
|
if(++_CurMP3Index >= nNumMP3s) _CurMP3Index = 0;
|
||||||
|
|
||||||
_CurMP3Pos = 0;
|
_CurMP3Pos = 0;
|
||||||
|
|
||||||
tMP3Entry *mp3 = _GetMP3EntryByIndex(_CurMP3Index);
|
tMP3Entry *mp3 = _GetMP3EntryByIndex(_CurMP3Index);
|
||||||
|
if ( !mp3 )
|
||||||
if(mp3) {
|
{
|
||||||
mp3 = _pMP3List;
|
mp3 = _pMP3List;
|
||||||
if(mp3 == NULL) {
|
if ( !_pMP3List )
|
||||||
_bIsMp3Active = false;
|
{
|
||||||
nFile = 0;
|
nFile = 0;
|
||||||
|
_bIsMp3Active = 0;
|
||||||
strcpy(filename, m_szCDRomRootPath);
|
strcpy(filename, m_szCDRomRootPath);
|
||||||
strcat(filename, StreamedNameTable[nFile]);
|
strcat(filename, StreamedNameTable[nFile]);
|
||||||
|
|
||||||
mp3Stream[nStream] =
|
mp3Stream[nStream] = AIL_open_stream(DIG, filename, 0);
|
||||||
AIL_open_stream(DIG, filename, 0);
|
if ( mp3Stream[nStream] )
|
||||||
if(mp3Stream[nStream]) {
|
{
|
||||||
AIL_set_stream_loop_count(
|
AIL_set_stream_loop_count(mp3Stream[nStream], 1);
|
||||||
mp3Stream[nStream], 1);
|
AIL_set_stream_ms_position(mp3Stream[nStream], position);
|
||||||
AIL_set_stream_ms_position(
|
AIL_pause_stream(mp3Stream[nStream], 0);
|
||||||
mp3Stream[nStream], position);
|
|
||||||
AIL_pause_stream(mp3Stream[nStream],
|
|
||||||
0);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(mp3->pLinkPath != NULL)
|
if(mp3->pLinkPath != NULL)
|
||||||
mp3Stream[nStream] =
|
mp3Stream[nStream] = AIL_open_stream(DIG, mp3->pLinkPath, 0);
|
||||||
AIL_open_stream(DIG, mp3->pLinkPath, 0);
|
|
||||||
else {
|
else {
|
||||||
strcpy(filename, _mp3DirectoryPath);
|
strcpy(filename, _mp3DirectoryPath);
|
||||||
strcat(filename, mp3->aFilename);
|
strcat(filename, mp3->aFilename);
|
||||||
|
@ -2107,67 +2147,19 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||||
AIL_set_stream_loop_count(mp3Stream[nStream], 1);
|
AIL_set_stream_loop_count(mp3Stream[nStream], 1);
|
||||||
AIL_set_stream_ms_position(mp3Stream[nStream], 0);
|
AIL_set_stream_ms_position(mp3Stream[nStream], 0);
|
||||||
AIL_pause_stream(mp3Stream[nStream], 0);
|
AIL_pause_stream(mp3Stream[nStream], 0);
|
||||||
return true;
|
#ifdef FIX_BUGS
|
||||||
}
|
|
||||||
|
|
||||||
_bIsMp3Active = false;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ( nPos > nStreamLength[STREAMED_SOUND_RADIO_MP3_PLAYER] )
|
|
||||||
position = 0;
|
|
||||||
|
|
||||||
tMP3Entry *e;
|
|
||||||
if ( !_GetMP3PosFromStreamPos(&position, &e) )
|
|
||||||
{
|
|
||||||
if ( e == NULL )
|
|
||||||
{
|
|
||||||
nFile = 0;
|
|
||||||
strcpy(filename, m_szCDRomRootPath);
|
|
||||||
strcat(filename, StreamedNameTable[nFile]);
|
|
||||||
mp3Stream[nStream] =
|
|
||||||
AIL_open_stream(DIG, filename, 0);
|
|
||||||
if(mp3Stream[nStream]) {
|
|
||||||
AIL_set_stream_loop_count(
|
|
||||||
mp3Stream[nStream], 1);
|
|
||||||
AIL_set_stream_ms_position(
|
|
||||||
mp3Stream[nStream], position);
|
|
||||||
AIL_pause_stream(mp3Stream[nStream], 0);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( e->pLinkPath != NULL )
|
|
||||||
mp3Stream[nStream] = AIL_open_stream(DIG, e->pLinkPath, 0);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strcpy(filename, _mp3DirectoryPath);
|
|
||||||
strcat(filename, e->aFilename);
|
|
||||||
|
|
||||||
mp3Stream[nStream] = AIL_open_stream(DIG, filename, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( mp3Stream[nStream] )
|
|
||||||
{
|
|
||||||
AIL_set_stream_loop_count(mp3Stream[nStream], 1);
|
|
||||||
AIL_set_stream_ms_position(mp3Stream[nStream], position);
|
|
||||||
AIL_pause_stream(mp3Stream[nStream], 0);
|
|
||||||
|
|
||||||
_bIsMp3Active = true;
|
_bIsMp3Active = true;
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
_bIsMp3Active = false;
|
}
|
||||||
|
_bIsMp3Active = 0;
|
||||||
} while(++i < nNumMP3s);
|
}
|
||||||
|
while ( ++i < nNumMP3s );
|
||||||
position = 0;
|
position = 0;
|
||||||
nFile = 0;
|
nFile = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(filename, m_szCDRomRootPath);
|
strcpy(filename, m_szCDRomRootPath);
|
||||||
strcat(filename, StreamedNameTable[nFile]);
|
strcat(filename, StreamedNameTable[nFile]);
|
||||||
|
|
||||||
|
@ -2179,8 +2171,6 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||||
AIL_pause_stream(mp3Stream[nStream], 0);
|
AIL_pause_stream(mp3Stream[nStream], 0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -730,8 +730,6 @@ _FindMP3s(void)
|
||||||
delete aStream[0];
|
delete aStream[0];
|
||||||
aStream[0] = NULL;
|
aStream[0] = NULL;
|
||||||
|
|
||||||
OutputDebugString(fd.cFileName);
|
|
||||||
|
|
||||||
pList->pNext = new tMP3Entry;
|
pList->pNext = new tMP3Entry;
|
||||||
|
|
||||||
tMP3Entry *e = pList->pNext;
|
tMP3Entry *e = pList->pNext;
|
||||||
|
@ -1706,91 +1704,35 @@ cSampleManager::StartPreloadedStreamedFile(uint8 nStream)
|
||||||
bool
|
bool
|
||||||
cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||||
{
|
{
|
||||||
|
int i = 0;
|
||||||
uint32 position = nPos;
|
uint32 position = nPos;
|
||||||
char filename[256];
|
char filename[MAX_PATH];
|
||||||
|
|
||||||
ASSERT( nStream < MAX_STREAMS );
|
if ( nFile >= TOTAL_STREAMED_SOUNDS )
|
||||||
|
return false;
|
||||||
|
|
||||||
if ( nFile < TOTAL_STREAMED_SOUNDS )
|
|
||||||
{
|
|
||||||
if ( aStream[nStream] )
|
if ( aStream[nStream] )
|
||||||
{
|
{
|
||||||
delete aStream[nStream];
|
delete aStream[nStream];
|
||||||
aStream[nStream] = NULL;
|
aStream[nStream] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( nFile == STREAMED_SOUND_RADIO_MP3_PLAYER )
|
if ( nFile == STREAMED_SOUND_RADIO_MP3_PLAYER )
|
||||||
{
|
{
|
||||||
uint32 i = 0;
|
do
|
||||||
do {
|
{
|
||||||
if(i != 0 || _bIsMp3Active) {
|
// Switched to MP3 player just now
|
||||||
if(++_CurMP3Index >= nNumMP3s) _CurMP3Index = 0;
|
if ( !_bIsMp3Active && i == 0 )
|
||||||
|
{
|
||||||
_CurMP3Pos = 0;
|
|
||||||
|
|
||||||
tMP3Entry *mp3 = _GetMP3EntryByIndex(_CurMP3Index);
|
|
||||||
|
|
||||||
if(mp3) {
|
|
||||||
mp3 = _pMP3List;
|
|
||||||
if(mp3 == NULL) {
|
|
||||||
_bIsMp3Active = false;
|
|
||||||
nFile = 0;
|
|
||||||
strcat(filename, StreamedNameTable[nFile]);
|
|
||||||
|
|
||||||
CStream* stream = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
|
||||||
ASSERT(stream != NULL);
|
|
||||||
|
|
||||||
aStream[nStream] = stream;
|
|
||||||
|
|
||||||
if (stream->Setup()) {
|
|
||||||
if (position != 0)
|
|
||||||
stream->SetPosMS(position);
|
|
||||||
|
|
||||||
stream->Start();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
delete stream;
|
|
||||||
aStream[nStream] = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mp3->pLinkPath != NULL)
|
|
||||||
aStream[nStream] = new CStream(mp3->pLinkPath, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
|
||||||
else {
|
|
||||||
strcpy(filename, _mp3DirectoryPath);
|
|
||||||
strcat(filename, mp3->aFilename);
|
|
||||||
|
|
||||||
aStream[nStream] = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (aStream[nStream]->Setup()) {
|
|
||||||
aStream[nStream]->Start();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
delete aStream[nStream];
|
|
||||||
aStream[nStream] = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
_bIsMp3Active = false;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ( nPos > nStreamLength[STREAMED_SOUND_RADIO_MP3_PLAYER] )
|
if ( nPos > nStreamLength[STREAMED_SOUND_RADIO_MP3_PLAYER] )
|
||||||
position = 0;
|
position = 0;
|
||||||
|
tMP3Entry *e = _pMP3List;
|
||||||
|
|
||||||
tMP3Entry *e;
|
// Try to continue from previous song, if already started
|
||||||
if ( !_GetMP3PosFromStreamPos(&position, &e) )
|
if(!_GetMP3PosFromStreamPos(&position, &e) && !e) {
|
||||||
{
|
|
||||||
if ( e == NULL )
|
|
||||||
{
|
|
||||||
nFile = 0;
|
nFile = 0;
|
||||||
strcat(filename, StreamedNameTable[nFile]);
|
strcpy(filename, StreamedNameTable[nFile]);
|
||||||
|
|
||||||
CStream* stream = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
CStream* stream = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||||
ASSERT(stream != NULL);
|
|
||||||
|
|
||||||
aStream[nStream] = stream;
|
aStream[nStream] = stream;
|
||||||
|
|
||||||
|
@ -1805,11 +1747,9 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||||
delete stream;
|
delete stream;
|
||||||
aStream[nStream] = NULL;
|
aStream[nStream] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
} else {
|
||||||
if ( e->pLinkPath != NULL )
|
if ( e->pLinkPath != NULL )
|
||||||
aStream[nStream] = new CStream(e->pLinkPath, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
aStream[nStream] = new CStream(e->pLinkPath, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||||
else {
|
else {
|
||||||
|
@ -1831,19 +1771,24 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||||
delete aStream[nStream];
|
delete aStream[nStream];
|
||||||
aStream[nStream] = NULL;
|
aStream[nStream] = NULL;
|
||||||
}
|
}
|
||||||
|
// fall through, start playing from another song
|
||||||
_bIsMp3Active = false;
|
|
||||||
|
|
||||||
} while(++i < nNumMP3s);
|
|
||||||
|
|
||||||
position = 0;
|
|
||||||
nFile = 0;
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if(++_CurMP3Index >= nNumMP3s) _CurMP3Index = 0;
|
||||||
|
|
||||||
|
_CurMP3Pos = 0;
|
||||||
|
|
||||||
|
tMP3Entry *mp3 = _GetMP3EntryByIndex(_CurMP3Index);
|
||||||
|
if ( !mp3 )
|
||||||
|
{
|
||||||
|
mp3 = _pMP3List;
|
||||||
|
if ( !_pMP3List )
|
||||||
|
{
|
||||||
|
nFile = 0;
|
||||||
|
_bIsMp3Active = 0;
|
||||||
strcpy(filename, StreamedNameTable[nFile]);
|
strcpy(filename, StreamedNameTable[nFile]);
|
||||||
|
|
||||||
CStream* stream = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
CStream* stream = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||||
ASSERT(stream != NULL);
|
|
||||||
|
|
||||||
aStream[nStream] = stream;
|
aStream[nStream] = stream;
|
||||||
|
|
||||||
|
@ -1858,8 +1803,53 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
|
||||||
delete stream;
|
delete stream;
|
||||||
aStream[nStream] = NULL;
|
aStream[nStream] = NULL;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(mp3->pLinkPath != NULL)
|
||||||
|
aStream[nStream] = new CStream(mp3->pLinkPath, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||||
|
else {
|
||||||
|
strcpy(filename, _mp3DirectoryPath);
|
||||||
|
strcat(filename, mp3->aFilename);
|
||||||
|
|
||||||
|
aStream[nStream] = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (aStream[nStream]->Setup()) {
|
||||||
|
aStream[nStream]->Start();
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
_bIsMp3Active = true;
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
delete aStream[nStream];
|
||||||
|
aStream[nStream] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
_bIsMp3Active = 0;
|
||||||
|
}
|
||||||
|
while ( ++i < nNumMP3s );
|
||||||
|
position = 0;
|
||||||
|
nFile = 0;
|
||||||
|
}
|
||||||
|
strcpy(filename, StreamedNameTable[nFile]);
|
||||||
|
|
||||||
|
CStream *stream = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||||
|
|
||||||
|
aStream[nStream] = stream;
|
||||||
|
|
||||||
|
if ( stream->Setup() ) {
|
||||||
|
if (position != 0)
|
||||||
|
stream->SetPosMS(position);
|
||||||
|
|
||||||
|
stream->Start();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
delete stream;
|
||||||
|
aStream[nStream] = NULL;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue