Added initial audio support for movies. External wav files are going to be used for multilang videos.

This commit is contained in:
Justin Marshall
2020-07-16 12:45:32 -07:00
parent 2099c00bd3
commit b87f462d5f
7 changed files with 48 additions and 6 deletions
+3 -1
View File
@@ -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);
+30
View File
@@ -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;
+2 -2
View File
@@ -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);
+9 -2
View File
@@ -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.
+4 -1
View File
@@ -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