Back to Top

プログラムの覚書

Category: Accord

VB.NET Accord 音声入力

Accord.NETを使用して音声入力をする方法を記載します。

USB接続カメラなどについている 音声入力デバイスの音声を、入力信号として取得します。

  • Accord.Video
  • Accord.DirectSound
  • Accord.Audio.Formats

をインポートします。

 

音声入力データを取得する

以下のコードは、音声入力を取得して、MemoryStreamにデータを蓄えます。その音声データを SoundPlayerで再生します。

・フォーム上には、[録音開始][録音停止][再生]のボタンを配置します。

Private player As System.Media.SoundPlayer = Nothing

Dim _Stream As MemoryStream
Dim _Encoder As WaveEncoder

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    '音声入力デバイスを取得して、ComboBoxに設定
    Dim audioDevices = New AudioDeviceCollection(AudioDeviceCategory.Capture)

    ComboBox1.Items.Clear()
    If AudioDevices.Count <> 0 Then
        For Each device As AudioDeviceInfo In audioDevices
            ComboBox1.Items.Add(device)
        Next
        ComboBox1.SelectedIndex = 0
    End If
End Sub


Dim _AudioSource As IAudioSource

'音声入力開始
Private Sub StartButton_Click(sender As Object, e As EventArgs) Handles StartButton.Click
    If ComboBox1.Items.Count = 0 Then
        Return
    End If

    Dim info As AudioDeviceInfo = ComboBox1.SelectedItem()
 
    _Stream = New MemoryStream()             '音声データ出力用ストリーム作成
    _Encoder = New WaveEncoder(_Stream)

    '音声入力デバイスを作成して、22050Hzに設定
    _AudioSource = New AudioCaptureDevice(info)
    _AudioSource.DesiredFrameSize = 2048
    _AudioSource.SampleRate = 22050

    AddHandler _AudioSource.NewFrame, AddressOf Me.Audio_NewFrame
    AddHandler _AudioSource.AudioSourceError, AddressOf Me.Audio_SourceError

    _AudioSource.Start()                     '音声入力開始
End Sub

'音声入力停止
Private Sub StopButton_Click(sender As Object, e As EventArgs) Handles StopButton.Click
    If _AudioSource Is Nothing Then
        Return
    End If

    If _AudioSource.IsRunning Then
        _AudioSource.SignalToStop()     'Audioデバイスの停止
        _AudioSource.WaitForStop()      '完全に停止するまで待つ
        _AudioSource = Nothing
    End If
End Sub

'入力デバイスのデータを取得する
Private Sub Audio_NewFrame(sender As Object, eventArgs As Accord.Audio.NewFrameEventArgs)
    _Encoder.Encode(eventArgs.Signal)                'エンコーダーに音声信号を追加する
End Sub

'このコールバックは、オーディオに何らかのエラーがあるときに呼び出されます。
Private Sub Audio_SourceError(sender As Object, e As AudioSourceErrorEventArgs)
    Throw New Exception(e.Description)
End Sub


Private player As System.Media.SoundPlayer = Nothing
'入力された音声を再生する
Private Sub PlayerButton_Click(sender As Object, e As EventArgs) Handles Button1.Click
    _Stream.Seek(0, SeekOrigin.Begin)             'ストリームのオフセットを開始位置に設定する

    '読み込む
    Using player = New System.Media.SoundPlayer(_Stream)
        player.Play()                             '非同期再生する
    End Using
End Sub

 

Posted in Accord | Leave a reply

VB.NET Accord 画像の回転・反転・拡大縮小

Accordを使用して、画像を回転・反転・拡大縮する方法を記載します。

Accord.Imaging.Filters をインポートします。

 

画像を回転する

Dim FilePath As String = "C:\work\Resources\lena_color.jpg"
Dim img As System.Drawing.Image = System.Drawing.Image.FromFile(FilePath)

'画像を45度回転させる
Dim rotateFilter As RotateBilinear = New RotateBilinear(45.0, True)
Dim rotateImage As Bitmap = rotateFilter.Apply(img)
PictureBox1.Image = rotateImage

 

画像を反転する

Dim FilePath As String = "C:\work\Resources\lena_color.jpg"
Dim img As System.Drawing.Image = System.Drawing.Image.FromFile(FilePath)

'画像をY軸で反転させる
Dim mirrorFilter As Mirror = New Mirror(False, True)
Dim mirrorImage As Bitmap = mirrorFilter.Apply(img)
PictureBox1.Image = mirrorImage

 

画像の拡大縮小(サイズ変更)する

Dim FilePath As String = "C:\work\Resources\lena_color.jpg"
Dim img As System.Drawing.Image = System.Drawing.Image.FromFile(FilePath)

'画像のサイズを変更する
Dim rsizeFilter As ResizeBilinear = New ResizeBilinear(300, 400)
Dim rsizeImage As Bitmap = rsizeFilter.Apply(img)
PictureBox1.Image = rsizeImage

 

 

※AccordのFiltersは、AForgeのFiltersと同じなので、詳しくはAForgeを見て下さい。

 

Posted in Accord | Leave a reply