課程設(shè)計(論文)-基于MATLAB的音樂電子琴制作_第1頁
課程設(shè)計(論文)-基于MATLAB的音樂電子琴制作_第2頁
課程設(shè)計(論文)-基于MATLAB的音樂電子琴制作_第3頁
課程設(shè)計(論文)-基于MATLAB的音樂電子琴制作_第4頁
課程設(shè)計(論文)-基于MATLAB的音樂電子琴制作_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、姓名:班級:2013級電子信息工程1班學號: / 14基于MATLAB的音樂電子琴制作簡述:電子琴的每個音階均對應(yīng)一個特定頻率的信號,通過調(diào)用數(shù)字信號發(fā)生器產(chǎn)生一系列指定的頻率的聲音,從而達到虛擬的電子琴的功能。本次設(shè)計是基于MATLAB GUI程序?qū)崿F(xiàn)的一個音樂鍵盤仿真系統(tǒng)。1功能介紹總體設(shè)計框圖如下圖所示,其包括單音鍵盤發(fā)音模塊,音效長短的選擇模塊,包絡(luò)的 選擇模塊,實現(xiàn)鍵盤代替鼠標輸入模塊,雙音多頻模塊,演奏音樂模塊,播放歌曲,視頻 模塊包括對文件播放的暫停,停止和復位,多鍵盤輸入對輸入后統(tǒng)一播放模塊和畫圖模 塊。Matlab的數(shù)據(jù)采集工具箱(DAT)提供了一系列的函數(shù)和命令來實現(xiàn)實時模

2、擬信號的輸出 通過調(diào)用這些函數(shù)和命令可以直接控制聲卡輸出虛擬信號。只需要一臺帶有普通多媒體聲 卡并安裝了 Matlab軟件的計算機就可以滿足要求實現(xiàn)虛擬信號的輸出,系統(tǒng)結(jié)構(gòu)簡單方便。交互界面如圖1所示:圖1程序的交互界面1.1功能模塊1)單音鍵盤發(fā)音模塊設(shè)計一個帶參子函數(shù)實現(xiàn)鍵盤的發(fā)音功能,當實現(xiàn)需要實現(xiàn)音階的播放時,只要調(diào)用 這個子函數(shù),并根據(jù)不同音階、不同音調(diào)的頻率改變子函數(shù)的參數(shù)即可。2)音效長短的選擇模塊制作一個button group的組控件分別選擇不同的控件實現(xiàn)不同的音效長短,音效的長 短是通過改變播放一個音階的時間長短來實現(xiàn)的。3)包絡(luò)的選擇模塊制作一個button group的

3、組控件分別選擇不同的控件實現(xiàn)不同的包絡(luò),在模塊一的基 礎(chǔ)上,設(shè)置選中不同的控件分別對應(yīng)不同的包絡(luò),x為不同包絡(luò)(如正弦波、三角波、指數(shù)等)的表達形式,將 x與模塊一中實現(xiàn)單音鍵盤發(fā)音的函數(shù)相乘時便可實現(xiàn)不同形式的 衰減,實現(xiàn)音型的改變。4)實現(xiàn)鍵盤代替鼠標輸入模塊根據(jù)計算機鍵盤上的不同按鍵對應(yīng)不同的ASCII碼的值,利用函數(shù) get()獲取當前所按下的數(shù)字鍵對應(yīng)的 ASCII碼的值,根據(jù) ASCII碼的值判斷對應(yīng)是按下鍵盤的值。并執(zhí)行相應(yīng) 音階的功能鍵。5)雙音多頻模塊通過設(shè)置一個radio butt on來實現(xiàn)雙音多頻的功能,設(shè)置一個全局變量,當選中該控件 時,全局變量的值改變,即在帶參的子

