Что нового

Микширование и воспроизведения Line-in

Merlin71

Новичок
Сообщения
1
Репутация
0
День добрый, помогите разобратся.
Необходимо записывать звук с Line-in и подовать на левый и правый динамик правый,левый канал или их сумму.Написал скрипт который воспроизводит звук с Line-in, но микшированием не смог разобраться.На сколько я понял копать нужно в сторону функций _Bass_Mixer_* и _Bass_Channel*. :scratch:

Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Version=beta
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include "Bass.au3"
#include "BassEnc.au3"
#include "BassExt.au3"
Global $BASS_STARTUP_BYPASS_VERSIONCHECK

OnAutoItExitRegister("_FreeBass")

HotKeySet("{ESC}", "_Exit")

_BASS_Startup()
_BASS_ENCODE_Startup()
_BASS_EXT_STARTUP()



_BASS_Init(0, -1, 44100, 0, "")

_BASS_RecordInit(-1)


$aBuffer = _BASS_EXT_MemoryBufferCreate()

$hRecord = _BASS_RecordStart(44100, 2, 0, $BASS_EXT_RecordProc)
$hStream = 0

$pBuffer = _BASS_EXT_MemoryBufferCreate()

$bMp3Data = 0
$hEncoder = _BASS_Encode_Start($hRecord, '"' & @ScriptDir & '\CenterCutCl',BitOR(0,0))
While 1

;~ 	$iSize = _BASS_EXT_MemoryBufferGetSize($aBuffer)
	If $iSize > 1024 Then
		$bMp3Data = _BASS_EXT_MemoryBufferGetData($aBuffer, $iSize)
		ConsoleWrite(TimerDiff($timer) & " - Bytes: " & BinaryLen($bMp3Data) & @CRLF)
		$timer = TimerInit()



		If BinaryLen($bMp3Data) > 0 Then
			_BASS_EXT_MemoryBufferAddData($pBuffer, $bMp3Data)
			If Not $hStream And _BASS_EXT_MemoryBufferGetSize($pBuffer) > 4096 Then
				$hStream = _BASS_StreamCreateFileUser($STREAMFILE_BUFFERPUSH, BitOR($BASS_STREAM_RESTRATE, $BASS_STREAM_BLOCK), $BASS_EXT_FILEPROCS, $pBuffer[0])
				_BASS_ChannelPlay($hStream, 1)
			EndIf
		EndIf
		$iSize = _BASS_EXT_MemoryBufferGetSize($pBuffer)
		If $hStream And $iSize >= 1024 Then _BASS_EXT_StreamPutFileBufferData($hStream, $pBuffer, $iSize)

	EndIf

	Sleep(50)
WEnd



Func _Exit()
	Exit
EndFunc   ;==>_Exit

Func _FreeBass()
	_BASS_Encode_Stop($hEncoder)
	_BASS_RecordFree()
	_BASS_Free()
EndFunc   ;==>_FreeBass#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Version=beta
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include "Bass.au3"
#include "BassEnc.au3"
#include "BassExt.au3"
Global $BASS_STARTUP_BYPASS_VERSIONCHECK

OnAutoItExitRegister("_FreeBass")

HotKeySet("{ESC}", "_Exit")

_BASS_Startup()
_BASS_ENCODE_Startup()
_BASS_EXT_STARTUP()



_BASS_Init(0, -1, 44100, 0, "")

_BASS_RecordInit(-1)


$aBuffer = _BASS_EXT_MemoryBufferCreate()

$hRecord = _BASS_RecordStart(44100, 2, 0, $BASS_EXT_RecordProc)
$hStream = 0

$pBuffer = _BASS_EXT_MemoryBufferCreate()

$bMp3Data = 0
$hEncoder = _BASS_Encode_Start($hRecord, '"' & @ScriptDir & '\lame" -r -x -b128 -h - -', 0, $BASS_EXT_EncodeProc, $aBuffer[0])
While 1

;~ 	$iSize = _BASS_EXT_MemoryBufferGetSize($aBuffer)
	If $iSize > 1024 Then
		$bMp3Data = _BASS_EXT_MemoryBufferGetData($aBuffer, $iSize)
		ConsoleWrite(TimerDiff($timer) & " - Bytes: " & BinaryLen($bMp3Data) & @CRLF)
		$timer = TimerInit()



		If BinaryLen($bMp3Data) > 0 Then
			_BASS_EXT_MemoryBufferAddData($pBuffer, $bMp3Data)
			If Not $hStream And _BASS_EXT_MemoryBufferGetSize($pBuffer) > 4096 Then
				$hStream = _BASS_StreamCreateFileUser($STREAMFILE_BUFFERPUSH, BitOR($BASS_STREAM_RESTRATE, $BASS_STREAM_BLOCK), $BASS_EXT_FILEPROCS, $pBuffer[0])
				_BASS_ChannelPlay($hStream, 1)
			EndIf
		EndIf
		$iSize = _BASS_EXT_MemoryBufferGetSize($pBuffer)
		If $hStream And $iSize >= 1024 Then _BASS_EXT_StreamPutFileBufferData($hStream, $pBuffer, $iSize)

	EndIf

	Sleep(50)
WEnd



Func _Exit()
	Exit
EndFunc   ;==>_Exit

Func _FreeBass()
	_BASS_Encode_Stop($hEncoder)
	_BASS_RecordFree()
	_BASS_Free()
EndFunc   ;==>_FreeBass
 
Верх