先用mciSendString或mciExecute执行mci command string --"open "……,然后再: dim lReturn as long dim sReturn as string * 32lReturn=mciSendstring("set " & FileName & " audio all on",sReturn,32,0) 但是默认状态下就是以双声道打开的。 如果你安装了MPEG4支持文件那么还能支持MPEG4。至于RealPlay格式的文件,小弟也还在研究。
第二个问题我与有个程序: '《如何控制左右声道(两个喇叭同时为左声道,或两个喇叭同时为右声道)》,应用在观看VCD中。 'VB源程序以下: '1.modu1.bas '2.form1.frm '3.三个过程 ' from ' [email protected],http://PowerGary.yeah.net ' 刘志勇 Shenzhen ' 2001.02.14'一、---------------modu1.bas Private Declare Function auxGetVolume Lib "winmm.dll" (ByVal uDeviceID As Long, lpdwVolume As Long) As Long Private Declare Function auxSetVolume Lib "winmm.dll" (ByVal uDeviceID As Long, ByVal dwVolume As Long) As Long Private Declare Function waveOutGetVolume Lib "winmm.dll" ( _ ByVal uDeviceID As Long, _ lpdwVolume As Long _ ) As Long Private Declare Function waveOutSetVolume Lib "winmm.dll" (ByVal uDeviceID As Long, ByVal dwVolume As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long) Type VolumeSetting LeftVol As Integer RightVol As Integer End TypePublic Const HIGHEST_VOLUME_SETTING = 12 Public Const WAVE_MAPPER = -1&'下面是获取音量的函数: Public Function lGetVolume(ByRef lLeftVol As Long, ByRef lRightVol As Long, lDeviceID As Long) As Long Dim bReturnValue As Boolean Dim Volume As VolumeSetting Dim lAPIReturnVal As Long Dim lBothVolumes As Long lAPIReturnVal = waveOutGetVolume(lDeviceID, lBothVolumes) lDataLen = Len(Volume) CopyMemory Volume.LeftVol, lBothVolumes, lDataLen lLeftVol = HIGHEST_VOLUME_SETTING * lUnsigned(Volume.LeftVol) / 65535 lRightVol = HIGHEST_VOLUME_SETTING * lUnsigned(Volume.RightVol) / 65535 lGetVolume = lAPIReturnVal End Function'下面是设置音量的函数: Public Function lSetVolume(ByRef lLeftVol As Long, ByRef lRightVol As Long, lDeviceID As Long) As Long Dim bReturnValue As Boolean Dim Volume As VolumeSetting Dim lAPIReturnVal As Long Dim lBothVolumes As Long Volume.LeftVol = nSigned(lLeftVol * 65535 / HIGHEST_VOLUME_SETTING) Volume.RightVol = nSigned(lRightVol * 65535 / HIGHEST_VOLUME_SETTING) lDataLen = Len(Volume) CopyMemory lBothVolumes, Volume.LeftVol, lDataLen lAPIReturnVal = waveOutSetVolume(lDeviceID, lBothVolumes) lSetVolume = lAPIReturnVal End Function'** -> * 转换函数 Public Function nSigned(ByVal lUnsignedInt As Long) As Integer Dim nReturnVal As Integer If lUnsignedInt > 65535 Or lUnsignedInt < 0 Then MsgBox "Error in conversion from Unsigned to nSigned Integer" nSignedInt = 0 Exit Function End If If lUnsignedInt > 32767 Then nReturnVal = lUnsignedInt - 65536 Else nReturnVal = lUnsignedInt End If nSigned = nReturnVal End Function '转换函数 Public Function lUnsigned(ByVal nSignedInt As Integer) As Long Dim lReturnVal As Long If nSignedInt < 0 Then lReturnVal = nSignedInt + 65536 Else lReturnVal = nSignedInt End IfIf lReturnVal > 65535 Or lReturnVal < 0 Then MsgBox "Error in conversion from nSigned to Unsigned Integer" lReturnVal = 0 End If lUnsigned = lReturnValEnd Function '二、---------------form1.frm Private Sub cmd_Chancel_Click() '改变声道的按钮 caption='9左声' 'Sound PROC If cmd_Chancel.Caption = "9立体" Then cmd_Chancel.Caption = "9左声" Call cmd_right_0_Click Exit Sub End If If cmd_Chancel.Caption = "9左声" Then cmd_Chancel.Caption = "9右声" Call cmd_left_0_Click Exit Sub End If If cmd_Chancel.Caption = "9右声" Then cmd_Chancel.Caption = "9立体" Call cmd_left_right_Click Exit Sub End If End Sub'三、---------------三个过程 Private Sub cmd_right_0_Click() Dim L As Long, lleft As Long, lright As Longlleft = lUnsigned(HIGHEST_VOLUME_SETTING) lright = lUnsigned(0)L = lSetVolume(lleft, lright, WAVE_MAPPER)End Sub Private Sub cmd_left_0_Click() Dim L As Long, lleft As Long, lright As Longlleft = lUnsigned(0) lright = lUnsigned(HIGHEST_VOLUME_SETTING)L = lSetVolume(lleft, lright, WAVE_MAPPER)End Sub Private Sub cmd_left_right_Click() Dim L As Long, lleft As Long, lright As Long lleft = lUnsigned(12) lright = lUnsigned(12)L = lSetVolume(lleft, lright, WAVE_MAPPER)End Sub '------------------完
email:[email protected]
OICQ:15209357
这个只是测试版
如可以其余我联系:[email protected]
dim lReturn as long
dim sReturn as string * 32lReturn=mciSendstring("set " & FileName & " audio all on",sReturn,32,0)
但是默认状态下就是以双声道打开的。
如果你安装了MPEG4支持文件那么还能支持MPEG4。至于RealPlay格式的文件,小弟也还在研究。
发给我看看:[email protected]
'《如何控制左右声道(两个喇叭同时为左声道,或两个喇叭同时为右声道)》,应用在观看VCD中。
'VB源程序以下:
'1.modu1.bas
'2.form1.frm
'3.三个过程
' from
' [email protected],http://PowerGary.yeah.net
' 刘志勇 Shenzhen
' 2001.02.14'一、---------------modu1.bas
Private Declare Function auxGetVolume Lib "winmm.dll" (ByVal uDeviceID As Long, lpdwVolume As Long) As Long
Private Declare Function auxSetVolume Lib "winmm.dll" (ByVal uDeviceID As Long, ByVal dwVolume As Long) As Long
Private Declare Function waveOutGetVolume Lib "winmm.dll" ( _
ByVal uDeviceID As Long, _
lpdwVolume As Long _
) As Long
Private Declare Function waveOutSetVolume Lib "winmm.dll" (ByVal uDeviceID As Long, ByVal dwVolume As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Type VolumeSetting
LeftVol As Integer
RightVol As Integer
End TypePublic Const HIGHEST_VOLUME_SETTING = 12
Public Const WAVE_MAPPER = -1&'下面是获取音量的函数:
Public Function lGetVolume(ByRef lLeftVol As Long, ByRef lRightVol As Long, lDeviceID As Long) As Long
Dim bReturnValue As Boolean
Dim Volume As VolumeSetting
Dim lAPIReturnVal As Long
Dim lBothVolumes As Long
lAPIReturnVal = waveOutGetVolume(lDeviceID, lBothVolumes)
lDataLen = Len(Volume)
CopyMemory Volume.LeftVol, lBothVolumes, lDataLen
lLeftVol = HIGHEST_VOLUME_SETTING * lUnsigned(Volume.LeftVol) / 65535
lRightVol = HIGHEST_VOLUME_SETTING * lUnsigned(Volume.RightVol) / 65535
lGetVolume = lAPIReturnVal
End Function'下面是设置音量的函数:
Public Function lSetVolume(ByRef lLeftVol As Long, ByRef lRightVol As Long, lDeviceID As Long) As Long
Dim bReturnValue As Boolean
Dim Volume As VolumeSetting
Dim lAPIReturnVal As Long
Dim lBothVolumes As Long
Volume.LeftVol = nSigned(lLeftVol * 65535 / HIGHEST_VOLUME_SETTING)
Volume.RightVol = nSigned(lRightVol * 65535 / HIGHEST_VOLUME_SETTING)
lDataLen = Len(Volume)
CopyMemory lBothVolumes, Volume.LeftVol, lDataLen
lAPIReturnVal = waveOutSetVolume(lDeviceID, lBothVolumes)
lSetVolume = lAPIReturnVal
End Function'** -> * 转换函数
Public Function nSigned(ByVal lUnsignedInt As Long) As Integer
Dim nReturnVal As Integer
If lUnsignedInt > 65535 Or lUnsignedInt < 0 Then
MsgBox "Error in conversion from Unsigned to nSigned Integer"
nSignedInt = 0
Exit Function
End If
If lUnsignedInt > 32767 Then
nReturnVal = lUnsignedInt - 65536
Else
nReturnVal = lUnsignedInt
End If
nSigned = nReturnVal
End Function
'转换函数
Public Function lUnsigned(ByVal nSignedInt As Integer) As Long
Dim lReturnVal As Long
If nSignedInt < 0 Then
lReturnVal = nSignedInt + 65536
Else
lReturnVal = nSignedInt
End IfIf lReturnVal > 65535 Or lReturnVal < 0 Then
MsgBox "Error in conversion from nSigned to Unsigned Integer"
lReturnVal = 0
End If
lUnsigned = lReturnValEnd Function
'二、---------------form1.frm
Private Sub cmd_Chancel_Click() '改变声道的按钮 caption='9左声'
'Sound PROC
If cmd_Chancel.Caption = "9立体" Then
cmd_Chancel.Caption = "9左声"
Call cmd_right_0_Click
Exit Sub
End If
If cmd_Chancel.Caption = "9左声" Then
cmd_Chancel.Caption = "9右声"
Call cmd_left_0_Click
Exit Sub
End If
If cmd_Chancel.Caption = "9右声" Then
cmd_Chancel.Caption = "9立体"
Call cmd_left_right_Click
Exit Sub
End If
End Sub'三、---------------三个过程
Private Sub cmd_right_0_Click()
Dim L As Long, lleft As Long, lright As Longlleft = lUnsigned(HIGHEST_VOLUME_SETTING)
lright = lUnsigned(0)L = lSetVolume(lleft, lright, WAVE_MAPPER)End Sub
Private Sub cmd_left_0_Click()
Dim L As Long, lleft As Long, lright As Longlleft = lUnsigned(0)
lright = lUnsigned(HIGHEST_VOLUME_SETTING)L = lSetVolume(lleft, lright, WAVE_MAPPER)End Sub
Private Sub cmd_left_right_Click()
Dim L As Long, lleft As Long, lright As Long
lleft = lUnsigned(12)
lright = lUnsigned(12)L = lSetVolume(lleft, lright, WAVE_MAPPER)End Sub
'------------------完