4、函數(shù)中增加它的頻率分量。就可以實現(xiàn)雙音多頻功 能。6)演奏音樂模塊通過設(shè)置一個push button鍵來實現(xiàn),按下該鍵時,可以選擇事先自己編好的txt的文檔,通過這個文檔就可以播放音樂。7)播放歌曲,視頻模塊根據(jù)matlab提供的函數(shù),視頻時首先對文件的名字和路徑進行提起,直接對文件的播 放。音樂的則是首先對文件的名字和路徑進行提起,得到名字和路徑后就對該文件進行采 樣,使其離散化。最后實現(xiàn)對文件的播放。8)多鍵盤輸入對輸入后統(tǒng)一播放模塊該功能實現(xiàn)先對鍵盤輸入內(nèi)容進行存儲,當輸入完成后就可以按播放鍵對剛才的存儲 內(nèi)容進行播放,本功能通過radio butt on鍵實現(xiàn)的鍵盤輸入的存儲,當該建被

5、選中時,則會不斷的掃描鍵盤是否有鍵盤按下,并對按下鍵進行存儲,直到該鍵沒有被選中為止,同 時設(shè)置一個push butt on鍵對存儲的信息進行播放,播放完成后自動清除存儲的內(nèi)容,以便 下一次存儲。9)畫圖模塊該模塊的功能是根據(jù)播放每一個音符的數(shù)組畫出每一個音符的波形,使我們對播放的 音型可以一目了然,便于觀察與分析。2功能實現(xiàn)程序由兩個部分組成:MATLAB代碼(.m文件)和GUI圖形(.fig)。備注:軟件版本: MATLAB R2011b2.1單音鍵盤發(fā)音模塊根據(jù)要求,首先利用 push butt on鍵作為單音鍵盤的發(fā)音鍵。 17七個音階對應(yīng)高中低 三種不同的音調(diào)共 21個鍵,還有15個

