BJ-項目音頻處理(matlab)

目前一個音頻項目需要用到Matlab,動作UI主要是C++寫的,所以打算是Matlab編譯成exe執行文件,然後再通過C++ 調用Matlab的執行文件,生成結果文件txt,上位機去Load;

Matlab 不動,記錄一步一步的操作,以備將來只需;


1:在沒有安裝的電腦運行matlab的話,需要安裝MCR, 其路徑在安裝的matlab的:[MATLAB安裝目錄]\toolbox\compiler\deploy\win64;文件名爲“MCRInstaller.exe”; 執行步驟如下:

      1)先把這個安裝在新的電腦上面;

      2)然後配置環境,點擊“我的電腦”  “屬性”,“高級”,“環境變量”,“添加”指定一個變量名,然後將路徑C:\Program Files\MATLAB\MATLAB Compiler Runtime\v80\runtime\win64複製到裏面就可以了(安裝路徑)。 

2:如何把Matlab編譯成exe程序,首先創建m文件,然後在命令窗口輸入: "mcc -m xx.m",xx.m是你需要編譯的m文件,如果你想去掉matlab執行的dos窗口,可以把編譯命令改爲“mcc -e xx.m”;

3:Matlab讀寫txt文件:

    fid = fopen(文件名,‘打開方式’);

說明:fid用於存儲文件句柄值,如果fid>0,這說明文件打開成功。打開方式有如下選擇: 
‘r’:只讀方式打開文件(默認的方式),該文件必須已存在。 
‘r+’:讀寫方式打開文件,打開後先讀後寫。該文件必須已存在。 
‘w’:打開後寫入數據。該文件已存在則更新;不存在則創建。 
‘w+’:讀寫方式打開文件。先讀後寫。該文件已存在則更新;不存在則創建。 
‘a’:在打開的文件末端添加數據。文件不存在則創建。 
‘a+’:打開文件後,先讀入數據再添加數據。文件不存在則創建。 
另外,在這些字符串後添加一個“t”,如‘rt’或‘wt+’,則將該文件以文本方式打開;如果添加的是“b”,則以二進制格式打開,這也是fopen函數默認的打開方式。

最基本的寫入txt文件方法:

%(matlab 與 C++ 類型指代相同)  %d-->int  %f-->float  %lf-->double  %s-->string
a = 4; b = 4.3; c = 'name';
fid = fopen(path,'w');
fprintf(fid,'%d %f %s\n',a,b,c);
fclose(fid);

最基本的讀入txt文件大方法:

file = fopen(filename,'r');
data = fscanf(file,'%s');
flcose(file);

//2018-2-26續,發現c++ 調用matlab的話很慢,所以該用dll的形式,這樣就只會是第一次比較慢

1:怎麼編譯成dll?

示例:將一個Matlab函數MyFun 編譯成libMyFun 的命令:

mcc –W cpplib:libMyFun –T link:lib MyFun

參數說明:-W控制編譯之後的封裝格式,cpplib表示c++lib,冒號之後是編譯輸出lib名,-T表示目標,link:lib表示連接到lib的目標,MyFun是待編譯的m文件名,編譯成功之後,會輸出三個文件:libMyFun.lib libMyFun.dll libMyFun.h


2:C++的環境配置:

  

將前面生成的mydll.dll、mydll.h和mydll.lib三個文件拷貝到新建的C++工程目錄中,並將mydll.h加入工程,將並設置工程屬性。

  • 項目屬性——VC++目錄——包含目錄:

  • 項目屬性——VC++目錄——庫目錄:

 

 

  • 項目屬性——鏈接器——輸入:
mclmcrrt.lib
mydll.lib(這是自己生成的)

function[sum] = Add(n)
sum  = 0;
for i=1:n
    sum = sum + i;
end
end
//添加初始化函數
if(!AddInitialize())
{
    printf_s(“initial Matlab function fail”);
   return -1;
}

mwArray sum(1,1,mxINT32_CLASS);
mwArray n(1,1,mxINT32_CLASS);
int num = 3;
n = num;
Add(1,sum,n);
addTerminate();




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章