char *snd_buffer[5]; int sound_file_size[5]; int number; struct Process *sound_player; int sound_player_done = 0; void load_sound(char *name, int number) { FILE *fp_filename; if((fp_filename = fopen(name,"rb")) == NULL) { printf("can't open sound file\n");exit(0);} ; fseek (fp_filename,0,SEEK_END); sound_file_size[number] = ftell(fp_filename); fseek (fp_filename,0,SEEK_SET); snd_buffer[number]=(char *)malloc(sound_file_size[number]); fread(snd_buffer[number],sound_file_size[number],1,fp_filename); //printf("%d\n",sound_file_size[number]); fclose(fp_filename); // free(snd_buffer[number]); } void play_sound_routine(void) { struct MsgPort *AHImp_sound = NULL; struct AHIRequest *AHIios_sound[2] = {NULL,NULL}; struct AHIRequest *AHIio_sound = NULL; BYTE AHIDevice_sound = -1; //ULONG sig_sound; //-----open/setup ahi if((AHImp_sound=CreateMsgPort()) != NULL) { if((AHIio_sound=(struct AHIRequest *)CreateIORequest(AHImp_sound,sizeof(struct AHIRequest))) != NULL) { AHIio_sound->ahir_Version = 4; AHIDevice_sound=OpenDevice(AHINAME,0,(struct IORequest *)AHIio_sound,0); } } if(AHIDevice_sound) { Printf("Unable to open %s/0 version 4\n",AHINAME); goto sound_panic; } AHIios_sound[0]=AHIio_sound; SetIoErr(0); AHIios_sound[0]->ahir_Std.io_Message.mn_Node.ln_Pri = 127; AHIios_sound[0]->ahir_Std.io_Command = CMD_WRITE; AHIios_sound[0]->ahir_Std.io_Data = snd_buffer[number];//sndbuf; AHIios_sound[0]->ahir_Std.io_Length = sound_file_size[number];//fib_snd.fib_Size; AHIios_sound[0]->ahir_Std.io_Offset = 0; AHIios_sound[0]->ahir_Frequency = 8000;//44100; AHIios_sound[0]->ahir_Type = AHIST_M8S;//AHIST_M16S; AHIios_sound[0]->ahir_Volume = 0x10000; // Full volume AHIios_sound[0]->ahir_Position = 0x8000; // Centered AHIios_sound[0]->ahir_Link = NULL; DoIO((struct IORequest *) AHIios_sound[0]); sound_panic: //printf("are we on sound_exit?\n"); if(!AHIDevice_sound) CloseDevice((struct IORequest *)AHIio_sound); DeleteIORequest((struct IORequest *)AHIio_sound); DeleteMsgPort(AHImp_sound); sound_player_done = 1; } void stop_sound(void) { Signal(&sound_player->pr_Task, SIGBREAKF_CTRL_C ); while(sound_player_done !=1){}; sound_player_done=0; } void play_sound(int num) { number=num; #ifdef __MORPHOS__ sound_player = CreateNewProcTags( NP_Entry, &play_sound_routine, NP_Priority, 1, NP_Name, "Ahi raw-sound-player Process", // NP_Input, Input(), // NP_CloseInput, FALSE, // NP_Output, Output(), // NP_CloseOutput, FALSE, NP_CodeType, CODETYPE_PPC, TAG_DONE); #else sound_player = CreateNewProcTags( NP_Entry, &play_sound_routine, NP_Priority, 1, NP_Name, "Ahi raw-sound-player Process", // NP_Input, Input(), // NP_CloseInput, FALSE, // NP_Output, Output(), // NP_CloseOutput, FALSE, TAG_DONE); #endif Delay(10); // little delay for make sounds finish }