 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18094 |
回覆: 關於 Playsound 的深入用法
引用: 最初由 tycoon868 發表
請教總版主:
我在五分鐘週期的台當月下
利用公式將 K棒 依照漲跌強弱共區分為
八個等級 1~8 級
並製作了 八個 等級的 WAV檔
時間長度只有兩秒
請問是否有可能達到以下效果:
1. 每跳出下一根時 依照其等級
播放 WAV 檔一次就好
除非它在這個五分鐘週期中有改變等級
2. 再這一個五分鐘周期當中
如果從 3級 跳到 4級
也只是在轉變的Tick 發出四級WAV
而不是一直隨著 Tick 不停播放
因為小弟有弱視+乾眼症
以上需求是為了五小時盯盤時 偶而可以讓眼睛休息一下 改由耳朵代勞
但經過爬文 Playsound 似乎有其限制
而且好像頗耗系統資源
希望您可以告知ㄧ個可以達到上述需
求而 P4 3.0 舊PC 也負荷的了的公式寫法
謝謝您
Playsound 很單純, 並沒有所謂限制
WAV 錄製後最好裁切至最短, 並且以低品質存放
WAV品質高或時間長, 檔案就會大, 吃資源就會較重
WAV檔要小而短才好用
要做到前述...當等級有變換時發出聲音(一次變換發聲一次)
是可以實現的(需將前次記錄與本次記錄比對, 故需要寫檔)
具體做法大致如下:
1. 將記錄等級變數之最新值導入 VBScript 中
2. 與之前存在記錄檔中的等級值去做比較(TXT檔)
3. 若值相等, VBScript 傳回一個零值給奇狐
若有不同, VBScript 就將新值存入記錄檔, 並將新值傳回給奇狐
4. 再依據傳回的值, 搭配 Playsound 決定發音
傳回零不發聲, 若傳回為1到8, 則發出相對應的聲音
|
|
向版主報告此篇 |  |
|
2010-05-21 11:03 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18094 |
引用: 最初由 tycoon868 發表
總版主您好:
對一位僅初步會運用 奇弧函數寫簡單公式 沒有學過程式語言的我來說
作法一:
VBScript 插入到奇弧公式中 會很難上手嗎?
可以給個方向嗎?
作法二:
還是我應該放棄 [用耳朵聽盤] ~
一根五分K 發聲一次
改作成 有升降級時才 連續Playsound 五分鐘?
請針對 學會作法一是否需耗時很久給我建議
謝謝您
對於剛入門程式寫作的人, 是有點難度
程式處理範例如下:
原碼:
....您原來的公式置於此段之前....
LevelN:=MyLevel; //請自行將 MyLevel 改為您原來存放等級的變數
AlgName:='DemoBeep'; //請自行將 DemoBeep 改為指標名稱(最好用英文名稱,不要用中文)
AddStr:=StkLabel+'_'+NumToStr(DATATYPE,0);
UseFile:=GetAppMainDir+'\'+AlgName+'_'+AddStr+'.txt';
GetBeepSel:=0;
<%
LevelN = FFL.VarData("LevelN")
GetBeepSel = FFL.VarData("GetBeepSel")
UseFile = FFL.VarData("UseFile")
NowLevel = LevelN(ubound(LevelN))
Set FS = CreateObject("Scripting.FileSystemObject")
OldLevel = -1
If FS.FileExists(UseFile) then
Set RdFS = FS.OpenTextFile(UseFile, 1)
RdLevel = RdFS.ReadLine
if RdLevel>"" then OldLevel = CINT(RdLevel)
end if
GetBeepSel = 0
if OldLevel<>NowLevel then GetBeepSel = NowLevel
Set RdFS = FS.CreateTextFile(UseFile, true)
RdFS.Write NowLevel
RdFS.close
FFL.VarData("GetBeepSel") = GetBeepSel
%>
BeepSel:=C*0+GetBeepSel;
PLAYSOUND(BeepSel=1,0,GetAppMainDir+'\Effwav\eff01.wav');
PLAYSOUND(BeepSel=2,0,GetAppMainDir+'\Effwav\eff02.wav');
PLAYSOUND(BeepSel=3,0,GetAppMainDir+'\Effwav\eff03.wav');
.....以下省略.....
BeepSel=0 時代表等級沒變, 不需發出聲音
BeepSel>0 時代表等級有變化(BeepSel為變化後的等級)
|
|
向版主報告此篇 |  |
|
2010-05-21 18:37 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18094 |
引用: 最初由 tycoon868 發表
感謝版主:
如果我是盤中手動翻頁( 總額持倉前100名) 日k線 遇到強勢股時
Playsound(S2>20,0,'Top Rank'); 我想要停下來慢慢看這一檔個股
它卻一直 Plansound
************* 當 Playsound 用在日線時
是否有其他方法可以 只叫一次 ? ********
如果是 五分K 可能下一根就不會叫
真的想知道 日K 下的 [提示聲音] 要 如何運用?(因為可能大半天都是滿足條件的)
謝謝
原碼:
CkBeep:=C>O; //請自行將Beep條件變更,現為:開盤大於收盤
AlgName:='StkBeep'; //請自行將 StkBeep 改為指標名稱(最好用英文名稱,不要用中文)
UseStkNo:=StkLabel;
AddStr:=NumToStr(DATATYPE,0);
UseFile:=GetAppMainDir+''+AlgName+'_'+AddStr+'.txt';
GetBeepSel:=0;
<%
CkBeep = FFL.VarData("CkBeep")
UseFile = FFL.VarData("UseFile")
UseStkNo = FFL.VarData("UseStkNo")
GetBeepSel = FFL.VarData("GetBeepSel")
BeepCond = INT(CkBeep(ubound(CkBeep)))
Set FS = CreateObject("Scripting.FileSystemObject")
if BeepCond > 0 then
NowBeep = UseStkNo & "_" & CStr(BeepCond)
OldBeep = ""
If FS.FileExists(UseFile) then
Set RdFS = FS.OpenTextFile(UseFile, 1)
OldBeep = RdFS.ReadLine
end if
if OldBeep<>NowBeep then GetBeepSel=1
else
NowBeep = "Null"
end if
Set RdFS = FS.CreateTextFile(UseFile, true)
RdFS.Write NowBeep
RdFS.close
FFL.VarData("GetBeepSel") = GetBeepSel
%>
BeepSel:C*0+GetBeepSel linethick;
PLAYSOUND(BeepSel=1,0,GetAppMainDir+'\Effwav\eff01.wav');
僅可套用在一個視窗的一個圖面上
若要套在其他圖面或視窗, 請另建公式給與不同的 AlgName 後再套用
否則程式發生會相互影響造成混亂
|
|
向版主報告此篇 |  |
|
2010-07-08 09:40 |
|
|
|  |
本站所有內容未經作者授權禁止轉貼節錄, 發表言論僅供參考勿作為投資決策依據。瀏覽本站請使用 IE 5.5 以上版本, 最佳瀏覽解析度 1024 x 768 全彩。
|
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved. 聯絡我們
|