2 ** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
4 ** This program is free software; you can redistribute it and/or modify
5 ** it under the terms of the GNU General Public License as published by
6 ** the Free Software Foundation; either version 2 of the License, or
7 ** (at your option) any later version.
9 ** This program is distributed in the hope that it will be useful,
10 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 ** GNU General Public License for more details.
14 ** You should have received a copy of the GNU General Public License
15 ** along with this program; if not, write to the Free Software
16 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
34 #define BUFFER_SIZE (10000)
37 #define M_PI 3.14159265358979323846264338
40 static void dwvw_test (const char *filename
, int format
, int bit_width
) ;
45 dwvw_test ("dwvw12.raw", SF_FORMAT_RAW
| SF_FORMAT_DWVW_12
, 12) ;
46 dwvw_test ("dwvw16.raw", SF_FORMAT_RAW
| SF_FORMAT_DWVW_16
, 16) ;
47 dwvw_test ("dwvw24.raw", SF_FORMAT_RAW
| SF_FORMAT_DWVW_24
, 24) ;
53 dwvw_test (const char *filename
, int format
, int bit_width
)
54 { static int write_buf
[BUFFER_SIZE
] ;
55 static int read_buf
[BUFFER_SIZE
] ;
64 /* Only want to grab the top bit_width bits. */
65 bit_mask
= (-1 << (32 - bit_width
)) ;
67 print_test_name ("dwvw_test", filename
) ;
69 sf_info_setup (&sfinfo
, format
, 44100, 1) ;
71 file
= test_open_file_or_die (filename
, SFM_WRITE
, &sfinfo
, SF_TRUE
, __LINE__
) ;
73 /* Generate random.frames. */
74 for (k
= 0 ; k
< BUFFER_SIZE
/ 2 ; k
++)
75 { value
= 0x7FFFFFFF * sin (123.0 / sfinfo
.samplerate
* 2 * k
* M_PI
) ;
76 write_buf
[k
] = bit_mask
& lrint (value
) ;
79 for ( ; k
< BUFFER_SIZE
; k
++)
80 write_buf
[k
] = bit_mask
& ((rand () << 11) ^ (rand () >> 11)) ;
82 sf_write_int (file
, write_buf
, BUFFER_SIZE
) ;
85 file
= test_open_file_or_die (filename
, SFM_READ
, &sfinfo
, SF_TRUE
, __LINE__
) ;
87 if ((k
= sf_read_int (file
, read_buf
, BUFFER_SIZE
)) != BUFFER_SIZE
)
88 { printf ("Error (line %d) : Only read %d/%d.frames.\n", __LINE__
, k
, BUFFER_SIZE
) ;
92 for (k
= 0 ; k
< BUFFER_SIZE
; k
++)
93 { if (read_buf
[k
] != write_buf
[k
])
94 { printf ("Error (line %d) : %d != %d at position %d/%d\n", __LINE__
,
95 write_buf
[k
] >> (32 - bit_width
), read_buf
[k
] >> (32 - bit_width
),
97 oct_save_int (write_buf
, read_buf
, BUFFER_SIZE
) ;