史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2006-09-23, 09:25 PM   #1
cruise70
註冊會員
榮譽勳章
UID - 37757
在線等級: 級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時
註冊日期: 2003-02-13
VIP期限: 2007-05
文章: 222
精華: 0
現金: 266 金幣
資產: 266 金幣
預設 疑問 - 請教關於寫簡單的程式來模擬鋼琴(vbscript)

請教關於寫簡單的程式來模擬鋼琴(vbscript)

蒙之前mini psac sdany三位大大指出一條學習 vbscript 的路

所以現在對於vbscript算是稍微知道一點點

想寫一個簡單小程式來模擬鋼琴

以前好像在網頁上看人家有寫過程式

不知道該怎麼寫?

我的vbscript指的是WSH 非用於網頁的vbscript (因為兩者有點不同)

不好意思麻煩各位大大了
cruise70 目前離線  
送花文章: 8, 收花文章: 2 篇, 收花: 3 次
回覆時引用此帖
舊 2006-09-25, 12:08 PM   #2 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時
註冊日期: 2002-12-07
文章: 13343
精華: 0
現金: 26452 金幣
資產: 3024312 金幣
預設

vbs 因為沒有 Form 可以用
所以無法模擬鍵盤畫面

除非使用 VBA (也就是在MS 的應用程式上使用的 vbscript)
才可以宣告API

就算不是要 鍵盤畫面
或只是 直接寫譜方式 來模擬
.vbs 也沒有多媒體演奏函式可以使用

這裡有個利用網頁的vbscript的模擬鋼琴寫法
http://www.socialwork.com.hk/vb/vbsd...omForm0010.htm
(這個網頁要開啟 要花一點時間...)

要不然只能退一步
準備好一首曲子
接著 .vbs內容如下三行
dim MCIOBJ
set MCIOBJ = CreateObject("WScript.Shell")
MCIOBJ.run "mplay32.exe /play /close c:\piano.wav"

註:
mplay32.exe是 windows內建的一個播放程式
/play /close 表示演奏後自動關閉此播放程式
c:\piano.wav 就是準備好的曲子

WSH 在檔案操作上是很好用
但也是有限制的 無法像 VB做深入操作的
可以的話 退一步研究看看 VBA for Office (Excel、Word...什麼的)

最後
下三行是叫出windows多媒體裝置控制台
dim MCIOBJ
set MCIOBJ = CreateObject("WScript.Shell")
MCIOBJ.run "Rundll32.exe Shell32.dll, Control_RunDLL mmsys.cpl,,0"

那能否解析出 .dll 的操作
抽出 mciSendStringA、PlaySoundA 等WinAPI函式呢.....?
個人是找不到啦 ^^""

可能還是有辦法
比如用 .js 來辦到
不過個人是對 Javascript 沒有研究
所以只能想到這些...


網路上大部分能找到都是
vbscript、JavaScript網頁設計
對 .js、.vbs for WSH 很多是定位於 危險 ≒ 病毒
所以建議網友
可以直接試試 VB 來設計
編譯成 .exe 也是容易攜帶的
mini 目前離線  
送花文章: 2013, 收花文章: 8001 篇, 收花: 26805 次
回覆時引用此帖
向 mini 送花的會員:
Admin2 (2006-10-11)
感謝您發表一篇好文章
舊 2006-09-25, 05:29 PM   #3 (permalink)
註冊會員
榮譽勳章
UID - 37757
在線等級: 級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時
註冊日期: 2003-02-13
VIP期限: 2007-05
文章: 222
精華: 0
現金: 266 金幣
資產: 266 金幣
預設

引用:
作者: mini
vbs 因為沒有 Form 可以用
所以無法模擬鍵盤畫面

除非使用 VBA (也就是在MS 的應用程式上使用的 vbscript)
才可以宣告API

就算不是要 鍵盤畫面
或只是 直接寫譜方式 來模擬
.vbs 也沒有多媒體演奏函式可以使用

這裡有個利用網頁的vbscri...
不能作Form的話,真的有點可惜
能不能請教大大
完整的播放一個聲音檔是下面這樣而已嗎?
dim MCIOBJ
set MCIOBJ = CreateObject("WScript.Shell")
MCIOBJ.run "mplay32.exe /play /close c:\piano.wav"

還是說我需要再叫出"windows多媒體裝置控制台"才可以執行?
MCIOBJ.run "Rundll32.exe Shell32.dll, Control_RunDLL mmsys.cpl,,0"

只能退而求其次準備多個鋼琴按鍵音的檔,沒有Form直接用鍵盤彈,也是不錯
如果要這麼做的話,第三行可不可以直接去掉 /close 寫成
MCIOBJ.run "mplay32.exe /play c:\piano.wav"

