1 module pxtone.noise;
2 
3 // '12/03/29
4 
5 import pxtone.descriptor;
6 
7 import pxtone.pulse.noisebuilder;
8 import pxtone.pulse.noise;
9 import pxtone.pulse.pcm;
10 import pxtone.error;
11 
12 struct pxtoneNoise {
13 	private pxtnPulse_NoiseBuilder _bldr;
14 	private int _ch_num = 2;
15 	private int _sps = 44100;
16 	private int _bps = 16;
17 
18 	bool quality_set(int ch_num, int sps, int bps) nothrow @safe {
19 		switch (ch_num) {
20 		case 1:
21 		case 2:
22 			break;
23 		default:
24 			return false;
25 		}
26 
27 		switch (sps) {
28 		case 48000:
29 		case 44100:
30 		case 22050:
31 		case 11025:
32 			break;
33 		default:
34 			return false;
35 		}
36 
37 		switch (bps) {
38 		case 8:
39 		case 16:
40 			break;
41 		default:
42 			return false;
43 		}
44 
45 		_ch_num = ch_num;
46 		_bps = bps;
47 		_sps = sps;
48 
49 		return false;
50 	}
51 
52 	void quality_get(out int p_ch_num, out int p_sps, out int p_bps) const nothrow @safe {
53 		if (p_ch_num) {
54 			p_ch_num = _ch_num;
55 		}
56 		if (p_sps) {
57 			p_sps = _sps;
58 		}
59 		if (p_bps) {
60 			p_bps = _bps;
61 		}
62 	}
63 
64 	void generate(ref pxtnDescriptor p_doc, out void[] pp_buf, out int p_size) const @system {
65 		pxtnPulse_Noise noise;
66 
67 		noise.read(p_doc);
68 		pxtnPulse_PCM pcm = _bldr.BuildNoise(noise, _ch_num, _sps, _bps);
69 
70 		p_size = pcm.get_buf_size();
71 		pp_buf = pcm.Devolve_SamplingBuffer();
72 	}
73 }