mirror of
https://github.com/jmarshall23/CnC_Remastered_Collection.git
synced 2026-08-12 08:00:55 +02:00
Added initial audio support for movies. External wav files are going to be used for multilang videos.
This commit is contained in:
@@ -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);
|
||||
void AudMix_SetMusicState(bool musicState);
|
||||
void AudMix_PlayMovieAudio(const char* name);
|
||||
void AudMix_StopMovieAudio(void);
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -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
|
||||
Reference in New Issue
Block a user