印象中好像有個程式叫API-Guide
好像可以查出API的功能,不過好像只有英文版(大概)
另外FoxAPIv15好像也可以,不過是簡體版,所以使用上會有亂碼
cruise70 目前離線  
送花文章: 8, 收花文章: 2 篇, 收花: 3 次
回覆時引用此帖
舊 2006-09-25, 07:12 PM   #4 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時
註冊日期: 2002-12-07
文章: 13343
精華: 0
現金: 26452 金幣
資產: 3024312 金幣
預設


dim MCIOBJ
set MCIOBJ = CreateObject("WScript.Shell")
MCIOBJ.run "mplay32.exe /play /close c:\piano.wav"
三行,存成 某某.vbs 就可得到效果了

去掉 /close 的話,演奏完 mplay32.exe開啟的播放視窗程式就不會自動關閉

MCIOBJ.run "Rundll32.exe Shell32.dll, Control_RunDLL mmsys.cpl,,0"
只是比喻
"是否有方法能使用 .dll 裡的API ?" 而已

Q:FoxAPIv15好像也可以,不過是簡體版,所以使用上會有亂碼
A:你可以用 Microsoft AppLocale 來掛上 FoxAPIv15簡體版
這樣就可以看到到簡體字
或 到中文化版區 求助 繁中化
mini 目前離線  
送花文章: 2013, 收花文章: 8001 篇, 收花: 26805 次
回覆時引用此帖
舊 2006-09-27, 05:32 PM   #5 (permalink)
註冊會員
榮譽勳章
UID - 37757
在線等級: 級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時級別:22 | 在線時長:585小時 | 升級還需:36小時
註冊日期: 2003-02-13
VIP期限: 2007-05
文章: 222
精華: 0
現金: 266 金幣
資產: 266 金幣
預設

引用:
作者: mini

dim MCIOBJ
set MCIOBJ = CreateObject("WScript.Shell")
MCIOBJ.run "mplay32.exe /play /close c:\piano.wav"
三行,存成 某某.vbs 就可得到效果...
不好意思 再請教大大..

要寫這個程式我目前能夠想到的是
準備各音階的聲音檔 , 製作的時候
只能寫好譜或是給一個inputbox讓使用者填入整首譜 , 然後讓vbs執行
這種方式應該不難 , 但是我比較想要作的是彈什麼就是什麼 , 就像一般的鋼琴般
把鍵盤當作琴鍵 , 按一個音是個音...

我有查到一個網站
http://faculty.stut.edu.tw/~tang/project/proj_ref.htm
鋼琴鍵盤示範midi發聲程式設計 這項有VB原始碼
我比較驚訝的是好像是直接以winAPI來發音 , 所以不需要準備什麼鋼琴音
看了一下他好像有用到winmm的東西 , 沒學過VB和API用法
一下子看很吃力 , 完全不知所云
不知道這個程式 , 有沒有辦法vbscript化 ?
不用太複雜 , 只要可以彈就好了

他是以Form用滑鼠來彈 ( 雖然看過資料WSH可以利用,IE的物件叫出表單 )
我有想過 , 想用鍵盤彈感覺好像很難達成
因為用能夠給他指令的 , 目前我只知道
1. 以inputbox給 , 但是按一個音後要按enter , 所以不可行
2. 用另外的txt檔給或是由DOS執行時 , 順便給指令
但是這個跟一次給整首歌的情形 , 不就沒兩樣了
不知道有沒有辦法 , 達成按一個鍵就達成某事件(EX:一個鋼琴音)
的方法
cruise70 目前離線  
送花文章: 8, 收花文章: 2 篇, 收花: 3 次
回覆時引用此帖
舊 2006-09-29, 02:25 PM   #6 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時級別:97 | 在線時長:9861小時 | 升級還需:135小時
註冊日期: 2002-12-07
文章: 13343
精華: 0
現金: 26452 金幣
資產: 3024312 金幣
預設

Q: 不知道這個程式 , 有沒有辦法vbscript化 ?
A: 個人是覺得沒辦法...
※VB的 WinAPI 是很簡單使用的東西 (當然你還是要了解各參數欄的意義)

如果你能解決 WSH彈奏的問題 (這一點個人想不出辦法,看了一下 VBScript 所不支援的 VBA 功能 還真不少...)
對於
設計好樂普格式後
利用讀取寫好的樂普
自動彈曲
這還好解決
mini 目前離線  
送花文章: 2013, 收花文章: 8001 篇, 收花: 26805 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 02:59 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1