1 #include <libchimara/glk.h>
9 if(!glk_gestalt(gestalt_Sound, 0)) {
10 fprintf(stderr, "Sound not supported.\n");
13 if(!glk_gestalt(gestalt_SoundVolume, 0)) {
14 fprintf(stderr, "Sound volume not supported.\n");
17 if(!glk_gestalt(gestalt_SoundNotify, 0)) {
18 fprintf(stderr, "Sound notification not supported.\n");
22 schanid_t sc = glk_schannel_create(0);
24 fprintf(stderr, "Could not create sound channel.\n");
28 /* Open the main window. */
29 winid_t mainwin = glk_window_open(0, 0, 0, wintype_TextBuffer, 1);
31 /* It's possible that the main window failed to open. There's
32 nothing we can do without it, so exit. */
35 glk_set_window(mainwin);
36 glk_put_string("Copy a sound file to the current directory and rename it "
37 "to SND3. Supported formats: AIFF, OGG, MOD, S3M, IT, XM. Type 'play' "
47 glk_put_string("\nprompt> ");
48 glk_request_line_event(mainwin, buffer, 1024, 0);
50 printf("Received event:\n");
51 printf("Type: %d\n", ev.type);
54 printf( "%d\n", glk_window_get_rock(ev.win) );
57 printf("Var1: %d\n", ev.val1);
58 printf("Var2: %d\n", ev.val2);
60 case evtype_LineInput:
61 // Null-terminate string
65 if(strcmp(buffer, "quit") == 0) {
66 glk_put_string("That's all, folks.\n");
68 } else if(strcmp(buffer, "play") == 0) {
69 glk_put_string("Playing sound.\n");
70 if(!glk_schannel_play_ext(sc, 3, repeat, 1)) {
71 fprintf(stderr, "Could not start sound channel.\n");
74 } else if(strcmp(buffer, "stop") == 0) {
75 glk_put_string("Stopping sound.\n");
76 glk_schannel_stop(sc);
77 } else if(strcmp(buffer, "repeat") == 0) {
78 glk_put_string("Setting repeat to ");
80 glk_put_string("TWICE.\n");
82 } else if(repeat == 2) {
83 glk_put_string("INFINITE.\n");
85 } else if(repeat == -1) {
86 glk_put_string("DON'T PLAY.\n");
88 } else if(repeat == 0) {
89 glk_put_string("ONCE.\n");
92 } else if(strcmp(buffer, "help") == 0) {
93 glk_put_string("Type PLAY or REPEAT or STOP or QUIT.\n");
96 case evtype_SoundNotify:
97 glk_cancel_line_event(mainwin, NULL);
98 glk_put_string("\nGot sound notify event!\n");
105 glk_schannel_stop(sc);
106 glk_schannel_destroy(sc);