Filling in branch from trunk
[blender.git] / intern / SoundSystem / SND_test / SND_test.c
1 /*  SND_test.c   nov 2000
2 *  
3 *  testfile for the SND module
4
5 * janco verduin
6 *
7 * $Id$
8  *
9  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
10  *
11  * This program is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU General Public License
13  * as published by the Free Software Foundation; either version 2
14  * of the License, or (at your option) any later version. The Blender
15  * Foundation also sells licenses for use in proprietary software under
16  * the Blender License.  See http://www.blender.org/BL/ for information
17  * about this.
18  *
19  * This program is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  * GNU General Public License for more details.
23  *
24  * You should have received a copy of the GNU General Public License
25  * along with this program; if not, write to the Free Software Foundation,
26  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
27  *
28  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
29  * All rights reserved.
30  *
31  * The Original Code is: all of this file.
32  *
33  * Contributor(s): none yet.
34  *
35  * ***** END GPL/BL DUAL LICENSE BLOCK *****
36 */
37
38 #include "SND_C-api.h"
39 #include "BlenderWaveCacheCApi.h"
40 #include "OpenALC-Api.h"
41 #include <stdio.h>
42 #include <stdlib.h>
43
44 #ifdef HAVE_CONFIG_H
45 #include <config.h>
46 #endif
47
48 #if defined(WIN32)
49 #include <io.h>
50 #else
51 #include <unistd.h>
52 #endif
53 #include <fcntl.h>
54
55 static int buf[3];
56
57 float oPos[3]={3.0, 0.0,-1.0};
58 float oVel[3]={0.0, 0.0, 1.0};
59 float oOri[6]={0.0, 0.0, 1.0, 0.0, 1.0, 0.0};
60
61 void* ReadFile(char *filename)
62 {
63         int file, filelen;
64         void *data = NULL;
65
66 #if defined(WIN32)      
67         file = open(filename, O_BINARY|O_RDONLY);
68 #else
69         file = open(filename, 0|O_RDONLY);
70 #endif
71
72         if (file == -1) {
73                 printf("can't open file.\n");
74                 printf("press q for quit.\n");
75
76         }
77         else {
78                 filelen = lseek(file, 0, SEEK_END);
79                 lseek(file, 0, SEEK_SET);
80                 
81                 if (filelen != 0){
82                         data = malloc(filelen);
83                         if (read(file, data, filelen) != filelen) {
84                                 free(data);
85                                 data = NULL;
86                         }
87                 }
88                 close(file);
89                 
90         }
91         return (data);
92 }
93
94 int main(int argc, char* argv[])
95 {
96         int ch;
97         char* samplename = NULL;
98         void* sampleinmemory = NULL;
99         SND_CacheHandle wavecache = NULL;
100         SND_SceneHandle scene = NULL;
101         SND_ObjectHandle object = NULL;
102         
103         wavecache = SND_GetWaveCache();
104         scene = SND_CreateOpenALScene(wavecache);
105
106         samplename = "2.wav";
107         sampleinmemory = ReadFile(samplename);
108         
109         if (sampleinmemory) {
110
111                 object = SND_CreateObject();
112                 SND_AddMemoryLocation(samplename, sampleinmemory);
113                 SND_SetSampleName(object, samplename);
114                 SND_AddObject(scene, object);
115                 printf("go your gang...\n");
116                 printf("1: play\n");
117                 printf("2: stop\n");
118                 printf("q: quit\n");
119         }
120         do
121         {
122                 ch = getchar();
123                 ch = toupper(ch);
124                 switch (ch)
125                 {
126                 case '1':
127                         {
128                                 SND_SetPitch(object, 1.0);
129                                 SND_SetGain(object, 1.0);
130                                 SND_StartSound(object);
131                                 break;
132                         }
133                 case '2':
134                         {
135                                 SND_StopSound(object);
136                                 break;
137                         }
138                 default:
139                         break;
140                 }
141
142                 SND_Proceed(scene);
143
144         } while (ch != 'Q');
145         
146         if (object) {
147                 
148                 SND_RemoveObject(scene, object);
149                 SND_DeleteObject(object);
150         }
151         
152         SND_DeleteScene(scene);
153         SND_DeleteCache();
154         
155         return 0;
156         
157 }