forked from hughpyle/inguz-DSPUtil
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Upsampler.cs
93 lines (90 loc) · 2.34 KB
/
Upsampler.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using System;
using System.Collections.Generic;
using System.Text;
/*
namespace DSPUtil
{
/// <summary>
/// A very basic up-sampler.
/// Includes gain.
/// </summary>
public class Upsampler:SoundObj
{
public Upsampler()
{
}
public override int Iterations
{
get
{
return (int)(base.Iterations * SampleRate / _input.SampleRate);
}
}
public override IEnumerator<ISample> Samples
{
get
{
if (_input == null)
{
throw new Exception("Null input");
}
uint srIn = _input.SampleRate;
uint srOut = SampleRate;
uint lcm = srOut / srIn; // MathUtil.gcd(srIn, srOut);
ushort nc = _input.NumChannels;
foreach (ISample s in _input)
{
for (int j = 0; j < nc; j++)
{
s[j] *= lcm;
}
yield return s;
for (int j = 1; j < lcm; j++)
{
yield return (nc == 2) ? new Sample2() : new Sample(nc) as ISample;
}
}
}
}
}
/// <summary>
/// A very basic down-sampler.
/// </summary>
public class Downsampler : SoundObj
{
public Downsampler()
{
}
public override int Iterations
{
get
{
return (int)(base.Iterations * _input.SampleRate / SampleRate);
}
}
public override IEnumerator<ISample> Samples
{
get
{
if (_input == null)
{
throw new Exception("Null input");
}
uint srIn = _input.SampleRate;
uint srOut = SampleRate;
uint lcm = srIn / srOut; // MathUtil.gcd(srIn, srOut);
uint j = lcm;
foreach (ISample s in _input)
{
if (j == 0)
{
yield return s;
j = lcm;
}
j--;
}
}
}
}
}
*/