コンピュータ等

[ リスト ]

アセンブラで 音声合成 私の言語 での サンプル抜粋

DS.L VPTR
DS.L VPTABL
DS.L RELEADSE /* Release */
DS.L SETVOICE /*    ( (This)->lpVtbl -> SetVoice(This,pToken) ) */
DS.L GETVOICE
DS.L SPEEK   /* 80 ( (This)->lpVtbl -> Speak(This,pwcs,dwFlags,pulStreamNumber) ) */

DS.L SETRATE /* 112 ( (This)->lpVtbl -> SetRate(This,RateAdjust) )  */
DS.L SETVOLM /* 120 ( (This)->lpVtbl -> SetVolume(This,usVolume) ) */

DS.L OBVPTR
DS.L OBVPTABL
DS.L OBGETID
DS.L OBSETID

DS.L OBRELEADSE DC.L CLSIDSpVoice 0D941651CH
DC.W CLSID1 44E6H
DC.W CLSID2 4C17H
DC.B CLSID3 0BAH,0DFH,0C3H,68H,26H,0FCH,34H,24H


DC.L IIDISpVoice 6C44DF74H
DC.W IID1 72B9H
DC.W IID2 4992H
DC.B IID3 0A1H,0ECH,0EFH,99H,6EH,04H,22H,0D4H

/*
EXTERN_C const IID IID_ISpVoice;
    MIDL_INTERFACE("6C44DF74-72B9-4992-A1EC-EF996E0422D4")
    Hello
*/


/* 言語変更するです */

DC.L CISSTOK 14056589H
DC.W CISSTOK1 0E16CH
DC.W CISSTOK2 11D2H
DC.B CISSTOK3 0BBH,90H,00,0C0H,4FH,8EH,0E6H,0C0H

/* Release */

/*
class DECLSPEC_UUID(EF411752-3736-4CB4-9C8C-8EF4CCB58EFE)
SpObjectToken;
  MIDL_INTERFACE(14056589-E16C-11D2-BB90-00C04F8EE6C0)
    ISpObjectToken : public ISpDataKey
*/
/* ------------------------------------------- */
DC.L CSPOBJTK 4424CB70H
DC.W CSPOBJTK1 2A7CH
DC.W CSPOBJTK2 43E2H
DC.B CSPOBJTK3 83H,3DH,0CBH,0FDH,82H,0DAH,10H,4FH

/*
EXTERN_C const CLSID CLSID_SpObjectToken;
#ifdef __cplusplus
class DECLSPEC_UUID("4424cb70-2a7c-43e2-833d-cbfd82da104f")
SpObjectToken;
*/
 

/A INVOKE CoInitialize,0


/*
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
CLSCTX_ALL              equ CLSCTX_INPROC_SERVER or CLSCTX_INPROC_HANDLER or CLSCTX_LOCAL_SERVER
CLSCTX_INPROC_SERVER equ 1
CLSCTX_INPROC_HANDLER equ 2
CLSCTX_LOCAL_SERVER equ 4
*/

SET CLSIDSpVoice TO *PC1
SET IIDISpVoice  TO *PC2


/A MOV EAX,[EBP+8] ;PC1
/A MOV EBX,[EBP+12] ;PC2
/A MOV ECX,EBP
/A ADD ECX,16 ; *PC3 PR2 64
/A INVOKE  CoCreateInstance,EAX,0,7,EBX,ECX
/A ;MOV EAX,1
/A MOV [EBP+20],EAX


TRSWT(10H,'SP=',0)
TRSWT(1,*PC3,4)
IF WKL = 0
THEN TRSWT(0,' Ok ',0)

SET *PC3 INDEX *PI SET *PC3 TO VPTR
SET *PI TO WKL MOVE WKL TO VPTABL

/A MOV EBX,[VPTABL]
/A ADD EBX,8 ;REEISH
/A MOV EAX,[EBX]
/A MOV RELEADSE,EAX ; Release 

/A MOV EBX,[VPTABL]
/A ADD EBX,72 ; ;hr = pVoice->
/A MOV EAX,[EBX]
/A MOV SETVOICE,EAX

/A MOV EBX,[VPTABL]
/A ADD EBX,76 ; ;hr = pVoice->
/A MOV EAX,[EBX]
/A MOV GETVOICE,EAX

