vb 音频写入avi时返回错误-2147205014 ,重谢(有红包噢)
苍山的雪 2019-09-10 09:54:09 我要疯掉了.好几天都没弄好.是哪里错了.
一直返回的都是avierr_ok,一到写入时就出现-2147205014 错误.图片压缩时没问题,如果有avi视频及音频处理经验的可以联系我Q452781589.实时聊天音频数据保存为avi(类似电话录音),重谢(有红包噢)
Public Function InitWare(savefile As String) As Boolean '保存到字节流
'SaveTofile保存到文件 fps每秒祯数 PicFile 图片样张大小
If IsSaveAVI Then
MsgBox "文件保存中,不能再次执行此操作!", vbInformation, "方舟提示"
Exit Function
End If
Dim res As Long
Dim strhdr_vides As AVI_STREAM_INFO
Dim BI As BITMAPINFOHEADER
Dim opts As AVI_COMPRESS_OPTIONS
Dim opts2 As AVI_COMPRESS_OPTIONS
Dim pOpts As Long, pOpts2 As Long
Dim Psfile As String
res = AVIFileOpen(fileHDC, savefile, OF_WRITE Or OF_CREATE, 0&) '创建或打开AVI文件
If (res <> AVIERR_OK) Then GoTo error
Dim strhdr_auds_info As AVI_STREAM_INFO
With strhdr_auds_info '音频流结构
.fccType = mmioStringToFOURCC("auds", 0&)
'.fccHandler = mmioFOURCC("g", "7", "2", "6")
.dwFlags = 0 '
.dwCaps = 0 '
.wPriority = 0 '
.wLanguage = 0 '
.dwScale = 1600 ' //
.dwRate = 8000 ' //Hz
.dwStart = 0 '
.dwInitialFrames = 0 '
.dwSuggestedBufferSize = 1600 '
.dwQuality = -1 '
.dwSampleSize = 1 '
'.rcFrame.bottom = 0 '
'.rcFrame.left = 0 '
'.rcFrame.right = 0 '
'.rcFrame.top = 0 '
.dwEditCount = 0 '
.dwFormatChangeCount = 0 '
.dwLength = 0 '
End With
res = AVIFileCreateStream(fileHDC, AuStream, strhdr_auds_info) '创建音频流
If (res <> AVIERR_OK) Then GoTo error
'设备音频流
Dim strhdr_auds As WAVEFORMATEX
With strhdr_auds '音频格式
.wFormatTag = WAVE_FORMAT_PCM
.nChannels = 1
.nSamplesPerSec = 8000
.wBitsPerSample = 8
.nBlockAlign = (.wBitsPerSample / 8) * .nChannels
.nAvgBytesPerSec = .nSamplesPerSec * .nBlockAlign
'AVIStreamSetFormat(m_paviAudioStream, m_aviAudioFrames, &wave_format, sizeof(wave_format))
End With
Dim strauds() As Byte
ReDim strauds(0 To Len(strhdr_auds) - 1)
CopyMemory strauds(0), strhdr_auds, Len(strhdr_auds)
Dim btBuf As Long
btBuf = VarPtr(strauds(0))
Dim BufLen As Long
BufLen = UBound(strauds) + 1
res = AVIStreamSetFormat(AuStream, 0, ByVal btBuf, BufLen) '设备音频格式
If (res <> AVIERR_OK) Then GoTo error
' res = AVIStreamSetFormat(AuStream, 0, ByVal strhdr_auds, Len(strhdr_auds)) '设备音频格式
'If (res <> AVIERR_OK) Then GoTo error
pOpts2 = VarPtr(opts2)
'res = AVISaveOptions(Form1.hWnd, ICMF_CHOOSE_KEYFRAME Or ICMF_CHOOSE_DATARATE, 1, AuStream, pOpts2) '音频压缩方式
res = AVISaveOptions(Form1.hwnd, _
ICMF_CHOOSE_KEYFRAME Or ICMF_CHOOSE_DATARATE, _
1, _
AuStream, _
pOpts2) 'returns TRUE if User presses OK, FALSE if Cancel, or error code
'If res <> 1 Then 'In C TRUE = 1
' Call AVISaveOptionsFree(1, pOpts2)
' GoTo error
'End If
res = AVIMakeCompressedStream(AuCompressed, AuStream, opts2, 0&) '设置音频压缩方式
If res <> AVIERR_OK Then GoTo error
'res = AVIStreamSetFormat(AuCompressed, 0, ByVal VarPtr(strauds(0)), UBound(strauds) + 1) '设备音频格式
'If (res <> AVIERR_OK) Then GoTo error
'Dim res As Long
''Dim btBuf As Long
''Dim BufLen As Long
'btBuf = VarPtr(btWare(0))
'BufLen = UBound(btWare) + 1
Dim byt(1 To 1600) As Byte
BufLen = UBound(byt)
btBuf = VarPtr(byt(1))
ChunkID = 1
res = AVIStreamWrite(AuCompressed, _
ChunkID, _
1, _
btBuf, _
BufLen, _
AVIIF_KEYFRAME, _
ByVal 0&, _
ByVal 0&)
'出错位置,大佬们麻烦看一下写不了 音频写入avi时返回错误-2147205014
Debug.Print res
If res <> AVIERR_OK Then GoTo error
ChunkID = ChunkID + 1
InitWare = True
InitWare = True
Exit Function
error:
StopSave res