mirror of
https://github.com/freedoom/freedoom.git
synced 2025-09-02 07:25:45 -04:00
genmidi: Move GENMIDI C code to subdirectory.
Move C code into subdirectory as it will soon be only of historical interest. Add extra program to dump SBI instrument patches, switch to using OPL2 instruments, and ignore "null" instruments (all-zero).
This commit is contained in:
parent
5ce7690612
commit
b754214379
8 changed files with 138 additions and 20 deletions
|
@ -1,16 +0,0 @@
|
|||
|
||||
CFLAGS = -Wall
|
||||
OBJS = genmidi-gen.o oplinstrs.o instrnames.o
|
||||
|
||||
genmidi.lmp : genmidi-gen
|
||||
./genmidi-gen $@
|
||||
|
||||
genmidi-gen : $(OBJS)
|
||||
$(CC) $(LDFLAGS) $(OBJS) -o $@
|
||||
|
||||
%.o : %.c
|
||||
$(CC) $(CFLAGS) -c $^ -o $@
|
||||
|
||||
clean:
|
||||
rm -f $(OBJS) genmidi-gen genmidi.lmp
|
||||
|
19
lumps/genmidi/orig/Makefile
Normal file
19
lumps/genmidi/orig/Makefile
Normal file
|
@ -0,0 +1,19 @@
|
|||
|
||||
CFLAGS = -Wall
|
||||
OBJS = oplinstrs.o instrnames.o
|
||||
|
||||
genmidi.lmp : genmidi-gen
|
||||
./genmidi-gen $@
|
||||
|
||||
genmidi-gen : $(OBJS) genmidi-gen.o
|
||||
$(CC) $(LDFLAGS) $(OBJS) genmidi-gen.o -o $@
|
||||
|
||||
dump-sbi : $(OBJS) dump-sbi.o
|
||||
$(CC) $(LDFLAGS) $(OBJS) dump-sbi.o -o $@
|
||||
|
||||
%.o : %.c
|
||||
$(CC) $(CFLAGS) -c $^ -o $@
|
||||
|
||||
clean:
|
||||
rm -f $(OBJS) genmidi-gen genmidi.lmp
|
||||
|
|
@ -1,6 +1,9 @@
|
|||
|
||||
This is the "original" code previously used to generate a GENMIDI
|
||||
lump, and the original set of patches.
|
||||
|
||||
This code generates a functional GENMIDI lump using the free patch data
|
||||
from the OpenBSD OPL MIDI driver. The result doesn't sound quite as
|
||||
from the OpenBSD OPL MIDI driver. The result doesn't sound quite as
|
||||
good as the original Doom lump; however, most source ports don't use
|
||||
GENMIDI anyway nowadays, so this should be good enough.
|
||||
|
94
lumps/genmidi/orig/dump-sbi.c
Normal file
94
lumps/genmidi/orig/dump-sbi.c
Normal file
|
@ -0,0 +1,94 @@
|
|||
//
|
||||
// Copyright (c) 2011, Simon Howard
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright notice,
|
||||
// this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above copyright
|
||||
// notice, this list of conditions and the following disclaimer in the
|
||||
// documentation and/or other materials provided with the distribution.
|
||||
// * Neither the name of Freedoom project nor the names of its contributors
|
||||
// may be used to endorse or promote products derived from this software
|
||||
// without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
// POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "oplvar.h"
|
||||
|
||||
#define SBI_HEADER "SBI\x1a"
|
||||
|
||||
struct sbi {
|
||||
char header[4];
|
||||
char name[32];
|
||||
char opldata[16];
|
||||
};
|
||||
|
||||
extern char *genmidi_instr_names[];
|
||||
|
||||
static int is_null_instr(struct opl_operators *instrument)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 10; ++i) {
|
||||
if (instrument->ops[i] != 0x00) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void write_sbi(char *filename, char *instrname, struct opl_operators *opl)
|
||||
{
|
||||
FILE *fs;
|
||||
struct sbi data;
|
||||
|
||||
memset(&data, 0, sizeof(data));
|
||||
memcpy(data.header, SBI_HEADER, 4);
|
||||
strcpy(data.name, instrname);
|
||||
memcpy(data.opldata, opl->ops, 16);
|
||||
|
||||
fs = fopen(filename, "wb");
|
||||
fwrite(&data, 1, sizeof(data), fs);
|
||||
fclose(fs);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
char filename[32];
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 175; ++i) {
|
||||
if (is_null_instr(&opl2_instrs[i])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (i < 128) {
|
||||
sprintf(filename, "instr%03i.sbi", i + 1);
|
||||
} else {
|
||||
sprintf(filename, "perc%02i.sbi", i - 128 + 35);
|
||||
}
|
||||
|
||||
write_sbi(filename, genmidi_instr_names[i], &opl2_instrs[i]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -83,6 +83,19 @@ static void write_sbi_data(FILE *fstream, unsigned char *data)
|
|||
fputc(0, fstream);
|
||||
}
|
||||
|
||||
static int is_null_instr(struct opl_operators *instrument)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 10; ++i) {
|
||||
if (instrument->ops[i] != 0x00) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void write_instrument(FILE *fstream,
|
||||
struct opl_operators *instrument,
|
||||
int percussion)
|
||||
|
@ -101,7 +114,12 @@ static void write_instrument(FILE *fstream,
|
|||
|
||||
fputc(0x00, fstream);
|
||||
fputc(0x80, fstream); // finetune
|
||||
fputc(0x00, fstream); // fixed note
|
||||
|
||||
if (is_null_instr(instrument)) { // fixed note
|
||||
fputc(0x00, fstream);
|
||||
} else {
|
||||
fputc(0x10, fstream);
|
||||
}
|
||||
|
||||
write_sbi_data(fstream, instrument->ops);
|
||||
write_sbi_data(fstream, instrument->ops + 11);
|
||||
|
@ -143,7 +161,7 @@ static void output_genmidi(char *filename)
|
|||
|
||||
write_header(fstream);
|
||||
|
||||
write_instrument_data(fstream, opl3_instrs);
|
||||
write_instrument_data(fstream, opl2_instrs);
|
||||
write_instrument_names(fstream, genmidi_instr_names);
|
||||
|
||||
fclose(fstream);
|
Loading…
Add table
Add a link
Reference in a new issue