Язык Visual Basic на платформе .NET.
Модераторы: Ramzes, Sebas
-
GPP
-
- Постоялец
-
-
- Сообщения: 351
- Зарегистрирован: 02.11.2005 (Ср) 8:02
- Откуда: г.Невельск о.Сахалин
-
GPP » 26.12.2008 (Пт) 11:26
Возникла необходимость передачи звука по сети... Как правельнее можно реализовать? А точнее как записывать звук в формате wav или mp3 в байтовый массив для последующей передаче по сети. Вот пример бибиотеки которую я нашел в сети(немного ее переделал, может кому пригодится). При помощи нее записывается звук с внешнего микрофона компьютера в wav файл? Все вроде хорошо... Записываю звук, сохраняю в файл и отправляю... Но как можно сделать без промежуточного файла? Не могу сообразить... Спасибо!
- Код: Выделить всё
Imports System.ComponentModel
Public Class SoundRecorder
Inherits Component
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer
Dim lSamples, lRet, lBits, lChannels As Integer
Dim iBlockAlign As Short
Dim lBytesPerSec As Integer
Private _SoundFormat As SoundFormats
Private FName As String = "temp.wav"
Public Enum SoundFormats
Mono_6kbps_8_Bit
Mono_8kbps_8_Bit
Mono_11kbps_8_Bit
Mono_16kbps_8_Bit
Mono_22kbps_8_Bit
Mono_32kbps_8_Bit
Mono_44kbps_8_Bit
Mono_48kbps_8_Bit
Stereo_24kbps_16_Bit
Stereo_32kbps_16_Bit
Stereo_44kbps_16_Bit
Stereo_64kbps_16_Bit
Stereo_88kbps_16_Bit
Stereo_1288kbps_16_Bit
Stereo_176kbps_16_Bit
Stereo_192kbps_16_Bit
End Enum
Public Property SoundFormat() As SoundFormats
Get
SoundFormat = _SoundFormat
End Get
Set(ByVal Value As SoundFormats)
_SoundFormat = Value
End Set
End Property
Public Property FileName() As String
Get
FileName = FName
End Get
Set(ByVal Value As String)
FName = Value
End Set
End Property
Private Sub GetSoundFormat()
If _SoundFormat = SoundFormats.Mono_6kbps_8_Bit Then
lSamples = 6000 : lBits = 8 : lChannels = 1
ElseIf _SoundFormat = SoundFormats.Mono_8kbps_8_Bit Then
lSamples = 8000 : lBits = 8 : lChannels = 1
ElseIf _SoundFormat = SoundFormats.Mono_11kbps_8_Bit Then
lSamples = 11025 : lBits = 8 : lChannels = 1
ElseIf _SoundFormat = SoundFormats.Mono_16kbps_8_Bit Then
lSamples = 16000 : lBits = 8 : lChannels = 1
ElseIf _SoundFormat = SoundFormats.Mono_22kbps_8_Bit Then
lSamples = 22050 : lBits = 8 : lChannels = 1
ElseIf _SoundFormat = SoundFormats.Mono_32kbps_8_Bit Then
lSamples = 32000 : lBits = 8 : lChannels = 1
ElseIf _SoundFormat = SoundFormats.Mono_44kbps_8_Bit Then
lSamples = 44100 : lBits = 8 : lChannels = 1
ElseIf _SoundFormat = SoundFormats.Mono_48kbps_8_Bit Then
lSamples = 48000 : lBits = 8 : lChannels = 1
ElseIf _SoundFormat = SoundFormats.Stereo_24kbps_16_Bit Then
lSamples = 6000 : lBits = 16 : lChannels = 2
ElseIf _SoundFormat = SoundFormats.Stereo_32kbps_16_Bit Then
lSamples = 8000 : lBits = 16 : lChannels = 2
ElseIf _SoundFormat = SoundFormats.Stereo_44kbps_16_Bit Then
lSamples = 11025 : lBits = 16 : lChannels = 2
ElseIf _SoundFormat = SoundFormats.Stereo_64kbps_16_Bit Then
lSamples = 16000 : lBits = 16 : lChannels = 2
ElseIf _SoundFormat = SoundFormats.Stereo_88kbps_16_Bit Then
lSamples = 22050 : lBits = 16 : lChannels = 2
ElseIf _SoundFormat = SoundFormats.Stereo_1288kbps_16_Bit Then
lSamples = 32000 : lBits = 16 : lChannels = 2
ElseIf _SoundFormat = SoundFormats.Stereo_176kbps_16_Bit Then
lSamples = 44100 : lBits = 16 : lChannels = 2
ElseIf _SoundFormat = SoundFormats.Stereo_192kbps_16_Bit Then
lSamples = 48000 : lBits = 16 : lChannels = 2
End If
iBlockAlign = lChannels * lBits / 8
lBytesPerSec = lSamples * iBlockAlign
End Sub
Public Function StartRecord() As Boolean
If FName.Length <> 0 Then
Call GetSoundFormat()
Dim i As Integer
i = mciSendString("open new type waveaudio alias capture", vbNullString, 0, 0)
i = mciSendString("set capture samplespersec " & lSamples & " channels " & lChannels & " bitspersample " & lBits & " alignment " & iBlockAlign & " bytespersec " & lBytesPerSec, vbNullString, 0, 0)
i = mciSendString("record capture", vbNullString, 0, 0)
Return True
Else
MsgBox("Вы не указали имя файла для сохранения!", MsgBoxStyle.Critical, "Внимание!")
Return False
End If
End Function
Public Function StopRecord() As Boolean
Try
Dim i As Integer
i = mciSendString("save capture " & FName, vbNullString, 0, 0)
i = mciSendString("close capture", vbNullString, 0, 0)
Return True
Catch
Return False
End Try
End Function
Public Sub CloseRecord()
Dim i As Integer
i = mciSendString("close capture", vbNullString, 0, 0)
End Sub
End Class
GPP(c) Gorlo Pavel Programming
-
iGrok
-
- Артефакт VBStreets
-
-
- Сообщения: 4272
- Зарегистрирован: 10.05.2007 (Чт) 16:11
- Откуда: Сетевое сознание
iGrok » 26.12.2008 (Пт) 19:29
Есть сложный пример на VB6. Вдруг чем поможет.. )
- Вложения
-
- VOICE.rar
- (63.48 Кб) Скачиваний: 61
label:
cli
jmp label
-
Nord777
-
- Гуру
-
-
- Сообщения: 1144
- Зарегистрирован: 22.02.2004 (Вс) 13:15
- Откуда: Подольск
Nord777 » 26.12.2008 (Пт) 23:50
Поиск в MSDN по "Recording Waveform Audio"
- Код: Выделить всё
Function Description
waveInAddBuffer Sends a buffer to the device driver so it can be filled with recorded waveform-audio data.
waveInReset Stops waveform-audio recording and marks all pending buffers as done.
waveInStart Starts waveform-audio recording.
waveInStop Stops waveform-audio recording.
Запись ведется в память.
Обьявления найдешь на
http://pinvoke.net
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5
Вернуться в Visual Basic .NET
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 73