annotate libao2/ao_pcm.c @ 12022:293141b57c01

Use MultiplyElement to control volume. Works with multiple videos at the same time and even when NAS does not control the mixer or it is unavailable. Show buffer underrun hint only once and add missing linebreaks.
author ranma
date Sat, 13 Mar 2004 21:54:35 +0000
parents 8ba8ec1293e7
children 99798c3cdb93
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6237
2eec40929570 warning fixes (string.h is required for memset)
pl
parents: 5837
diff changeset
1 #include "config.h"
2eec40929570 warning fixes (string.h is required for memset)
pl
parents: 5837
diff changeset
2
1107
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
3 #include <stdio.h>
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
4 #include <stdlib.h>
6237
2eec40929570 warning fixes (string.h is required for memset)
pl
parents: 5837
diff changeset
5 #include <string.h>
1107
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
6
5837
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
7 #include "bswap.h"
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
8 #include "afmt.h"
1107
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
9 #include "audio_out.h"
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
10 #include "audio_out_internal.h"
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
11
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
12 static ao_info_t info =
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
13 {
1112
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
14 "RAW PCM/WAVE file writer audio output",
1107
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
15 "pcm",
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
16 "Atmosfear",
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
17 ""
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
18 };
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
19
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
20 LIBAO_EXTERN(pcm)
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
21
4914
de4074ab4e5f good-looking fix by Tobias Diedrich <td@informatik.uni-hannover.de>
arpi
parents: 3095
diff changeset
22 extern int vo_pts;
de4074ab4e5f good-looking fix by Tobias Diedrich <td@informatik.uni-hannover.de>
arpi
parents: 3095
diff changeset
23
1112
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
24 char *ao_outputfilename = NULL;
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
25 int ao_pcm_waveheader = 1;
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
26
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
27 #define WAV_ID_RIFF 0x46464952 /* "RIFF" */
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
28 #define WAV_ID_WAVE 0x45564157 /* "WAVE" */
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
29 #define WAV_ID_FMT 0x20746d66 /* "fmt " */
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
30 #define WAV_ID_DATA 0x61746164 /* "data" */
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
31 #define WAV_ID_PCM 0x0001
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
32
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
33 struct WaveHeader
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
34 {
11270
8ba8ec1293e7 64bit types fix by a unkown mandrake 64bit expert
attila
parents: 10077
diff changeset
35 uint32_t riff;
8ba8ec1293e7 64bit types fix by a unkown mandrake 64bit expert
attila
parents: 10077
diff changeset
36 uint32_t file_length;
8ba8ec1293e7 64bit types fix by a unkown mandrake 64bit expert
attila
parents: 10077
diff changeset
37 uint32_t wave;
8ba8ec1293e7 64bit types fix by a unkown mandrake 64bit expert
attila
parents: 10077
diff changeset
38 uint32_t fmt;
8ba8ec1293e7 64bit types fix by a unkown mandrake 64bit expert
attila
parents: 10077
diff changeset
39 uint32_t fmt_length;
8ba8ec1293e7 64bit types fix by a unkown mandrake 64bit expert
attila
parents: 10077
diff changeset
40 uint16_t fmt_tag;
8ba8ec1293e7 64bit types fix by a unkown mandrake 64bit expert
attila
parents: 10077
diff changeset
41 uint16_t channels;
8ba8ec1293e7 64bit types fix by a unkown mandrake 64bit expert
attila
parents: 10077
diff changeset
42 uint32_t sample_rate;
8ba8ec1293e7 64bit types fix by a unkown mandrake 64bit expert
attila
parents: 10077
diff changeset
43 uint32_t bytes_per_second;
8ba8ec1293e7 64bit types fix by a unkown mandrake 64bit expert
attila
parents: 10077
diff changeset
44 uint16_t block_align;
8ba8ec1293e7 64bit types fix by a unkown mandrake 64bit expert
attila
parents: 10077
diff changeset
45 uint16_t bits;
8ba8ec1293e7 64bit types fix by a unkown mandrake 64bit expert
attila
parents: 10077
diff changeset
46 uint32_t data;
8ba8ec1293e7 64bit types fix by a unkown mandrake 64bit expert
attila
parents: 10077
diff changeset
47 uint32_t data_length;
1112
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
48 };
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
49
5837
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
50 /* init with default values */
1112
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
51 static struct WaveHeader wavhdr = {
5837
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
52 le2me_32(WAV_ID_RIFF),
9026
ccbfff7debf8 When the file is not finished to be written,
arpi
parents: 8060
diff changeset
53 /* same conventions than in sox/wav.c/wavwritehdr() */
9223
b639f4560740 temporary 'inifinte' length disabled (commit r1.13 reversed) due to user
arpi
parents: 9156
diff changeset
54 0, //le2me_32(0x7ffff024),
5837
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
55 le2me_32(WAV_ID_WAVE),
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
56 le2me_32(WAV_ID_FMT),
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
57 le2me_32(16),
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
58 le2me_16(WAV_ID_PCM),
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
59 le2me_16(2),
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
60 le2me_32(44100),
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
61 le2me_32(192000),
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
62 le2me_16(4),
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
63 le2me_16(16),
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
64 le2me_32(WAV_ID_DATA),
9223
b639f4560740 temporary 'inifinte' length disabled (commit r1.13 reversed) due to user
arpi
parents: 9156
diff changeset
65 0, //le2me_32(0x7ffff000)
1112
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
66 };
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
67
1107
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
68 static FILE *fp = NULL;
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
69
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
70 // to set/get/query special features/parameters
9633
12b1790038b0 64bit libao2 fix by Jens Axboe <mplayer-dev@kernel.dk>
alex
parents: 9277
diff changeset
71 static int control(int cmd,void *arg){
1107
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
72 return -1;
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
73 }
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
74
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
75 // open & setup audio device
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
76 // return: 1=success 0=fail
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
77 static int init(int rate,int channels,int format,int flags){
5837
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
78 int bits;
1112
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
79 if(!ao_outputfilename) {
9156
a75cab40c985 double free(), found by Olivier Galibert <galibert@pobox.com>
arpi
parents: 9026
diff changeset
80 ao_outputfilename = strdup(ao_pcm_waveheader ? "audiodump.wav" : "audiodump.pcm");
1112
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
81 }
7658
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
82
5837
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
83 /* bits is only equal to format if (format == 8) or (format == 16);
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
84 this means that the following "if" is a kludge and should
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
85 really be a switch to be correct in all cases */
1112
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
86
7658
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
87 bits=8;
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
88 switch(format){
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
89 case AFMT_S8:
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
90 format=AFMT_U8;
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
91 case AFMT_U8:
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
92 break;
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
93 default:
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
94 format=AFMT_S16_LE;
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
95 bits=16;
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
96 break;
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
97 }
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
98
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
99 ao_data.outburst = 65536;
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
100 ao_data.buffersize= 2*65536;
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
101 ao_data.channels=channels;
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
102 ao_data.samplerate=rate;
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
103 ao_data.format=format;
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
104 ao_data.bps=channels*rate*(bits/8);
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
105
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
106 wavhdr.channels = le2me_16(ao_data.channels);
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
107 wavhdr.sample_rate = le2me_32(ao_data.samplerate);
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
108 wavhdr.bytes_per_second = le2me_32(ao_data.bps);
5837
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
109 wavhdr.bits = le2me_16(bits);
9277
d824f1a3c341 The "initialize wav header with infinite lenght" broke the
arpi
parents: 9223
diff changeset
110
d824f1a3c341 The "initialize wav header with infinite lenght" broke the
arpi
parents: 9223
diff changeset
111 wavhdr.data_length=le2me_32(0x7ffff000);
d824f1a3c341 The "initialize wav header with infinite lenght" broke the
arpi
parents: 9223
diff changeset
112 wavhdr.file_length = wavhdr.data_length + sizeof(wavhdr) - 8;
5837
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
113
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
114 printf("PCM: File: %s (%s)\n"
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
115 "PCM: Samplerate: %iHz Channels: %s Format %s\n",
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
116 ao_outputfilename, (ao_pcm_waveheader?"WAVE":"RAW PCM"), rate,
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
117 (channels > 1) ? "Stereo" : "Mono", audio_out_format_name(format));
10077
c1c35a94f695 Correct dumping hint (vc dummy faster than null).
ranma
parents: 9633
diff changeset
118 printf("PCM: Info: fastest dumping is achieved with -vc dummy -vo null\n"
5837
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
119 "PCM: Info: to write WAVE files use -waveheader (default); "
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
120 "for RAW PCM -nowaveheader.\n");
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
121
1112
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
122 fp = fopen(ao_outputfilename, "wb");
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
123 if(fp) {
9277
d824f1a3c341 The "initialize wav header with infinite lenght" broke the
arpi
parents: 9223
diff changeset
124 if(ao_pcm_waveheader){ /* Reserve space for wave header */
6501
827f08ddf044 Allow writing to pipe.
albeu
parents: 6237
diff changeset
125 fwrite(&wavhdr,sizeof(wavhdr),1,fp);
9277
d824f1a3c341 The "initialize wav header with infinite lenght" broke the
arpi
parents: 9223
diff changeset
126 wavhdr.file_length=wavhdr.data_length=0;
d824f1a3c341 The "initialize wav header with infinite lenght" broke the
arpi
parents: 9223
diff changeset
127 }
1112
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
128 return 1;
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
129 }
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
130 printf("PCM: Failed to open %s for writing!\n", ao_outputfilename);
1107
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
131 return 0;
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
132 }
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
133
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
134 // close audio device
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
135 static void uninit(){
1112
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
136
6501
827f08ddf044 Allow writing to pipe.
albeu
parents: 6237
diff changeset
137 if(ao_pcm_waveheader && fseek(fp, 0, SEEK_SET) == 0){ /* Write wave header */
4914
de4074ab4e5f good-looking fix by Tobias Diedrich <td@informatik.uni-hannover.de>
arpi
parents: 3095
diff changeset
138 wavhdr.file_length = wavhdr.data_length + sizeof(wavhdr) - 8;
5837
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
139 wavhdr.file_length = le2me_32(wavhdr.file_length);
6762
8411ea0d9078 endianess fix by Colin Leroy <colin@colino.net>
arpi
parents: 6501
diff changeset
140 wavhdr.data_length = le2me_32(wavhdr.data_length);
1112
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
141 fwrite(&wavhdr,sizeof(wavhdr),1,fp);
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
142 }
1107
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
143 fclose(fp);
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
144 }
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
145
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
146 // stop playing and empty buffers (for seeking/pause)
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
147 static void reset(){
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
148
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
149 }
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
150
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
151 // stop playing, keep buffers (for pause)
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
152 static void audio_pause()
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
153 {
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
154 // for now, just call reset();
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
155 reset();
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
156 }
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
157
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
158 // resume playing, after audio_pause()
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
159 static void audio_resume()
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
160 {
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
161 }
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
162
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
163 // return: how many bytes can be played without blocking
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
164 static int get_space(){
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
165
5837
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
166 if(vo_pts)
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
167 return ao_data.pts < vo_pts ? ao_data.outburst : 0;
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
168 return ao_data.outburst;
1107
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
169 }
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
170
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
171 // plays 'len' bytes of 'data'
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
172 // it should round it down to outburst*n
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
173 // return: number of bytes played
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
174 static int play(void* data,int len,int flags){
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
175
7658
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
176 // let libaf to do the conversion...
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
177 #if 0
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
178 //#ifdef WORDS_BIGENDIAN
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
179 if (ao_data.format == AFMT_S16_LE) {
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
180 unsigned short *buffer = (unsigned short *) data;
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
181 register int i;
5837
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
182 for(i = 0; i < len/2; ++i) {
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
183 buffer[i] = le2me_16(buffer[i]);
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
184 }
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
185 }
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
186 #endif
7658
65037d309de3 updated for libaf rules
arpi
parents: 6941
diff changeset
187
1107
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
188 //printf("PCM: Writing chunk!\n");
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
189 fwrite(data,len,1,fp);
5837
7e082f42497a - Fix for big apple architectures by Rogerio Brito, reworked by me to use bswap.h macros.
atmos4
parents: 4914
diff changeset
190
1112
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
191 if(ao_pcm_waveheader)
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
192 wavhdr.data_length += len;
b1cf1087ec33 Added support for writing wave files and specifying filename to write to.
atmosfear
parents: 1107
diff changeset
193
1107
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
194 return len;
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
195 }
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
196
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 1113
diff changeset
197 // return: delay in seconds between first and last sample in buffer
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 1113
diff changeset
198 static float get_delay(){
1107
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
199
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 1113
diff changeset
200 return 0.0;
1107
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
201 }
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
202
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
203
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
204
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
205
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
206
9d764880d989 Added raw PCM writer ao driver.
atmosfear
parents:
diff changeset
207