Программирование звуковых сигналов

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

feliks
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 03.05.2009 (Вс) 20:02

Программирование звуковых сигналов

Сообщение feliks » 26.07.2009 (Вс) 15:37

Хочу спросить совета чем (какие-нибудь библиотеки наверное и т.п.) мне можно проще всего сделать генератор звуковых сигналов произвольной формы? Функции нужны простейшие - по формулам или по точками (мышью) нужно строить график формы звука, менять частоту сигнала от нескольких герц до ~ 20 кГц, амплитуду сигнала и воспроизодить его. Простого готового решения найти так и не смог, есть только генераторы со стандартными формами сигналов - прямоугольной, пилообразной и т.д.
Вообще я начинающий, поэтому нужно что-то попроще и желательно с пояснениями на русском.

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Программирование звуковых сигналов

Сообщение Admiralisimys » 04.08.2009 (Вт) 12:52

feliks произвольную форму нужно представить аналитической формулой, или хотя бы системой, а в крайнем случаи массивом точек с координатами кривой. При таких данных вполне хватит стандартных возможностей VB.NET - System.Drawing и System.Math
К примеру - программа по построению простой синусоиды с возможностью задавать количество периодов (частоту) и амплитуду.
Код: Выделить всё
Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Math

Class Sinus
    Inherits Form
    Dim NumericUpDown1, NumericUpDown2 As New NumericUpDown
    Shared Sub Main()
        Application.Run(New Sinus)
    End Sub
    Sub New()
        ForeColor = SystemColors.WindowText
        ResizeRedraw = True

        NumericUpDown1.Parent = Me
        NumericUpDown1.Size = New Size(75, 20)
        NumericUpDown1.Location = New Point(10, 10)
        NumericUpDown1.Value = 2
        NumericUpDown1.Increment = 0.25
        NumericUpDown1.DecimalPlaces = 2
        AddHandler NumericUpDown1.ValueChanged, AddressOf NumericUpDown_ValueChanged

        NumericUpDown2.Parent = Me
        NumericUpDown2.Size = New Size(75, 20)
        NumericUpDown2.Location = New Point(10, 40)
        NumericUpDown2.Value = 1
        NumericUpDown2.Increment = 0.25
        NumericUpDown2.DecimalPlaces = 2
        AddHandler NumericUpDown2.ValueChanged, AddressOf NumericUpDown_ValueChanged
    End Sub
    Private Sub NumericUpDown_ValueChanged(ByVal obj As Object, ByVal ne As EventArgs)
        Invalidate()
    End Sub
    Protected Overrides Sub OnPaint(ByVal pea As PaintEventArgs)
        Dim aptf(ClientSize.Width - 1) As PointF
        For i As Integer = 0 To ClientSize.Width - 1
            aptf(i).X = i
            aptf(i).Y = NumericUpDown2.Value * CSng(((ClientSize.Height - 1) / 2) * _
            (1 - Math.Sin(i * NumericUpDown1.Value * Math.PI / (ClientSize.Width - 1))))
        Next i
        Dim grfx As Graphics = pea.Graphics
        grfx.DrawLines(New Pen(ForeColor), aptf)
    End Sub
End Class

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Программирование звуковых сигналов

Сообщение Debugger » 04.08.2009 (Вт) 13:24

Это понятно и так.
Самое сложное - воспроизводить его. Точнее, я даже не представляю, что из этого получится.

feliks
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 03.05.2009 (Вс) 20:02

Re: Программирование звуковых сигналов

Сообщение feliks » 06.08.2009 (Чт) 19:30

Не смог найти как можно сделать чтобы на рисуемой линии сигнала (на изломах и концах) всегда были бы такие кружки с помощью которых перетаскивая их мышью можно было бы указывать новые положения этих точек и соответственно форму сигнала.

feliks
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 03.05.2009 (Вс) 20:02

Re: Программирование звуковых сигналов

Сообщение feliks » 14.08.2009 (Пт) 18:56

Не могу доделать программу, нужна помощь.
Я изучил формат wav, но не ясно как, в каком виде записывать данные в файл поэтому файлы не проигрываются. Когда записываю, то у меня получается примерно такая строка заголовков (условно):
"RIFF2WAVEfmt 21280008128000data21000"
т.е. все символы читаются, тогда как в работающих файлах много нечитаемых знаков, хотя есть и читаемые, например это выглядит так:
"RIFFтZ WAVEfmt    D¬ €X   dataОZ"
Понятно, что там данные содержатся в какой-то иной кодировке, но что это за кодировка и как в нее перекодировать я не знаю, нигде в VB не нашел об этом :(

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Программирование звуковых сигналов

Сообщение Williams » 14.08.2009 (Пт) 19:33

слей с чужого файла заголовок в ресурсы и приписывай к своим файлам.
И вы думаете, что вас оставят в живых после прочтения этого поста?

feliks
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 03.05.2009 (Вс) 20:02

Re: Программирование звуковых сигналов

Сообщение feliks » 14.08.2009 (Пт) 19:42

Так там же всегда все будет разное - количество каналов, частота дискретизации и т.д.
Мне нужно именно генерировать полностью свои данные в заголовках, зная что там будет.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 68

    TopList