⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 是使用在雅马哈手机音源
💻 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 + -