blob: 7af75b246349229db1a265699f420d6ed4509eea (
plain) (
blame)
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
|
#include "main.h"
#include "AudioLayer.h"
unsigned long AudioFormat::AudioSamplesToMilliseconds(unsigned long samples)
{
return MulDiv(samples, 1000, SampleRate());
}
unsigned long AudioFormat::AudioBytesToMilliseconds(unsigned long bytes)
{
return MulDiv(AudioBytesToSamples(bytes), 1000, SampleRate());
}
unsigned long AudioFormat::AudioMillisecondsToBytes(DWORD milliseconds)
{
return AudioSamplesToBytes(MulDiv(milliseconds, SampleRate(), 1000));
}
unsigned long AudioFormat::AudioDurationToBytes(QWORD duration)
{
// TODO: potential integer overflow
return AudioSamplesToBytes(MulDiv((int)duration, SampleRate(), 1000*10000));
}
unsigned long AudioFormat::AudioBytesToSamples(unsigned long bytes)
{
return bytes / waveFormat->Format.nBlockAlign;
}
unsigned long AudioFormat::AudioSamplesToBytes(unsigned long samples)
{
return samples * waveFormat->Format.nBlockAlign;
}
long AudioFormat::Channels()
{
return waveFormat->Format.nChannels;
}
long AudioFormat::ValidBits()
{
if (waveFormat->Format.wFormatTag == WAVE_FORMAT_PCM)
{
return waveFormat->Format.wBitsPerSample;
}
if (waveFormat->Format.wFormatTag == WAVE_FORMAT_EXTENSIBLE)
{
return waveFormat->Samples.wValidBitsPerSample;
}
return 0;
}
long AudioFormat::BitSize()
{
return waveFormat->Format.wBitsPerSample;
}
long AudioFormat::SampleRate()
{
return waveFormat->Format.nSamplesPerSec;
}
|