Esiste un comando che consenta alla nostra applicazione Delphi di emulare il suono in cui possiamo scegliere il tono numerico e la durata come in basic?Come creare note sonore in Delphi?
risposta
per produrre un tono sinusoidale pura, è possibile utilizzare
Windows.Beep(400, 1000)
, che suonerà un 400 Hz puro tono sinusoidale per una durata di 1000 millisecondi.
Se si desidera suonare uno strumento reale (piano, chitarra o una qualsiasi delle 125 (?) Altre opzioni), è possibile utilizzare il MIDI. Basta usare l'unità MMSystem
e fare
var
mo: HMIDIOUT;
const
MIDI_NOTE_ON = $90;
MIDI_NOTE_OFF = $80;
MIDI_CHANGE_INSTRUMENT = $C0;
function MIDIEncodeMessage(Msg, Param1, Param2: byte): integer;
begin
result := Msg + (Param1 shl 8) + (Param2 shl 16);
end;
procedure NoteOn(NewNote, NewIntensity: byte);
begin
midiOutShortMsg(mo, MIDIEncodeMessage(MIDI_NOTE_ON, NewNote, NewIntensity));
end;
procedure NoteOff(NewNote, NewIntensity: byte);
begin
midiOutShortMsg(mo, MIDIEncodeMessage(MIDI_NOTE_OFF, NewNote, NewIntensity));
end;
procedure SetInstrument(NewInstrument: byte);
begin
midiOutShortMsg(mo, MIDIEncodeMessage(MIDI_CHANGE_INSTRUMENT, NewInstrument, 0));
end;
procedure InitMIDI;
begin
midiOutOpen(@mo, 0, 0, 0, CALLBACK_NULL);
midiOutShortMsg(mo, MIDIEncodeMessage(MIDI_CHANGE_INSTRUMENT, 0, 0));
end;
Dopo aver inizializzato il sistema MIDI, si può provare
programmazioneNoteOn(50, 127);
Sleep(500);
SetInstrument(60);
NoteOn(60, 127);
Sleep(500);
NoteOff(60, 127);
SetInstrument(80);
NoteOn(70, 127);
Sleep(500);
NoteOff(70, 127);
SetInstrument(90);
NoteOn(80, 127);
Sleep(500);
NoteOff(80, 127);
SetInstrument(100);
NoteOn(90, 127);
Sleep(500);
NoteOff(90, 127);
SetInstrument(12);
NoteOn(40, 127);
Sleep(1000);
NoteOff(40, 127);
MIDI è così sottovalutata!
* La programmazione MIDI è così sottovalutata! * Sì, perché chi vorrebbe sentire un tale suono :-) [+1 per Windows.Beep] – TLama
@TLama: Sei serio? Penso che suoni bello, ed è molto semplice creare suoni belli e interessanti. [E i file MIDI non occupano spazio!] –
Sì, dato che sono un DJ dal vivo (molto lontano dal solo riprodurre CD), la mia aspettativa per un suono è diversa dal MIDI ;-) – TLama
- 1. Come creare un emulatore Samsung Galaxy Note nell'AVD Android?
- 2. Come creare usando MSBuild e Delphi XE2
- 3. Semplice generatore di onde sonore con SDL in C++
- 4. Creare uno spinner in una console Delphi
- 5. come creare un'anteprima dello screen saver in Delphi?
- 6. Come creare un'istanza di oggetto con RTTI in Delphi 2010?
- 7. Jupyter: non è possibile creare un nuovo blocco note?
- 8. Note dattiloscritto
- 9. JQuery wallboard con notifiche sonore e celle/celle lampeggianti
- 10. Emulatore Samsung Galaxy Note
- 11. Come si generano le note di rilascio?
- 12. "Delphi Fundamentals" in Delphi 2009
- 13. Delphi: come creare un TList globale sicuro per thread?
- 14. Come iniziare a creare siti Web con Delphi Prism?
- 15. Come creare autonomi servizi Web SOAP utilizzando Delphi?
- 16. iOS - MKMapView - trascinabili NOTE
- 17. Conversione EOL nel blocco note ++
- 18. come salvare le impostazioni nel blocco note ++
- 19. Invia testo alle note
- 20. Blocco note Jupyter (IPython)
- 21. Disabilitare le virgolette intelligenti in Blocco note ++
- 22. come eseguire javascript in delphi?
- 23. Come chiamare EnumSystemLocales in Delphi?
- 24. Come tradurre alignof in Delphi?
- 25. Delphi: AnimateWindow come in FireFox
- 26. Riproduci note musicali in Swift Playground
- 27. Come riavviare \ numerazione delle note ogni pagina
- 28. Come posso creare un AVD Android per un Samsung Galaxy Note 2?
- 29. come creare dinamicamente un componente in Delphi, come TLabel o TEdit ... ecc
- 30. Come esportare il blocco note corrente in HTML su Jupyter
Qualcosa di simile Windows.Beep (Frequenz, Duration_in_ms); ? – bummi
Chi ha votato? Questo è un po 'duro ... – Shambhala
Se provi Beep, Delphi dice che non ha parametri perché trova la funzione beep dall'unità di sistema. È necessario specificare la funzione winApi.Windows.beep per ottenere le capacità di tono appropriate. Grazie ragazzi! – PSyLoCKe