SDK のサンプルソースを [C++Builder5] のコマンドラインコンパイラでメイクして syro.exe を作成した。
メモ:
grep.exe オプション更新
コマンドライン grep -n -o -u grp.exe
新しいコマンド grp.exe は "-n" "-o" がデフォルトオプションになっている
検索一致行の表示フォーマットが ファイル名 行番号 行内容 となる
リダイレクトでファイル出力すると、エディタのタグジャンプが使える
syro.exe が SDK example\execute_win\syro_volcasample_example.exe と同じ動作をするか検証する
・以下、example\execute_win\syro_volcasample_example.exe を[本家.exe]と呼ぶ
・以下、上記で生成した syro.exe を[パチもん.exe]と呼ぶ
[本家.exe]で生成し、本体転送で正常動作した syro stream を比較用に用意
・sample_.wav 全プリセットサンプルデータ
・all_sample_preset.alldata を[本家.exe]で変換
・pattern_.wav 全プリセットパターンデータ
・preset_pattern_??.dat (01-10) を[本家.exe]で一纏めに変換
[パチもん.exe]で、「全プリセットサンプル」と「全プリセットパターン」の syro stream を生成
2014/12/07 21:45 22,528 syro_volcasample_example.exe
実行用 .exe サイズが違いすぎない?
.3 GUI としてコンパイルしているため
・コンパイラオプション 調査・検討
.4 GUI としてリンケージしているため (?)
・リンカオプション 調査・検討
.5 リンケージしているデフォルトライブラリが大きい
・デフォルトライブラリ/リンカオプション 調査・検討
[2.][3.][.5]かな?
オプション
コンパイラ
D:\_MyProg\MIDI\VolcaSample\SDK\TEST\CMD>bcc32
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland
Syntax is: BCC32 [ options ] file[s] * = default; -x- = turn switch x off
-3 * 80386 Instructions -4 80486 Instructions
-5 Pentium Instructions -6 Pentium Pro Instructions
-Ax Disable extensions -B Compile via assembly
-C Allow nested comments -Dxxx Define macro
-Exxx Alternate Assembler name -Hxxx Use pre-compiled headers
-Ixxx Include files directory -K Default char is unsigned
-Lxxx Libraries directory -M Generate link map
-N Check stack overflow -Ox Optimizations
-P Force C++ compile -R Produce browser info
-RT * Generate RTTI -S Produce assembly output
-Txxx Set assembler option -Uxxx Undefine macro
-Vx Virtual table control -X Suppress autodep. output
-aN Align on N bytes -b * Treat enums as integers
-c Compile only -d Merge duplicate strings
-exxx Executable file name -fxx Floating point options
-gN Stop after N warnings -iN Max. identifier length
-jN Stop after N errors -k * Standard stack frame
-lx Set linker option -nxxx Output file directory
-oxxx Object file name -p Pascal calls
-tWxxx Create Windows app -u * Underscores on externs
-v Source level debugging -wxxx Warning control
-xxxx Exception handling -y Produce line number info
-zxxx Set segment names
リンカ
D:\_MyProg\MIDI\VolcaSample\SDK\TEST\CMD>ilink32
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Syntax: ILINK32 objfiles, exefile, mapfile, libfiles, deffile, resfiles
@xxxx indicates use response file xxxx
General Options: -Af:nnnn Specify file alignment
-C Clear state before linking -Ao:nnnn Specify object alignment
-wxxx Warning control -ax Specify application type
-Enn Max number of errors -b:xxxx Specify image base addr
-r Verbose linking -Txx Specify output file type
-q Supress banner -H:xxxx Specify heap reserve size
-c Case sensitive linking -Hc:xxxx Specify heap commit size
-v Full debug information -S:xxxx Specify stack reserve size
-Gn No state files -Sc:xxxx Specify stack commit size
-Gi Generate import library -Vd.d Specify Windows version
-GD Generate .DRC file -Dstring Set image description
Map File Control: -Vd.d Specify subsystem version
-M Map with mangled names -Ud.d Specify image user version
-m Map file with publics -GC Specify image comment string
-s Detailed segment map -GF Set image flags
-x No map -Gl Static package
Paths: -Gpd Design time only package
-I Intermediate output dir -Gpr Runtime only package
-L Specify library search paths -GS Set section flags
-j Specify object search paths -Gt Fast TLS
Image Control: -Gz Do image checksum
-d Delay load a .DLL -Rr Replace resources
*1 「SDK のコンパイラ指定」を発見
SDK readme_jp.txt
「visual studio 2010用のプロジェクトファイル、及びgcc,clang用のMakefileが含まれます」
visual studio 2010:
SDK project\syro_volcasample_example.vcxproj を覗いてみたら、要らん情報が多くてアタマが痛くなる
・なぜ、url なんか要る?
・等々等々等々等々
ほっとく
gcc,clang:
↓ gcc,clang用 「clangの時はmake CC=clang とします」
MakeFile
# #############################################################################
#
# Makefile for SYRO SDK
# Copyright (C) 2014 Korg Inc.
#
# #############################################################################
TARGET = syro_volcasample_exsample
CC = gcc
RM = rm -f
CFLAGS = -O3 -Wall -W -Wformat=2 -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wfloat-equal -Wpointer-arith
LDFLAGS =
SYRODIR = ../syro
EXAMPLEDIR = ../example
SRCS = $(SYRODIR)/korg_syro_comp.c $(SYRODIR)/korg_syro_func.c $(SYRODIR)/korg_syro_volcasample.c $(EXAMPLEDIR)/korg_syro_volcasample_exsample.c
OBJS = $(SRCS:.c=.o)
$(TARGET) : $(OBJS)
$(CC) $(LDFLAGS) $(OBJS) -o $(TARGET)
%.o : %c
$(CC) -c $(CFLAGS) $< -o $@
# clean
clean:
$(RM) ./$(TARGET)
$(RM) ./$(TARGET).exe
$(RM) $(SYRODIR)/*.o $(EXAMPLEDIR)/*.o
# Listing of phony targets.
.PHONY : clean
コンパイラオプションの意味を検索
CFLAGS = -O3 -Wall -W -Wformat=2 -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wfloat-equal -Wpointer-arith
http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_2.html#SEC8
http://d.hatena.ne.jp/higepon/20080430/1209525546
-O3 最適化レベル 全部
-Wall 警告 「とりあえず一通り」(?)
-Wformat=2 警告 関数呼出し引数
-Wcast-qual 警告 型修飾子を除去するようなキャスト(ポインタ)
-Wcast-align 警告 境界整列違反のおそれのあるキャスト(ポインタ)
-Wwrite-strings 警告 文字列定数の中への書き込み
-Wconversion 警告 キャストのない引数型変換
-Wfloat-equal 警告 浮動小数点の等価比較
-Wpointer-arith 警告 関数型の「サイズ」、 もしくは、 voidの「サイズ」に依存する
特別なことはないなぁ…
bcc に戻り、ジタバタとする
生成バッチ
sample.bat
syro sample.wav ac:preset.asp
実行結果
D:\_MyProg\MIDI\VolcaSample\SDK\TEST\CMD>syro sample.wav ac:preset.asp
Input data 1 : Sample All(Compress bit=16), ok.
Complete to convert.
pattern.bat
syro pattern.wav p1:p01.dat p2:p02.dat p3:p03.dat p4:p04.dat p5:p05.dat p6:p06.dat p7:p07.dat p8:p08.dat p9:p09.dat p10:p10.dat
実行結果
D:\_MyProg\MIDI\VolcaSample\SDK\TEST\CMD>syro pattern.wav p1:p01.dat p2:p02.dat p3:p03.dat p4:p04.dat p5:p05.dat p6:p06.dat p7:p07.dat p8:p08.dat p9:p09.dat p10:p10.dat
Input data 1 : Pattern, number = 1, ok.
Input data 2 : Pattern, number = 2, ok.
Input data 3 : Pattern, number = 3, ok.
Input data 4 : Pattern, number = 4, ok.
Input data 5 : Pattern, number = 5, ok.
Input data 6 : Pattern, number = 6, ok.
Input data 7 : Pattern, number = 7, ok.
Input data 8 : Pattern, number = 8, ok.
Input data 9 : Pattern, number = 9, ok.
Input data 10 : Pattern, number = 10, ok.
Complete to convert.
preset.asp は SDK alldata\all_sample_preset.alldata をリネームしたもの
p01.dat-p10.dat は SDK pattern\preset_pattern_??.dat (01-10) をリネームしたもの
生成された syro stream を比較
2014/12/29 14:48 4,673,964 pattern.wav
2014/12/27 17:37 4,673,964 pattern_.wav
2014/12/29 14:28 163,430,124 sample.wav
2014/12/27 17:50 140,284,428 sample_.wav
・全プリセットサンプルデータは、あからさまにサイズが違う
・全プリセットパターンデータはサイズが同じなので、詳細比較
比較
D:\_MyProg\MIDI\VolcaSample\SDK\TEST\CMD>fc /B pattern.wav pattern_.wav
ファイル pattern.wav と PATTERN_.WAV を比較しています
FC: 相違点は検出されませんでした
FC コマンド システムコマンドラインツール(旧姓:DOS コマンド)
全プリセットパターンデータは、問題なく[パチもん.exe]で生成出来た。
さて、ここから
「なぜ、全プリセットサンプルデータ生成が違うか?」
推測:
.1 構造体サイズが pack 形式によって違うため
・コンパイラオプション 調査・検討
・SDK 指定のコンパイラを再度確認 どこで見たっけかな? (*1)
.2 C++ としてコンパイルしているため
・コンパイラオプション 調査・検討
と、その前に
2014/12/29 13:36 67,584 SYRO.exe