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 }