|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 14.08.2004, 14:13 Titel: MIDI -Send! |
|
|
Kennt jemand ein Tutorial über MIDI mit dem ich selber die Töne erzeugen kann und am Besten mit den wenigsten Zeilen Code?
Ich will einfach nur das Statusbyte und die zwei Datenbytes senden können. Und keine MidiFiles dazu einlesen müssen um Töne wiedergeben zu können. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 17.08.2004, 20:19 Titel: |
|
|
Ich hab es jetzt geschafft soetwas zu coden, aber es funktioniert nicht...eigentlich sollte man einen Ton durchgehend hören, bis man eine Taste drückt, klappt aber nicht...wisst ihr zufällig woran es liegen könnte?
Code: | #include <windows.h>
#include <dsound.h>
#include <dmusici.h>
#include <conio.h>
#pragma comment (lib,"dxguid.lib")
#pragma comment (lib,"dsound.lib")
// >>>>>> Main status bytes of the MIDI message system <<<<<<
// Note off event
const BYTE NOTE_OFF = 0x80;
// Note on event
const BYTE NOTE_ON = 0x90;
// Program change
const BYTE PATCH_CHANGE = 0xC0;
// Polyphonic Key Pressure (Aftertouch)
const BYTE POLY_PRESSURE = 0xA0;
// Control Change
const BYTE CONTROL_CHANGE = 0xB0;
//Channel Pressure (After-touch).
const BYTE CHANNEL_PREASURE = 0xD0;
// Pitch Wheel Change
const BYTE PITCH_BEND = 0xE0;
IDirectMusicPerformance8* m_pPerformance; // Performance interface
HRESULT SendMidiMsg(IDirectMusicGraph8* pGraph,BYTE bStatus,BYTE bByte1,BYTE bByte2,DWORD dwPChannel)
{
HRESULT hr = -1;
DMUS_MIDI_PMSG *pDMUS_MIDI_PMSG = NULL;
// Allocates memory for the message
if (FAILED(hr = m_pPerformance->AllocPMsg(sizeof(DMUS_MIDI_PMSG),(DMUS_PMSG**)&pDMUS_MIDI_PMSG)))
return -1;
pDMUS_MIDI_PMSG->dwPChannel = dwPChannel;
pDMUS_MIDI_PMSG->bStatus = bStatus;
pDMUS_MIDI_PMSG->bByte1 = bByte1;
pDMUS_MIDI_PMSG->bByte2 = bByte2;
// Stamps the message
hr = pGraph->StampPMsg((DMUS_PMSG*)pDMUS_MIDI_PMSG);
if (SUCCEEDED(hr))
{
// Sends and frees the message
if (FAILED(hr = m_pPerformance->SendPMsg((DMUS_PMSG*)pDMUS_MIDI_PMSG)))
{
m_pPerformance->FreePMsg((DMUS_PMSG*)pDMUS_MIDI_PMSG);
return -1;
}
} else m_pPerformance->FreePMsg((DMUS_PMSG*)pDMUS_MIDI_PMSG);
return hr;
}
HRESULT SendMidiMsg(BYTE bStatus,BYTE bByte1,BYTE bByte2,DWORD dwPChannel)
{
HRESULT hr = -1;
if (m_pPerformance == NULL)
return -1;
// Gets the graph
IDirectMusicGraph8* pIDirectMusicGraph;
if (FAILED(hr = m_pPerformance->QueryInterface(IID_IDirectMusicGraph8,(void**)&pIDirectMusicGraph)))
return -1;
SendMidiMsg(pIDirectMusicGraph,bStatus,bByte1,bByte2,dwPChannel);
return hr;
}
int main()
{
CoInitialize(NULL);
CoCreateInstance(CLSID_DirectMusicPerformance,NULL,
CLSCTX_INPROC,IID_IDirectMusicPerformance8,
(LPVOID *)&m_pPerformance);
m_pPerformance->InitAudio(NULL,NULL,NULL,DMUS_APATH_DYNAMIC_STEREO,64,DMUS_AUDIOF_ALL,NULL);
SendMidiMsg(NOTE_ON,64,127,1);
getch();
SendMidiMsg(NOTE_OFF,64,127,1);
m_pPerformance->Stop(NULL,NULL,0,0);
m_pPerformance->CloseDown();
m_pPerformance->Release();
m_pPerformance=NULL;
CoUninitialize();
return 0;
}
|
_________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 17.08.2004, 21:20 Titel: |
|
|
Im Petzold is dass ziemlich cool beschrieben. Da kann man sich denn auch mit der Tastatur ein kleines MIDI-Keyboard coden, |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 18.08.2004, 06:08 Titel: |
|
|
MiracleBoy hat Folgendes geschrieben: | Im Petzold is dass ziemlich cool beschrieben. Da kann man sich denn auch mit der Tastatur ein kleines MIDI-Keyboard coden, |
Genau so was will ich auch machen.
Aber 73,50€ ...im Moment hab ich fürsowas nicht soviel Geld...
[url=http://www.amazon.de/exec/obidos/search-handle-url/ix=books-de-intl-us&rank=%2Bsalesrank&fqp=product-type%01us%02keywords%01Petzold&sz=25&pg=1&field-browse=3839&results-mode=refined&results-tag=bnb&test-items-found=23&filtered-bnb=918372:18|5:11|3839:7/qid=1092809171/sr=3-3/ref=sr_3_11_3/302-9164755-2229669]hier[/url] _________________ The source of all power is in its destiny...
Zuletzt bearbeitet von TheMillenium am 18.08.2004, 06:26, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 18.08.2004, 06:10 Titel: |
|
|
Naja 59€ sinds nur bei amazon... |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 18.08.2004, 06:24 Titel: |
|
|
Kannst du mir dazu den Amazon-Link geben?
Denn wie du an dem Link den ich oben gepostet habe siehst, habe ich nur teurere Bücher gefunden...ich hoffe du meinst kein C Sharp Buch..
sry, ich bin davon ausgegangen, dass das Buch auf Englisch ist, siche ich aber nach Petzold bei den deutschen Büchern, sehe ich die Ausgabe für 59€ _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Kronos Senior JLI'ler
Anmeldedatum: 19.03.2004 Beiträge: 290
Medaillen: Keine
|
Verfasst am: 18.08.2004, 06:26 Titel: |
|
|
Dieser Thread sollte wohl eher in "Grafik und Sound" |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 18.08.2004, 06:30 Titel: |
|
|
Nein, ich will das ja mit DX machen und außerdem findet man in Grafik&Sound soweit ich das beobachtet habe nur Soundfiles, Grafiken, Programme dafür, und ganz oberflächliche Fragen über Sound, wie z.B. Auslesen der mp3-Tags...aber eigentlich ist das ja auch egal, da es in beide Foren reinpasst! _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 18.08.2004, 07:47 Titel: |
|
|
Ich hab's jetzt geschafft.
Man braucht eigentlich nur midiOutShortMsg und nicht das ganze drumheurm wie in dem Code was ich gepostet habe! _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|