6、輔音,共36個按鍵。如圖2所示,白色的按鍵代 表音調(diào)鍵,前7個是低音的七個音階,中間 7個是中音的七個音階,后面 7個是高音的七 個音階,黑色的代表輔音。查閱相關(guān)資料可知,發(fā)音頻率對應(yīng)的表達式為f=440*2A(s-49)/12),當所發(fā)音為低音時s的取值為3137,發(fā)中音時s的取值為4046,發(fā)高音時s的取值為4955。為了程序設(shè) 計簡化目的,設(shè)計一個名為gan gqi n(s )的子函數(shù)。有以上帶參的子函數(shù)后則每個鍵盤下面的程序非常簡單,然后在每個push butt on鍵的callback函數(shù)中調(diào)用該子函數(shù)即可,女口 gangqin( 45);廠同音區(qū)中音區(qū)1 (DO37(5114 (F

7、A6 (LA)圖2單音鍵盤發(fā)音模塊具體代碼參見:fun cti ongangqin(s)2.1.1音效長短的選擇模塊制作一個butt on group的組控件分別選擇不同的控件實現(xiàn)不同的音效長短,該組控件 包括三個radio button分別對應(yīng)不同的音效長短(長,中,短)。音效長短的改變實質(zhì)上是改變其音階播放時間的長短,定義一個全局變量T通過改變 T的值來改變音效的長度,gangqin的子函數(shù)如上面所示。界面如圖3所示:圖3音效長短的選擇模塊 具體代碼參見:Fun cti onyin xiao Callback (hObject, eve ntdata, han dies)2.2包絡(luò)的選擇模

8、塊制作一個butt on group的組控件分別選擇不同的控件實現(xiàn)不同的包絡(luò),該組控件包括 三個radio butt on分別對應(yīng)不同的包絡(luò)。如圖4所示,定義了方波、三角波和正弦波三種不同形式的包絡(luò)可供選擇。圖4包絡(luò)的選擇模塊將組合鍵中的 button group鍵的Tag的值設(shè)置為baol ”三個radio butt on鍵分別對應(yīng) 指數(shù)波、三角波、正弦波,相應(yīng)的Tag設(shè)“ zhishu ”、” sanjiao ” ” zhengxian ”, def=get(de,tag)獲取三個 Radio Button鍵中Tag的值,設(shè)置一個全局變量p,用switch函數(shù)實現(xiàn),當 case 為zhis

9、hu 時,p 的值 1; case 為sanjiao 時,p 的值 2; case 為zhengxian 時 p的值為3。把p的值反應(yīng)到gangqin( s)的子函數(shù)中,在子函數(shù)中根據(jù)不同的p的值選用不同的包絡(luò),即可實現(xiàn)不同的包絡(luò),所發(fā)出的音型便不一樣。由于電子琴的實驗結(jié)果是聲 音,難以用文字表達,在下面僅用幾張圖片展示一下結(jié)果。圖5正弦波包絡(luò)圖6方波包絡(luò)圖7三角波 具體代碼參見:Fun cti onbaoluo Callback (hObject, eve ntdata, han dies)2.3實現(xiàn)鍵盤代替鼠標輸入模塊用一個radio butt on鍵便可實現(xiàn)該功能,可以根據(jù)不同的鍵盤按鍵

10、發(fā)出不同的音樂。同時將該鍵的string改為鍵盤”,表示這個鍵是實現(xiàn)鍵盤的功能。如圖8所示:圖8鍵盤代替鼠標輸入根據(jù)計算機鍵盤上不同鍵對應(yīng)的ASCII碼的值不同,利用函數(shù)get()獲取當前所按下的鍵對應(yīng)的ASCII碼的值,并執(zhí)行相應(yīng)播放音階。具體代碼參見:fun cti onjia npan _KeyPressFc n( hObject, eve ntdata, han dies)2.4雙首多頻模塊通過設(shè)置一個radio butt on來實現(xiàn)雙音多頻的功能,當選中該按鈕時,則增加它的頻率 分量。使其含有豐富頻率分量。如圖9所示:圖9雙音多頻模塊具體代碼參見:fun cti onduop in

11、_Callback(hObject, eve ntdata, han dies)2.5演奏音樂模塊通過設(shè)置一個 push butt on 鍵來實現(xiàn),如圖10所示:圖10播放譜曲按下該鍵時,界面會要求你選擇文檔,可以選擇事先自己編好的文檔,并按打開鍵就可以播放音樂。txt文件的內(nèi)容如圖11所示:txt的文檔,選中該立 1tlF| : IftTtiOj MhVl 科&n合3111 1o -n- 7 7 _y a* 4 4 4 447 1.I45 14-4 14-442 L42 1L40 20i47 .4B .4 & 0.0, 豹0.42 0.47 047 004S 044 44 Q,圖11樂譜內(nèi)容

12、Txt文件代表的意思是如44 1 是表示頻率為 44,延長的長度為1。播放音樂不僅需要確定每個音符,還要確定每個音符延長的時間,音符延長的時間是 有n的取值大小所確定的。因此這里就可以調(diào)用子函數(shù)的形式方便的實現(xiàn)。具體代碼參見:fun cti on qin pu(a,b)fun cti on dakai Callback(hObject, eve ntdata, han dies)2.6播放歌曲,視頻模塊本功能的實現(xiàn)是通過 push button鍵來實現(xiàn)的。界面如圖12所示:圖12播放歌曲 視頻模塊通過按下播放歌曲鍵或者播放視頻鍵就可以選擇播放的文件,界面如圖13所示:按打開按鈕就可以播放音樂或

13、視頻。圖13播放視頻視頻時首先對文件的名字和路徑進行提起,直接對文件的播放,用的是matlab自帶的函數(shù)implay()。音樂的則是首先對文件的名字和路徑進行提起,得到名字和路徑后就對該 文件進行采樣,使其離散化。最后實現(xiàn)對文件的播放。這里不僅可以對音樂的播放,還可 以對音樂的暫停,復位和停止。分別用到matlab自帶的函數(shù):播放play (),暫停pause(),復位 resume ()和停止 stop ()。具體代碼參見:fun cti onship in _Callback(hObject, eve ntdata, han dles)fun cti oncha ngge_Callback

14、(hObject, eve ntdata, han dles)2.7多鍵盤輸入后統(tǒng)一播放模塊本功能通過radio button鍵實現(xiàn)的鍵盤輸入的存儲,當該建被選中時,則會不斷的掃 描鍵盤是否有鍵盤按下,并對按下鍵進行存儲,直到該鍵沒有被選中為止,同時設(shè)置一個 push butt on鍵對存儲的信息進行播放,播放完成后自動清除存儲的內(nèi)容,以便下一次存 儲。界面如圖14所示:圖14多鍵盤輸入后播放該功能實現(xiàn)先對鍵盤輸入內(nèi)容進行存儲,當輸入完成后就可以按播放鍵對剛才的存儲 內(nèi)容進行播放,播放完成后對存儲的內(nèi)容進行清空。實現(xiàn)對鍵盤的輸入內(nèi)容進行存儲,并 把存儲的值整合到數(shù)組y內(nèi),push butt o

15、n鍵是對上述存儲的信息進行讀取,識別并播放。具體代碼參見:fun cti onjia nc_KeyPressFc n( hObject, eve ntdata, han dies)fun cti onbf_Callback(hObject, eve ntdata, han dies)2.8畫圖模塊通過axse控件實現(xiàn)繪圖,繪出播放每個音階的波形,并把畫出的波形顯示到axse上,界面如圖15所示:圖15音階的波形該模塊的功能是根據(jù)播放每一個音符的數(shù)組畫出每一個音符的波形,并把其顯示在界 面上。具體代碼參見:fun cti onaxes1_CreateFc n( hObject, eve ntda

16、ta, han dies)3程序總結(jié)本程序?qū)崿F(xiàn)簡單的音頻處理功能及便捷的圖形化交互界面。具有以下特點與缺陷:1、圖形化用戶交互界面簡潔明了。右側(cè)放置音頻視頻播放的各選項控件,且從上到下 的排布體現(xiàn)操作步驟;上側(cè)顯示音頻文件的數(shù)據(jù)波形。提示信息豐富,方便操作。2、程序可擴展性好,方便功能擴展。未盡功能:(1)沒有調(diào)節(jié)音量大小的按鈕,可以優(yōu)化。(2)聲音播放時,實時的顯示播放進度。(3)更為實際的音頻處理功能待加強。4課程總結(jié)整個制作和調(diào)試過程都是按模塊進行的,對每一個模塊功能的實現(xiàn)的情況下才對下一 個功能進行制作。剛開始做模塊一時,由于沒有想到后面的一些功能所以就沒有寫子函 數(shù),是在每一個按鍵下

17、都寫了一個聲音播放的程序,這樣做不僅量大也很不方便。因此后 面改成了子函數(shù)的形式,這樣的話程序不僅簡練也很好調(diào)用,非常方便。在調(diào)試過程中先 將函數(shù)gangqin(s)中的全局變量p的不同數(shù)字代表不同的波形表達式,鼠標點擊包絡(luò)組控件 的不同按鈕,選擇不同的包絡(luò),聽起來的效果也相差較大,當包絡(luò)為指數(shù)形式時較符合平 時聽音樂的習慣。還有一個是gangqin( s)中的全局變量 T,不同的值表示不同的音效長短。播放的時間是不一樣的,因此聽起來會有不同的感覺。調(diào)試過程中應(yīng)根據(jù)相關(guān)資料和 自己的感覺不斷改變這兩個值的數(shù)字,最終選擇一個聽起來較為合適的取值。上述完成后 就需要做鍵盤代替鼠標按鍵的功能,首先需

18、要了解按下鍵盤電腦獲得的是按鍵的ASCII值。所以我們必須把按鍵的ASCII的值對應(yīng)到播放不同音符的頻率上去,這樣才能靈活的控制每一個音符,每個音符要與鍵盤的按鍵形成一一對應(yīng)關(guān)系,不然的話程序很容易出 錯。程序完成后,需要對程序進行調(diào)試,使得每一個鍵盤的按鈕按下對應(yīng)的音符會播放出 來。接下來制作的是鍵盤的存儲功能,即實現(xiàn)對鍵盤的多輸入,輸入過程中音符是不會響 的,當輸入結(jié)束后可以控制對剛才輸入的按鍵對應(yīng)的音符進行播放聲音。剛開始是一直對 數(shù)字的存儲個數(shù)會多很多,后面才知道但你按下鍵時程序已經(jīng)運行了好多遍了,每次按鍵 是當然就會存儲多個相同的值。改進后就一直只能對最后一次按鍵進行存儲,前面的被當

19、 前的值覆蓋,后面設(shè)置了一個存儲數(shù)據(jù)的數(shù)組進行存儲,使得功能才能實現(xiàn)。本次課程設(shè)計,我花了大量的時間來做這些功能,但是做完后感覺功能又特別簡單,而 且做的大部分時間都是做一些無用的工作,程序一直不夠簡單,經(jīng)常用一條很長的程序來 實現(xiàn)一個簡單的功能,做完過后發(fā)現(xiàn)可以用簡單的程序就可以實現(xiàn),整個制作過程中大部 分的時間都花在這樣的工作上,工作效率很低。同時感覺到自己對matlab的編程了解太少,很多基本功能多不了解。完成實踐后我深深的體會到了MATLAB功能的強大,它不但可以實現(xiàn)對聲音信號的處理,對圖像的處理,同時還可以對視頻,wav格式歌曲的播放以及還有很多我現(xiàn)在還不知道的很多強大的功能。在實驗

20、過程中,遇到了很多問題。首先是 資料的缺乏,沒能找到老師推薦的信號與系統(tǒng)一MATLAB綜合實驗,所以大部分的參考資料只能上網(wǎng)查找沒有什么權(quán)威性。還有自己對matlab的了解本來就很淺,很多知識都不懂,經(jīng)常需要問老師,同學或者上網(wǎng)查資料。在設(shè)計剛開始沒有什么明確的思路導致經(jīng)常 改GUI界面,最后實在無法改了就重新設(shè)計,思路很不明確,希望在以后的學習和工作中 能好好利用這次實踐的經(jīng)驗,要先想好總體思路,不能到臨時才改,這樣的話,不僅工作 量大,還耗時多。本次實踐使我受益匪淺。附錄(部分程序)fun cti on gangqin(s) %演奏音符global r;global n;global ff

21、;global T;global p;f=440*2A(s-49)/12);%各音階的頻率n=0:1/8000:T;%各音階的長短if p=1%選用包絡(luò)x=exp(-3* n);elseif p=2x=exp(-3* n).*sawtooth(2*pi*50* n);elseif p=3x=exp(-3* n).*si n(2*pi* n);endif r=1%選用單頻還是多頻ff=x.*si n(f*2*pi* n)+0.2*x.*si n( f*4*pi* n)+0.05*x.*si n(f*8*pi* n);else ff=x.*s in( f*2*pi* n);endaxes1_Cre

22、ateFc n();%畫圖sou ndsc(ff);%播放音符Fun cti on yin xiao_Callback (hObject, eve ntdata, han dies)global T;g=get(ha ndles.yi nxiao,selectedobject);%獲得音效的選中對象gt=get(g,tag);%把對象賦給 gtswitch gt%確認選中的對象case dua nyinT=0.3;case zh ongyinT=1;case cha ngyinT=2;EndFun cti on baoluo_Callback (hObject, eve ntdata, han

23、 dles) global T; global n; global p;de=get(ha ndles.baol,selectedobject);%def=get(de,tag);%switch defcase 正弦波x=0:0.001:1;y1=A*si n(2*f*pi*x+c); plot(x,y1);case 三角波x=0:0.001:1;y2=A*sawtooth(2*pi*f*x+c); plot(x,y2);case 方波x=0:0.001:1;y3=A*square(2*f*pi*x+c);plot(x,y3);end function jianpan KeyPressFcn(

24、hObject, eventdata, handles)s=get(ha ndles.jia npan ,value);%if s=0%elseif get(gcf,Curre ntCharacter)=48 ga ngqi n( 28);elseif get(gcf,Curre ntCharacter)=49 ga ngqi n( 29);elseif get(gcf,Curre ntCharacter)=50 ga ngqi n( 30);elseif get(gcf,Curre ntCharacter)=51 ga ngqi n( 31);elseif get(gcf,Curre ntC

25、haracter)=52 ga ngqi n( 32);elseif get(gcf,Curre ntCharacter)=53 ga ngqi n( 33);獲得包絡(luò)選中的對象把選中對象的tag賦給def獲得按下鍵的值看radio butt on是否按下elseif get(gcf,Curre ntCharacter)=54ga ngqi n( 34);elseif get(gcf,Curre ntCharacter)=55 ga ngqi n( 35);elseif get(gcf,Curre ntCharacter)=56 ga ngqi n( 36);elseif get(gcf,Cu

26、rre ntCharacter)=57 ga ngqi n( 37);elseif get(gcf,Curre ntCharacter)=65 ga ngqi n( 38);elseif get(gcf,Curre ntCharacter)=66 ga ngqi n( 39);elseif get(gcf,Curre ntCharacter)=67 gangqin (40);elseif get(gcf,Curre ntCharacter)=68 gangqin (41);elseif get(gcf,Curre ntCharacter)=69 ga ngqin( 42);elseif get

27、(gcf,Curre ntCharacter)=70 gangqin (43);elseif get(gcf,Curre ntCharacter)=71 ga ngqin( 44);elseif get(gcf,Curre ntCharacter)=72 gangqin (45);elseif get(gcf,Curre ntCharacter)=73 ga ngqin( 46);elseif get(gcf,Curre ntCharacter)=74 ga ngqin( 47);elseif get(gcf,Curre ntCharacter)=75 gangqin (48);elseif

28、get(gcf,Curre ntCharacter)=76 gangqin (49);elseif get(gcf,Curre ntCharacter)=77 ga ngqi n( 50);elseif get(gcf,Curre ntCharacter)=78 ga ngqi n( 51);elseif get(gcf,Curre ntCharacter)=79 ga ngqi n( 52);elseif get(gcf,Curre ntCharacter)=80 ga ngqi n( 53);elseif get(gcf,Curre ntCharacter)=81ga ngqi n( 54

29、);elseif get(gcf,Curre ntCharacter)=82 ga ngqi n( 55);elseif get(gcf,Curre ntCharacter)=83 ga ngqi n( 56);elseif get(gcf,Curre ntCharacter)=84 ga ngqi n( 57);elseif get(gcf,Curre ntCharacter)=85 ga ngqi n( 58);elseif get(gcf,Curre ntCharacter)=86 ga ngqi n( 59);elseif get(gcf,Curre ntCharacter)=87 g

30、a ngqi n( 60);elseif get(gcf,Curre ntCharacter)=88 ga ngqi n( 61);elseif get(gcf,Curre ntCharacter)=89 ga ngqi n( 62);elseif get(gcf,Curre ntCharacter)=90 ga ngqi n( 63);endfun cti on duop in _Callback(hObject, eve ntdata, han dies) global r;r=get(ha ndles.duop in ,value);%if r=1%選單頻還是多頻ff=x.*si n(f

31、*2*pi* n)+0.2*x.*si n( f*4*pi* n)+0.05*x.*si n(f*8*pi* n);else ff=x.*s in( f*2*pi* n);End多頻的按鈕是否選中fun cti on qin pu(a,b) %度global r;global n;global ff;f=440*2A(a-49)/12);n=0:1/8000:b*0.5;%x=exp(-2* n);if r=1%播放不同延長音的音符a表示音階的頻率 b表示延長音的長延長不同的長度選用單頻還是多頻播放ff=x.*si n(f*2*pi* n)+0.2*x.*si n( f*4*pi* n)+0.

32、05*x.*si n(f*8*pi* n); else ff=x.*s in( f*2*pi* n);endaxes1_CreateFc n();%sou ndsc(ff);%畫圖播放音符fun cti on dakai_Callback(hObject, eve ntdata, han dles) n ame,path=uigetfile(*,);%file=spr in tf(%s%s,path ,n ame);de=importdata(file);%for k=1:le ngth(de)qin pu(de(k),de(k+le ngth(de);%end讀取文件讀取文件的數(shù)據(jù)按文件數(shù)據(jù)

33、播放音符fun cti on ship in _Callback(hObject, eve ntdata, han dles)% n ame,path=uigetfile(*,);file=path, name;implay(file);播放視頻程序fun cti on cha ngge_Callback(hObject, eve ntdata, han dles) global yinl;n ame,path=uigetfile(*,);%file=path, name;y,fs,bits=wavread(file);%yinl = audioplayer(y, fs);%play(yi nl);%打開文件對打開的wav文件進行采樣 對采樣的值進行讀取 播放wav格式文件global yi nl;pause( yin l);%暫停fun

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論