diff --git a/code/redalert/audiomix.h b/code/redalert/audiomix.h index 2a36b08..20fafdb 100644 --- a/code/redalert/audiomix.h +++ b/code/redalert/audiomix.h @@ -11,4 +11,6 @@ void AudMix_PlayMusic(int musicId); const char* GetSpeechFileName(int index); void AudMix_QueueVideoAudio(const char* audio_buffer, int length, int rate); void AudMix_TickMovieAudio(void); -void AudMix_SetMusicState(bool musicState); \ No newline at end of file +void AudMix_SetMusicState(bool musicState); +void AudMix_PlayMovieAudio(const char* name); +void AudMix_StopMovieAudio(void); \ No newline at end of file diff --git a/code/redalert/audmix.cpp b/code/redalert/audmix.cpp index ce2fdf5..0b021a1 100644 --- a/code/redalert/audmix.cpp +++ b/code/redalert/audmix.cpp @@ -17,6 +17,12 @@ ALCdevice* device = nullptr; ALCcontext* context = nullptr; struct AudioBuffer_t { + AudioBuffer_t() { + buffer = 0; + size = 0; + frequency = 0; + format = 0; + } ALuint buffer; ALsizei size; ALsizei frequency; @@ -37,6 +43,7 @@ AudioBuffer_t precacheAudioTable[AUDIO_BUFFER_NUMTYPES][MAX_PRECACHE_AUDIO]; AudioBuffer_t speechPrecacheAudioTable[MAX_PRECACHE_AUDIO]; AudioBuffer_t musicPrecacheAudioTable[MAX_PRECACHE_AUDIO]; ALuint streaming_buffers[MAX_STREAM_BUFFERS]; +AudioBuffer_t movieAudioBuffer; int currentMusicPlaying = -1; int currentAudioTSource = 0; @@ -82,6 +89,10 @@ bool loadWavFile(const char* filename, AudioBuffer_t &audioBuffer) { ALsizei* frequency = &audioBuffer.frequency; ALenum* format = &audioBuffer.format; + if(audioBuffer.buffer != 0) { + alDeleteBuffers(1, &audioBuffer.buffer); + } + try { soundFile = fopen(filename, "rb"); if (!soundFile) { @@ -181,6 +192,25 @@ void AudMix_PlayMusic(int musicId) { currentMusicPlaying = musicId; } +/* +============= +AudMix_PlayMovieAudio +============= +*/ +void AudMix_PlayMovieAudio(const char *name) { + if(!loadWavFile(name, movieAudioBuffer)) { + return; + } + + alSourcei(audio_sources[MAX_AUDIO_SOURCES - 1], AL_BUFFER, movieAudioBuffer.buffer); + alSourcei(audio_sources[MAX_AUDIO_SOURCES - 1], AL_LOOPING, 0); + alSourcePlay(audio_sources[MAX_AUDIO_SOURCES - 1]); +} + +void AudMix_StopMovieAudio(void) { + alSourceStop(audio_sources[MAX_AUDIO_SOURCES - 1]); +} + bool AudMix_IsSourcePlaying(ALuint source) { ALenum state; diff --git a/code/redalert/conquer.cpp b/code/redalert/conquer.cpp index ade5f8e..4775cba 100644 --- a/code/redalert/conquer.cpp +++ b/code/redalert/conquer.cpp @@ -2910,10 +2910,10 @@ void Play_Movie(char const * name, ThemeType theme, bool clrscrn, bool immediate if (name) { char fullname[_MAX_FNAME+_MAX_EXT]; - _makepath(fullname, NULL, NULL, name, ".mp4"); + _makepath(fullname, NULL, NULL, name, ""); #ifdef WIN32 char palname [_MAX_FNAME+_MAX_EXT]; - _makepath(palname , NULL, NULL, name, ".mp4"); + _makepath(palname , NULL, NULL, name, ""); #endif //WIN32 #ifdef CHEAT_KEYS // Mono_Set_Cursor(0, 0);Mono_Printf("[%s]", fullname); diff --git a/code/redalert/vqamovie.cpp b/code/redalert/vqamovie.cpp index 18bc158..629fae1 100644 --- a/code/redalert/vqamovie.cpp +++ b/code/redalert/vqamovie.cpp @@ -31,11 +31,14 @@ long VQA_Open(_VQAHandle *videoHandle, char const* filename) { int ret; char fullpath[512]; - sprintf(fullpath, "movies/%s", filename); + sprintf(fullpath, "movies/%s.mp4", filename); if(!videoHandle->InitFromFile(fullpath, false)) { return -1; } + sprintf(fullpath, "movies/english/%s.wav", filename); + AudMix_PlayMovieAudio(fullpath); + return (0); } @@ -58,7 +61,8 @@ long VQA_Play(_VQAHandle* vqaHandle) { // Check for any new SDL events. while (SDL_PollEvent(&event)) { if (event.type == SDL_KEYDOWN) { - //delete raw_image_buffer; + //delete raw_image_buffer; + AudMix_StopMovieAudio(); return 0; } } @@ -69,6 +73,7 @@ long VQA_Play(_VQAHandle* vqaHandle) { Image_UploadRaw(cin.image, cin.rawbuffer, false, NULL, false); } if(cin.image == NULL) { + AudMix_StopMovieAudio(); return 0; } @@ -76,6 +81,8 @@ long VQA_Play(_VQAHandle* vqaHandle) { Device_Present(); } + + AudMix_StopMovieAudio(); return (0); } diff --git a/movies/english/SOVIET1.wav b/movies/english/SOVIET1.wav new file mode 100644 index 0000000..3c35367 Binary files /dev/null and b/movies/english/SOVIET1.wav differ diff --git a/movies/english/redintro.wav b/movies/english/redintro.wav new file mode 100644 index 0000000..2ca6bfe Binary files /dev/null and b/movies/english/redintro.wav differ diff --git a/movies/raw/hires/run.bat b/movies/raw/hires/run.bat index 8443a03..d6a0e6d 100644 --- a/movies/raw/hires/run.bat +++ b/movies/raw/hires/run.bat @@ -1,2 +1,5 @@ -for %%f in (*.*) do ffmpeg -i %%f -c:v libx264 -s 720x480 -pix_fmt yuv420p %%~nf.mp4 +for %%f in (*.avi*) do ( + ffmpeg -i %%f -c:v libx264 -s 720x480 -pix_fmt yuv420p %%~nf.mp4 + ffmpeg -i %%~nf.mp4 -bitexact -acodec pcm_s16le -ar 22050 -ac 1 %%~nf.wav +) pause \ No newline at end of file