Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2013, 19:06   #11
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...а этот:
Код:
// H-page: http://raxp.radioliga.com

program nfilemusik;

uses
  Windows, classes, mmsystem, commdlg;

var fDAT: tmemorystream;
    buf: byte; // размер wav внутри dat
    freq,i,FTimer: integer;
    t: string;

    // параметры для midi
    _Out: HMIDIOUT;
    msg : DWORD;       // вывод управления
    nota: dword;       // нота
    vol : dword = 127; // громкость
    chan: dword = 0;   // канал
    n   : dword;       // номер инструмента
    Instruments: array [0..127] of String=('AcousticGrandPiano', 'BrightAcousticPiano', 'ElectricGrandPiano', 'HonkyTonkPiano', 'ElectricPiano1', 'ElectricPiano2', 'Harpsichord', 'Clavinet', 'Celesta', 'Glockenspiel', 'MusicBox', 'Vibraphone', 'Marimba', 'Xylophone', 'TubularBells', 'Dulcimer', 'DrawbarOrgan', 'PercussiveOrgan', 'RockOrgan', 'ChurchOrgan', 'ReedOrgan', 'Accordion', 'Harmonica', 'TangoAccordion', 'AcousticNylonGuitar', ' AcousticSteelGuitar', 'JazzElectricGuitar', 'CleanElectricGuitar', 'MutedElectricGuitar', 'OverdrivenGuitar', 'DistortionGuitar', 'GuitarHarmonics', 'AcousticBass', 'FingeredElectricBass', 'PickedElectricBass', 'FretlessBass', 'SlapBass1', 'SlapBass2', 'SynthBass1', 'SynthBass2', 'Violin', 'Viola', 'Cello', 'Contrabass', 'TremoloStrings', 'PizzicatoStrings', 'OrchestralHarp', 'Timpani', 'StringEnsemble1', 'StringEnsemble2', 'SynthStrings1', 'SynthStrings2', 'ChoirAahs', 'VoiceOohs', 'SynthVoice', 'OrchestraHit', 'Trumpet', 'Trombone', 'Tuba', 'MutedTrumpet', 'FrenchHorn', 'BrassSection', 'SynthBrass1', 'SynthBrass2', 'SopranoSax', 'AltoSax', 'TenorSax', 'BaritoneSax', 'Oboe', 'EnglishHorn', 'Bassoon', 'Clarinet', 'Piccolo', 'Flute', 'Recorder', 'PanFlute', 'BlownBottle', 'Shakuhachi', 'Whistle', 'Ocarina', 'SquareLead', 'SawtoothLead', 'CalliopeLead', 'ChiffLead', 'CharangLead', 'VoiceLead', 'FifthsLead', 'BassandLead', 'NewAgePad', 'WarmPad', 'PolySynthPad', 'ChoirPad', 'BowedPad', 'MetallicPad', 'HaloPad', 'SweepPad', 'SynthFXRain', 'SynthFXSoundtrack', 'SynthFXCrystal', 'SynthFXAtmosphere', 'SynthFXBrightness', 'SynthFXGoblins', 'SynthFXEchoes', 'SynthFXSciFi', 'Sitar', 'Banjo', 'Shamisen', 'Koto', 'Kalimba', 'Bagpipe', 'Fiddle', 'Shanai', 'TinkleBell', 'Agogo', 'SteelDrums', 'Woodblock', 'TaikoDrum', 'MelodicTom', 'SynthDrum', 'ReverseCymbal', 'GuitarFretNoise', 'BreathNoise', 'Seashore', 'BirdTweet', 'TelephoneRing', 'Helicopter', 'Applause', 'Gunshot');


type
  TFNTimeCallBack = procedure(uTimerID, uMessage: UINT; 
    dwUser, dw1, dw2: DWORD) stdcall;

 function timeSetEvent(uDelay, uResolution: UINT;
  lpFunction: TFNTimeCallBack; dwUser: DWORD; uFlags: UINT): uint; stdcall; external 'winmm.dll'
 function timeKillEvent(uTimerID: UINT): uint; stdcall; external 'winmm.dll'


