Передача звука

Язык 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
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Передача звука

Сообщение iGrok » 26.12.2008 (Пт) 19:29

Есть сложный пример на VB6. Вдруг чем поможет.. )
Вложения
VOICE.rar
(63.48 Кб) Скачиваний: 61
label:
cli
jmp label

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Передача звука

Сообщение 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

    TopList