Функция Qb_PLAY - проигрыватель-интерпретатор музыки из символьных строк.
- Войдите на сайт для отправки комментариев
Сб, 17/11/2012 - 11:10
В сети я вижу дефицит мелодий для пьезопищалки платы Arduino.
По этому случаю я написал функцию Qb_PLAY - проигрыватель-интерпретатор музыки
из символьных строк стандарта АВС, аналогично оператору QBASIC PLAY.
http://www.cyberforum.ru/beta-testing/thread699658.html
Ниже архив с 173 мелодиями в файлах *.bas :
http://www.cyberforum.ru/cpp-beginners/thread694596.html#post3682700
Вопрос а имитацию выстрела реально так осуществить?
Вот опыты со звуковыми эфектами на VB или VBA ,
на С++ можно сделать аналогичные, правда выстрел и белый шум не получаются:
Option Explicit
Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Sub Main()
Dim tempLong&
Dim i%, j%, Niz%, Verh%, Dlit&, Osnova%, Shag%
Dim Razmah%, DlitZvukPauza%, ChisloZvukov%, Freq& ' , DlitFraza%
' Речь ведроида
For i = 1 To 5
Osnova = Rnd()
Osnova = 100 + Osnova * Osnova * 6000
DlitZvukPauza = 50 + Rnd() * 100 ' ms
ChisloZvukov = 3 + Rnd() * 10
For j = 1 To ChisloZvukov
Freq = Osnova * (1 + Rnd() * 0.1)
Dlit = DlitZvukPauza * (0.5 + Rnd() * 0.5)
Beep Freq, Dlit
Dlit = DlitZvukPauza - Dlit
Sleep Dlit
Next
Next
' Dim tempLong&
' Dim i%, j%, Niz%, Verh%, Dlit%, Osnova%, Shag%, Fraza%
' Мотор 2
' Dlit = 20
' Osnova = 200
' For i = 1 To 5
' For j = -10 To 10
' Beep Osnova + j, Dlit
' Beep Osnova, Dlit
' Next
' For j = 10 To -10 Step -1
' Beep Osnova + j, Dlit
' Beep Osnova, Dlit
' Next
' Next
' Игровой звук
' Dlit = 20
' Verh = 600
' Niz = 100
' For i = 1 To 50
' Osnova = Rnd() * (Verh - Niz) + Niz
' Beep Osnova, Dlit
' Next
' Мотор 3
' Dlit = 10
' Osnova = 200
' For i = 1 To 5
' For j = 0 To 100 Step 5
' Beep Osnova + j, Dlit
' Next
' Next
' Dlit = 5
' Osnova = 1000
' For i = 1 To 5
' For j = 0 To 100 Step 5
' Beep Osnova + j, Dlit
' Next
' Next
' Цикада
' Dlit = 5
' Niz = 1000
' Verh = 2000
' For i = 1 To 5
' For j = 0 To 100 Step 5
' Beep Niz + j, Dlit
' Beep Verh + j, Dlit
' Next
' Next
' Мотор 4
' Dlit = 5
' Niz = 100
' Verh = 400
' For i = 1 To 10
' For j = 0 To 100 Step 5
' Beep Niz + j, Dlit
' Beep Verh + j, Dlit
' Next
' Next
' Мотор 5
' Dlit = 5
' Niz = 100
' Osnova = 400
' Verh = 1000
' For i = 1 To 100
' Beep Niz + j, Dlit
' Beep Verh + j, Dlit
' Beep Osnova + j, Dlit
' Next
' Булькание
' Dlit = 5
' Niz = 100
' Verh = 1000
' Shag = 100
' For i = 1 To 100
' For j = Niz To Verh Step Shag
' Beep j, Dlit
' Next
' Next
'Сирена
' Dlit = 10
' Niz = 1000
' Verh = 3000
' Shag = 100
' For i = 1 To 20
' For j = Niz To Verh Step Shag
' Beep j, Dlit
' Next
' For j = Verh To Niz Step -Shag
' Beep j, Dlit
' Next
' Next
' Звуковой счетчик
' Dlit = 200
' For i = 0 To 100
' Osnova = 3000 - i * 28
' Beep Osnova, Dlit
' Sleep Dlit
' Next
End Sub
Вот два примера на С++ для Ардуино:
int i, j, Dlit, Freq;
int Niz, Verh, Osnova, Shag; // переменные для работы со звуком
int Razmah, DlitZvukPauza, ChisloZvukov;
// Речь ведроида
for (i=1;i<11; i++)
{
Osnova = 100 + random(3000);
DlitZvukPauza = 20;
ChisloZvukov = 3 + random(10);
for (j = 1; j<=ChisloZvukov; j++)
{
Freq = Osnova + random(Osnova*0.3);
Dlit = DlitZvukPauza * 0.5 +random(DlitZvukPauza*0.5);
tone(SoundPin,Freq, Dlit);
delay(Dlit);
Dlit = DlitZvukPauza - Dlit;
delay(Dlit);
}
}
//Сирена
Dlit = 17;
Niz = 500;
Verh = 2000;
Shag = 70;
for (i=1;i<11; i++)
{
for (j = Niz;j<= Verh;j+=Shag)
{
tone(SoundPin,j, Dlit);
delay(Dlit);
}
for (j = Verh;j>= Niz;j-=Shag)
{
tone(SoundPin,j, Dlit);
delay(Dlit);
}
}