/A MOV EBX,[VPTABL]
/A ADD EBX,80 ; ;hr = pVoice->
/A MOV EAX,[EBX]
/A MOV SPEEK,EAX


/A MOV EBX,[VPTABL]
/A ADD EBX,112 ; ;hr = pVoice->
/A MOV EAX,[EBX]
/A MOV SETRATE,EAX ; 112 ( (This)->lpVtbl -> SetRate(This,RateAdjust) -10 . 10)  



/A MOV EBX,[VPTABL]
/A ADD EBX,120 ; ;hr = pVoice->
/A MOV EAX,[EBX]
/A MOV SETVOLM,EAX ; 120 ( (This)->lpVtbl -> SetVolume(This,usVolume) 0~100%) 


/A MOV EBX,3
/A PUSH EBX
/A MOV EAX,[VPTR] ;*PR2
/A PUSH EAX
/A MOV EAX,SETRATE ;話すスピード設定 -10~10
/A CALL EAX ;IID_ISpVoice


/A MOV EBX,100
/A PUSH EBX
/A MOV EAX,[VPTR] ;*PR2
/A PUSH EAX
/A MOV EAX,SETVOLM ;ボリューム設定 0~100 %
/A CALL EAX ;IID_ISpVoice



ELSE TRSWT(0,' Err ',0)
TRSWT(1,WKL,4)
CLR RELEADSE
END-IF

/* 日本語に設定する */

SET CSPOBJTK TO *PC1
SET CISSTOK  TO *PC2
/A MOV EDX,[EBP+8] ;P
/A MOV EBX,[EBP+12] ;P1
/A MOV ECX,EBP
/A ADD ECX,16 ; *P2
/A INVOKE  CoCreateInstance,EDX,0,7,EBX,ECX
/A MOV [EBP+20],EAX


TRSWT(10H,'OB=',0)
TRSWT(1,*PC3,4)


IF WKL = 0
THEN
TRSWT(0,' Ok ',0)
ELSE TRSWT(0,' Err ',0)
TRSWT(1,WKL,4)
CLR OBRELEADSE
END-IF

SET *PC3 INDEX *PI SET *PC3 TO OBVPTR
SET *PI TO WKL MOVE WKL TO OBVPTABL

/A MOV EBX,[OBVPTABL]
/A ADD EBX,8 ;REEISH
/A MOV EAX,[EBX]
/A MOV OBRELEADSE,EAX ; Release 

/A MOV EBX,[OBVPTABL]
/A ADD EBX,64 ; ;hr = ( (This)->lpVtbl -> GetId(This,ppszCoMemTokenId) ) 
/A MOV EAX,[EBX]
/A MOV OBGETID,EAX

/A MOV EBX,[OBVPTABL]
/A ADD EBX,60 ; ;hr =  ( (This)->lpVtbl -> SetId(This,pszCategoryId,pszTokenId,fCreateIfNotExist) ) 
/A MOV EAX,[EBX]
/A MOV OBSETID,EAX


/* TRSWT(10H,' TCHK5=',0) TRSWT(5,CSPMMADEN,64) */

WHEN 1 /* SPEEK */

/A MOV EBX,0
/A PUSH EBX
/A PUSH EBX
/A MOV EBX,[EBP]
/A PUSH EBX
/A MOV EAX,[VPTR] ;*PR2
/A PUSH EAX
/A MOV EAX,SPEEK
/A CALL EAX ;IID_ISpVoice ;,0,0;,0,0 ;ISpVoice_Release

WHEN 2 /* CLOSE */

IF RELEADSE = 0
THEN
ELSE
/A MOV EAX,[VPTR] ;
/A PUSH EAX
/A MOV EAX,RELEADSE
/A CALL EAX ;IID_ISpVoice ;,0,0;,0,0 ;ISpVoice_Release
END-IF


IF OBRELEADSE = 0
THEN
ELSE
/A MOV EAX,[OBVPTR] ;
/A PUSH EAX
/A MOV EAX,OBRELEADSE
/A CALL EAX ;IID_ISpVoice ;,0,0;,0,0 ;ISpVoice_Release
END-IF

/A INVOKE CoUninitialize


[PR]お得情報

CMで話題のふるさと納税サイトさとふる
毎日お礼品ランキング更新中!
2019年のふるさと納税は≪12/31まで≫

その他のキャンペーン


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事