// API диалог -----------------------------------------------------------------
function get_file(dir: string): string;
var ofn: openfilename;
begin
 zeromemory(@ofn, sizeof(openfilename));

 with ofn do begin
  lstructsize:=sizeof(openfilename);
  lpstrinitialdir:= pansichar(dir);
  lpstrtitle:= 'выберите файл для воспроизведения...';
  nmaxfile:= 255;
  lpstrfile:=virtualalloc(0, 255, mem_commit, page_readwrite);
  lpstrfilter:='ALL'#0+'*.*'+#0#0;
  flags:= ofn_filemustexist + ofn_hidereadonly + ofn_pathmustexist
 end;

 if getopenfilename(ofn) then
  result:= ofn.lpstrfile;
 virtualfree(ofn.lpstrfile, 0, mem_release)
end;


procedure RemoteTimeProc(uID,uMsg:UINT;dwUser,dw1,dw2:DWORD); stdcall;
begin
 inc(i);

 fDAT.Read(buf, SIZEOF(buf));

 // нормировка
 freq:= buf * 79 div $ff;


 nota:= freq;
 Msg:= $90 + $100*nota + $10000*vol + chan; // стоп: $80+$100*nota+chan

 n:= 10; // n - номер инструмента
 midiOutShortMsg(_Out, $C0 + $100 * n);
 // воспроизведение
 midiOutShortMsg(_Out, Msg)
end;

begin
 t:= get_file(paramstr(0));
 if t='' then exit;

 fDAT:= TMemoryStream.Create;
 fDAT.LoadFromFile(t);
 
 midiOutOpen(@_Out,0,0,0,0);

 i:= 0;
 FTimer:= timeSetEvent(400,0, @RemoteTimeProc, 0, 1);
 while (i < fdat.Size-1) do ;
 timeKillEvent(FTimer);

 midiOutClose(_Out);
 fdat.Free
end.
будет играть любые файлы как мелодию . Суть в том, что TC нужно принять то, что нажали там, на синтезаторе.

Цитата:
Единственная ветка при этом меняется только в USB
Т.е. как HID устройство контроллер синтезатора не представляется системе, жаль.

Цитата:
К примеру он сразу же без каких либо устрановок драйверов определяется как midi клавиатура в Панели задач.
это уже интереснее. Вместо MidiOutOpen(), используйте MidiInOpen().
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 12.01.2013, 19:08   #12
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...руководство http://support.casio.com/pdf/008/Web..._3200-E-1A.pdf
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 12.01.2013, 19:11   #13
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

raxp, да, Вы правы, нужно получать, а не отправлять.
Сейчас попробую поэкспериментировать с MidiInOpen(). Заранее спасибо за совет!
koljsch вне форума Ответить с цитированием
Старый 12.01.2013, 19:14   #14
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

raxp, да, я знаю, у меня на руках эта же книжочка есть и на русском языке. Но там нет ничего интересного из того, что меня интересует, лишь только о том как пользоваться и что умеет синтезатор))
koljsch вне форума Ответить с цитированием
Старый 12.01.2013, 19:43   #15
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

Сделал))
Открываем порт:
Код:
HMIDIIN In;
midiInOpen(&In,0,(DWORD)midiCallback,0,CALLBACK_FUNCTION);
midiInStart(In);
Отлавливаем, что было нажато:
Код:
void CALLBACK midiCallback(HMIDIIN handle, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
{
     Form1->Memo1->Lines->Add((AnsiString)dwInstance);
     Form1->Memo1->Lines->Add((AnsiString)dwParam1);
     Form1->Memo1->Lines->Add((AnsiString)dwParam2);
     Form1->Memo1->Lines->Add((AnsiString)uMsg);
     Form1->Memo1->Lines->Add("-----");
}
Далее закрытие порта:
Код:
midiInStop(In);
midiInReset(In);
midiInClose(In);
Как я понял он номер клавиши передает+еще силу нажатия клавиши.
Спасибо всем за помощь!
koljsch вне форума Ответить с цитированием
Старый 12.01.2013, 20:39   #16
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...вот именно. А в руководстве есть интересное - там почти в конце есть состояния сообщений и нот.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 12.01.2013, 20:49   #17
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

Да, это я тоже видел у себя)) Но это уже потом буду разбираться, главное, что понял как получать сообщения)
koljsch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Системный синтезатор ДенисОКЕЙ Операционные системы общие вопросы 3 08.04.2012 12:34
Синтезатор речи tonatas Мультимедиа в Delphi 4 30.01.2011 10:33
Синтезатор ЭМ-05 vedro-compota Компьютерное железо 1 27.10.2010 20:08
Синтезатор Claster Помощь студентам 0 06.10.2010 18:06
Программный синтезатор JROUD Помощь студентам 3 16.08.2010 09:50