On-line: Andrey, гостей 0. Всего: 1 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 3462
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.06.14 16:09. Заголовок: Аналог функции TONE() для МиниГуи ?


Возвращаюсь опять к функции TONE() !
Не компилируется исходник, выдает ошибку:
Error E2376 playtone.prg 132: If statement missing ( in function HB_FUN_TONE
*** 1 errors in Compile ***
Строка 132 - if ISNUM( 1 )

gfilatov2002 пишет:

 цитата:

А так при использовании xHarbour можно вывести звук с помощью TONE() на динамики:

FUNCTION HappyBirthday

VALTONE("G2 ",1/4)
VALTONE("G2 ",1/8)
VALTONE("A2 ",1/4)
VALTONE("P ",1/8)
VALTONE("G2 ",1/4)
VALTONE("P ",1/8)
VALTONE("C2 ",1/4)
VALTONE("P ",1/8)
VALTONE("H2 ",1/4)
VALTONE("P ",1/8)
VALTONE("P ",1/8)
VALTONE("P ",1/8)
VALTONE("P ",1/8)
VALTONE("G2 ",1/4)
VALTONE("G2 ",1/8)
VALTONE("A2 ",1/4)
VALTONE("P ",1/8)
VALTONE("G2 ",1/4)
VALTONE("P ",1/8)
VALTONE("D2 ",1/4)
VALTONE("P ",1/8)
VALTONE("C2 ",1/4)
VALTONE("P ",1/8)
VALTONE("P ",1/8)
VALTONE("P ",1/8)
VALTONE("P ",1/8)
VALTONE("G2 ",1/4)
VALTONE("G2 ",1/8)
VALTONE("G2 ",1/4)
VALTONE("P ",1/8)
VALTONE("E2 ",1/4)
VALTONE("P ",1/8)
VALTONE("C2 ",1/4)
VALTONE("C2 ",1/8)
VALTONE("H2 ",1/4)
VALTONE("P ",1/8)
VALTONE("A2 ",1/4)
VALTONE("P ",1/8)
VALTONE("F2 ",1/4)
VALTONE("F2 ",1/8)
VALTONE("E2 ",1/4)
VALTONE("P ",1/8)
VALTONE("C2 ",1/4)
VALTONE("P ",1/8)
VALTONE("D2 ",1/4)
VALTONE("P ",1/8)
VALTONE("C2 ",1/4)
VALTONE("P ",1/2)

RETURN Nil

FUNCTION VALTONE( val_note, val_time )
val_time:=val_time*18

DO CASE
CASE val_note=="C1 "
TONE(262,val_time)
CASE val_note=="C1#"
TONE(277,val_time)
CASE val_note=="D1 "
TONE(294,val_time)
CASE val_note=="D1#"
TONE(311,val_time)
CASE val_note=="E1 "
TONE(330,val_time)
CASE val_note=="F1 "
TONE(349,val_time)
CASE val_note=="F1#"
TONE(370,val_time)
CASE val_note=="G1 "
TONE(392,val_time)
CASE val_note=="G1#"
TONE(415,val_time)
CASE val_note=="A1 "
TONE(440,val_time)
CASE val_note=="A1#"
TONE(466,val_time)
CASE val_note=="H1 "
TONE(494,val_time)
CASE val_note=="C2 "
TONE(523,val_time)
CASE val_note=="C2#"
TONE(554,val_time)
CASE val_note=="D2 "
TONE(587,val_time)
CASE val_note=="D2#"
TONE(622,val_time)
CASE val_note=="E2 "
TONE(659,val_time)
CASE val_note=="F2 "
TONE(698,val_time)
CASE val_note=="F2#"
TONE(740,val_time)
CASE val_note=="G2 "
TONE(784,val_time)
CASE val_note=="G2#"
TONE(831,val_time)
CASE val_note=="A2 "
TONE(880,val_time)
CASE val_note=="A2#"
TONE(932,val_time)
CASE val_note=="H2 "
TONE(988,val_time)
CASE val_note=="C3 "
TONE(1047,val_time)
CASE val_note=="C3#"
TONE(1109,val_time)
CASE val_note=="D3 "
TONE(1175,val_time)
CASE val_note=="D3#"
TONE(1244,val_time)
CASE val_note=="E3 "
TONE(1318,val_time)
CASE val_note=="F3 "
TONE(1397,val_time)
CASE val_note=="F3#"
TONE(1480,val_time)
CASE val_note=="G3 "
TONE(1568,val_time)
CASE val_note=="G3#"
TONE(1661,val_time)
CASE val_note=="A3 "
TONE(1760,val_time)
CASE val_note=="A3#"
TONE(1865,val_time)
CASE val_note=="H3 "
TONE(1976,val_time)
CASE val_note=="C4 "
TONE(2094,val_time)
CASE val_note=="C4#"
TONE(2218,val_time)
CASE val_note=="D4 "
TONE(2350,val_time)
CASE val_note=="D4#"
TONE(2489,val_time)
CASE val_note=="E4 "
TONE(2637,val_time)
CASE val_note=="F4 "
TONE(2794,val_time)
CASE val_note=="F4#"
TONE(2960,val_time)
CASE val_note=="G4 "
TONE(3136,val_time)
CASE val_note=="G4#"
TONE(3322,val_time)
CASE val_note=="A4 "
TONE(3520,val_time)
CASE val_note=="A4#"
TONE(3730,val_time)
CASE val_note=="H4 "
TONE(3951,val_time)
CASE val_note=="C4 "
TONE(4187,val_time)
CASE val_note=="P "
INKEY(val_time/18)
ENDCASE
INKEY(.1)
RETURN Nil

#pragma BEGINDUMP

/*
TONE() for Windows to replace the ugly-heard GT Tone :-)
Mono approach. Duration has been roughly estimated to be Cli**per-like,
please refer to tests/sound.prg.
Using Windows MMsystem, sound card is a must in order to make
this function work.

Syntax: TONE( nFreq, nDuration, [ lSmooth ], [ nVol ] ) -> NIL

nFreq = INTEGER, Tone frequency
nDuration = NUMERIC, Duration Time, as in Cl**per
lSmooth = LOGICAL, pass .F. to disable sound smoothing, default is .T.
nVol = INTEGER, Sound Intensity/Volume, value 0 - 127, Default 127 ( Max )

Andi Jahja <harbour@cbn.net.id>
*/

#include "hbapi.h"
#include <windows.h>
#include <mmsystem.h>
#include <math.h>

#define SAMPLING_RATE 44100
void HB_EXPORT hb_winTone( UINT, double, BOOL, UINT );

HB_FUNC( TONE )
{
if ISNUM( 1 )
{
hb_winTone( hb_parni( 1 ),
( ISNUM( 2 ) ? hb_parnd( 2 ) : 1.0 ) * 2100,
ISLOG( 3) ? hb_parl( 3 ) : TRUE,
ISNUM( 4 ) ? hb_parni( 4 ) : 127 );
}
}

/* Keep it here for access from C programs */
void HB_EXPORT hb_winTone( UINT uFrequency, double dwDuration, BOOL bSmoothing, UINT uVolume )
{
WAVEFORMATEX wfx;
HWAVEOUT hWaveOut = NULL;

wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = 1;
wfx.nSamplesPerSec = SAMPLING_RATE;
wfx.nAvgBytesPerSec = SAMPLING_RATE;
wfx.nBlockAlign = 1;
wfx.wBitsPerSample = 8;
wfx.cbSize = 0;

/*
WAVE_MAPPER is the most commonly used device
CallBack is unnecessary since we only play simple tone
*/
if( waveOutOpen( &hWaveOut, WAVE_MAPPER, &wfx, NULL, NULL, CALLBACK_NULL ) == MMSYSERR_NOERROR )
{
char amp = uVolume;
int i;
unsigned char* buffer = (unsigned char*) hb_xgrab( (ULONG) dwDuration );
double dKoef = uFrequency * 2 * 3.1416 / SAMPLING_RATE;
WAVEHDR wh;

if ( buffer )
{
wh.lpData = (LPSTR) buffer;
wh.dwBufferLength = (DWORD) dwDuration;
wh.dwFlags = WHDR_BEGINLOOP;
wh.dwLoops = 1;

if( waveOutPrepareHeader( hWaveOut, &wh, sizeof( wh ) ) == MMSYSERR_NOERROR )
{
wh.dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP | WHDR_PREPARED;
wh.dwLoops = 1;

if ( bSmoothing )
{
/*
Manipulating data to smooth sound from clicks at the start
and end (particularly noted when we call TONE() many times
in a row). This is a simulation of increasing volume gradually
before it reaches the peak, and decreasing volume gradually
before it reaches the end.
*/
for( i = 0; i < dwDuration; i++ )
{
if ( i < amp )
{
buffer[ i ] = (unsigned char) ( cos( i * dKoef ) * i + 127 );
}
else if ( dwDuration - i <= amp - 1 )
{
amp = max( 0, --amp );
buffer[ i ] = (unsigned char) ( cos( i * dKoef ) * amp + 127 );
}
else
{
buffer[ i ] = (unsigned char) ( cos( i * dKoef ) * amp + 127 );
}
}
}
else
{
/*
Raw sound, may cause annoying clicks when some tones are played
in a row.
*/
for( i = 0; i < (int) dwDuration; i++ )
{
buffer[ i ] = (unsigned char) ( cos( i * dKoef ) * amp + 127 );
}
}

/*
Play the sound here
*/
if ( waveOutWrite( hWaveOut, &wh, sizeof(WAVEHDR) ) == MMSYSERR_NOERROR )
{
/*
Wait until the sound is finished
*/
while (!(wh.dwFlags & WHDR_DONE))
{
Sleep( 1 );
}

waveOutUnprepareHeader(hWaveOut, &wh, sizeof(WAVEHDR));
}
}

hb_xfree( buffer );
}
}
}

#pragma ENDDUMP





Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 4 [только новые]


moderator




Пост N: 602
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.06.14 16:43. Заголовок: Andrey пишет: Не ко..


Andrey пишет:

 цитата:
Не компилируется исходник, выдает ошибку


Надо добавить такое переназначение для компилятора Harbour

 цитата:
...
#ifndef __XHARBOUR__
#define ISLOG( n ) HB_ISLOG( n )
#define ISNUM( n ) HB_ISNUM( n )
#endif

#define SAMPLING_RATE 44100
...


Кстати, рабочий пример можно посмотреть в папке samples\Advanced\TONE

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3463
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.06.14 17:30. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Кстати, рабочий пример можно посмотреть в папке samples\Advanced\TONE


Не подумал об этом. Спасибо БОЛЬШОЕ !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4871
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.06.15 22:02. Заголовок: А если не стоят дров..


А если не стоят дрова от звуковой или ее просто нет , то новый TONE не свалит прогу ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4872
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.06.15 10:13. Заголовок: По ходу падает новый..


По ходу падает новый TONE (который в Минигуи) если второй параметр 0 , в Clipper работало норм да и в Harbour + XP
Unrecoverable error 9023: hb_xgrab requested to allocate zero bytes

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 136
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет