591
591
Tcl_SetObjResult(interp, Tcl_NewIntObj(result));
594
#else /* !HAVE_SYS_ASOUNDLIB_H */
596
timer_status(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
598
TK707 *tk707 = (TK707*)clientData;
599
seq707_context_t *ctxp = tk707->ctxp_p;
600
snd_seq_queue_status_t *status;
602
snd_seq_queue_status_alloca(&status);
603
snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status);
604
Tcl_SetObjResult(interp, Tcl_NewIntObj(snd_seq_queue_status_get_tick_time(status)));
609
get_pat_tick(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
611
TK707 *tk707 = (TK707*)clientData;
612
seq707_context_t *ctxp = tk707->ctxp_p;
613
snd_seq_queue_status_t *status;
616
snd_seq_queue_status_alloca(&status);
617
snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status);
618
result = 16 - ((ctxp->currticktime - snd_seq_queue_status_get_tick_time(status))/old_tick_per_sixtennth);
619
Tcl_SetObjResult(interp, Tcl_NewIntObj(result));
623
#endif /* HAVE_SYS_ASOUNDLIB_H */
596
626
ponderated_velocity (int volume_master, int volume_accent, double accent_factor,
636
666
seq707_context_t *ctxp = tk707->ctxp_c;
637
667
static int have_start = 0;
668
#ifdef HAVE_SYS_ASOUNDLIB_H
638
669
snd_seq_queue_status_t status;
671
snd_seq_queue_status_t *status;
676
#ifdef HAVE_SYS_ASOUNDLIB_H
641
677
snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, &status);
642
if ( status.tick > ctxp->currticktime ) {
643
ctxp->currticktime = status.tick;
678
cur_tick = status.tick;
680
snd_seq_queue_status_alloca(&status);
681
snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status);
682
cur_tick = snd_seq_queue_status_get_tick_time(status);
684
if ( cur_tick > ctxp->currticktime ) {
685
ctxp->currticktime = cur_tick;
645
687
midich = ctxp->midichannel;
646
688
if (!have_start) {
658
700
ctxp->currticktime += tick_per_flam;
659
701
do_noteon (ctxp, midich, midi_note, velocity);
703
#ifdef HAVE_SYS_ASOUNDLIB_H
661
704
snd_seq_flush_output(ctxp->handle);
706
snd_seq_drain_output(ctxp->handle);
665
711
c_stop_note (TK707 *tk707, int midi_note)
667
713
seq707_context_t *ctxp = tk707->ctxp_c;
714
#ifdef HAVE_SYS_ASOUNDLIB_H
668
715
snd_seq_queue_status_t status;
717
snd_seq_queue_status_t *status;
722
#ifdef HAVE_SYS_ASOUNDLIB_H
671
723
snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, &status);
672
if ( status.tick > ctxp->currticktime ) {
673
ctxp->currticktime = status.tick;
724
cur_tick = status.tick;
726
snd_seq_queue_status_alloca(&status);
727
snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status);
728
cur_tick = snd_seq_queue_status_get_tick_time(status);
730
if ( cur_tick > ctxp->currticktime ) {
731
ctxp->currticktime = cur_tick;
675
733
midich = ctxp->midichannel;
677
735
do_noteon (ctxp, midich, midi_note, 0);
678
736
/* ctxp->currticktime += old_tick_per_quarter; */
738
#ifdef HAVE_SYS_ASOUNDLIB_H
680
739
snd_seq_flush_output(ctxp->handle);
681
/* snd_seq_drain_output(ctxp->handle); */
741
snd_seq_drain_output(ctxp->handle);
683
744
alsa_timer_stop(ctxp);
750
815
TK707 *tk707 = (TK707*)clientData;
751
816
seq707_context_t *ctxp = tk707->ctxp_p;
817
#ifdef HAVE_SYS_ASOUNDLIB_H
752
818
snd_seq_queue_status_t status;
820
snd_seq_queue_status_t *status;
753
823
int group, pattern, step, stepcount, scale, midich, dur;
754
824
PatternElement *current_pattern;
755
825
int volume_master, volume_accent, flam_interval;
770
840
fprintf (stderr, "FATAL: invalid flam/delay configuration\n");
843
#ifdef HAVE_SYS_ASOUNDLIB_H
773
844
snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, &status);
774
if ( status.tick > ctxp->currticktime ) {
775
ctxp->currticktime = status.tick;
845
cur_tick = status.tick;
847
snd_seq_queue_status_alloca(&status);
848
snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status);
849
cur_tick = snd_seq_queue_status_get_tick_time(status);
851
if ( cur_tick > ctxp->currticktime ) {
852
ctxp->currticktime = cur_tick;
777
854
midich = ctxp->midichannel;
778
855
alsa_timer_cont (ctxp);
1061
1143
Tcl_ListObjAppendElement(interp, items[i],
1062
1144
Tcl_NewStringObj(pinfo.name, strlen(pinfo.name)));
1063
1145
Tcl_ListObjAppendElement(interp, items[i],
1064
Tcl_NewStringObj(cinfo.name, strlen(pinfo.name)));
1066
Tcl_ListObjAppendElement(interp, res, items[i]);
1072
Tcl_SetObjResult(interp, res);
1146
Tcl_NewStringObj(cinfo.name, strlen(cinfo.name)));
1148
Tcl_ListObjAppendElement(interp, res, items[i]);
1154
Tcl_SetObjResult(interp, res);
1158
#else /* !HAVE_SYS_ASOUNDLIB_H */
1160
port_list(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
1162
TK707 *tk707 = (TK707*)clientData;
1163
Tcl_Obj *res, *items[17]={NULL};
1164
int i, client, port, io;
1165
snd_seq_client_info_t *cinfo;
1166
snd_seq_port_info_t *pinfo;
1168
tk707_get_int1_macro(interp,objc,objv, io);
1170
if( snd_seq_open(&handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0 )
1175
res = Tcl_NewListObj(0, NULL);
1177
snd_seq_client_info_alloca(&cinfo);
1178
snd_seq_port_info_alloca(&pinfo);
1181
snd_seq_client_info_set_client(cinfo, 0);
1182
while (snd_seq_query_next_client(handle, cinfo) >= 0) {
1183
client = snd_seq_client_info_get_client(cinfo);
1184
snd_seq_port_info_set_client(pinfo, client);
1185
snd_seq_port_info_set_port(pinfo, -1);
1186
while (snd_seq_query_next_port(handle, pinfo) >= 0) {
1189
cap = (SND_SEQ_PORT_CAP_SUBS_WRITE|SND_SEQ_PORT_CAP_WRITE);
1191
cap = (SND_SEQ_PORT_CAP_SUBS_READ|SND_SEQ_PORT_CAP_READ);
1192
if( (snd_seq_port_info_get_capability(pinfo) & cap) == cap )
1195
port = snd_seq_port_info_get_port(pinfo);
1196
items[i] = Tcl_NewListObj(0, NULL);
1197
Tcl_ListObjAppendElement(interp, items[i],
1198
Tcl_NewIntObj(client));
1199
Tcl_ListObjAppendElement(interp, items[i],
1200
Tcl_NewIntObj(port));
1201
name = snd_seq_port_info_get_name(pinfo);
1202
Tcl_ListObjAppendElement(interp, items[i],
1203
Tcl_NewStringObj(name, strlen(name)));
1204
name = snd_seq_client_info_get_name(cinfo);
1205
Tcl_ListObjAppendElement(interp, items[i],
1206
Tcl_NewStringObj(name, strlen(name)));
1208
Tcl_ListObjAppendElement(interp, res, items[i]);
1214
Tcl_SetObjResult(interp, res);
1218
#endif /* HAVE_SYS_ASOUNDLIB_H */
1078
1221
Return a given screen distance to pixels