📄 main.cpp
字号:
/*********************************************************************
Name: main.cpp
Purpose: Main source file to convert from MMF to MA1
Programmer: Yuji Hisaminato
Date: 1999/12/13
Copyright (C) 1999 YAMAHA Corporation.
*********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "machdep.h"
#ifdef mycplusplus
#include "m2m_m.h"
#endif
#ifdef TEMPO_TEST
extern int Tempo_register;
#endif
#define MEM1_MAX 1000 // 僥僗僩梡丅mem_conv_sample偱巊梡丅
#define MEM2_MAX 3000 // 僥僗僩梡丅mem_conv_sample偱巊梡丅
#define FILE_IN_MAX 400000 // 儊儌儕傪夘偟偨曄姺帪偺擖椡僼傽僀儖僒僀僘偺忋尷
// Mmf2ma1_file偺応崌偵偼娭學側偄丅
#define FILE_OUT_MAX 600000 // 儊儌儕傪夘偟偨曄姺帪偺弌椡僼傽僀儖僒僀僘偺忋尷
#ifndef mycplusplus
int mmf2ma1_memory_convert(
UINT8 *pdata_in, // 曄姺偝傟傞僨乕僞
UINT32 size_in, // 曄姺偝傟傞僨乕僞偺僒僀僘[僶僀僩]
UINT8 *pdata_out, // 曄姺偝傟偨僨乕僞偑曐懚偝傟傞僶僢僼傽
UINT32 size_out, // pdata_out偵妋曐偝傟偰偄傞僒僀僘[僶僀僩]
UINT32 *read_count //曄姺屻偺僨乕僞僒僀僘[僶僀僩]
);
bool mmf2ma1_memory_set_max_track(UINT16 max_track);
bool mmf2ma1_memory_set_phrase(UINT8 *phrase);
#endif
// mem1偵擖偭偰偄傞MMF Format Data傪MA1 Format偵曄姺偟偰mem2偵曐懚
void mem_conv_sample(SINT16 max_track, UINT8 *phrase){
#ifdef mycplusplus
Mmf2ma1_memory mmf2ma1_memory;
#endif
UINT32 read_count; // 曄姺偝傟弌椡偝傟偨僨乕僞偺僶僀僩悢丅
UINT8 mem1[MEM1_MAX];
UINT8 mem2[MEM2_MAX];
UINT32 i;
for(i=0;i<MEM1_MAX;++i) mem1[i] = i%255;
for(i=0;i<MEM2_MAX;++i) mem2[i] = 0;
for(i=0;i<MEM2_MAX;++i) printf("%d\t%d\n",i,mem2[i]);
#if defined(mycplusplus)
if(phrase != NULL) mmf2ma1_memory.set_phrase(phrase);
if(max_track >= 0) mmf2ma1_memory.set_max_track(max_track);
mmf2ma1_memory.convert(mem1,MEM1_MAX,mem2,MEM2_MAX,&read_count);
#else
if(phrase != NULL) mmf2ma1_memory_set_phrase(phrase);
if(max_track >= 0) mmf2ma1_memory_set_max_track(max_track);
mmf2ma1_memory_convert(mem1,MEM1_MAX,mem2,MEM2_MAX,&read_count);
#endif
for(i=0;i<read_count;++i) printf("%d\t%d\n",i,mem2[i]);
}
// Mmf2ma1_memory傪巊偭偨僼傽僀儖曄姺乮亖Mmf2ma1_file傪巊傢側偄乯
int file_conv_sample(char *fname_in, char *fname_out,SINT16 max_track,UINT8 *phrase){
#ifdef mycplusplus
Mmf2ma1_memory mmf2ma1_memory;
#endif
UINT32 read_count; // 曄姺偝傟弌椡偝傟偨僨乕僞偺僶僀僩悢丅
FILE *fp_in;
FILE *fp_out;
UINT8 file1[FILE_IN_MAX];
UINT8 file2[FILE_OUT_MAX];
int count;
int data;
int ret_value;
if((fp_in=fopen(fname_in,"rb"))==NULL) return -1;
if((fp_out=fopen(fname_out,"wb"))==NULL) return -1;
count = 0;
while((data=fgetc(fp_in)) != EOF){ // 僼傽僀儖偐傜撉傒崬傒儊儌儕file1偵曐懚
if(count > FILE_IN_MAX){
fprintf(stderr,"Too big input\n");
return -1;
}
file1[count++] = (UINT8)data;
}
#if defined(mycplusplus)
if(phrase != NULL) mmf2ma1_memory.set_phrase(phrase);
if(max_track >= 0) mmf2ma1_memory.set_max_track(max_track);
ret_value = mmf2ma1_memory.convert(file1,count,file2,FILE_OUT_MAX,&read_count);
#else
if(phrase != NULL) mmf2ma1_memory_set_phrase(phrase);
if(max_track >= 0) mmf2ma1_memory_set_max_track(max_track);
ret_value = mmf2ma1_memory_convert(file1,count,file2,FILE_OUT_MAX,&read_count);
#endif
if(ret_value < 0) return ret_value;
//#ifdef MA1_OUTPUT
// MA1僼僅乕儅僢僩偺僒僀僘忣曬傪彂偒崬傓
if(read_count > 65535){
fprintf(stderr,"Too Big Output file\n");
return -1;
}
file2[0] = (read_count>>8) & 0xff;
file2[1] = (read_count) & 0xff;
//#endif
fwrite(file2,sizeof(UINT8),read_count,fp_out); // 儊儌儕file2偐傜僼傽僀儖偵偡傋偰弌椡
fclose(fp_in);
fclose(fp_out);
return ret_value;
}
int main(int argc, char *argv[]){
//mem_conv_sample();
int ret_value;
SINT16 max_track;
char *phrase;
phrase = NULL;
if(argc == 3){
max_track = -1; // use default
}else if(argc == 4){
max_track = atoi(argv[3]);
}else if(argc == 5){
max_track = atoi(argv[3]);
phrase = argv[4];
}else{
fprintf(stderr,"Usage: mmf2ma1 input_file output_file [max_track [phrase]]\n");
return -1;
}
ret_value = file_conv_sample(argv[1],argv[2],max_track,(UINT8 *)phrase);
printf("ret_value = %d\n",ret_value);
return ret_value;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -