-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuffer_compat.mbt
More file actions
111 lines (99 loc) · 2.48 KB
/
Copy pathbuffer_compat.mbt
File metadata and controls
111 lines (99 loc) · 2.48 KB
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// Copyright 2026 International Digital Economy Academy
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
///|
pub struct StaticSamplesBuffer {
channels : ChannelCount
sample_rate : SampleRate
samples : Array[Sample]
cursor : Ref[Int]
}
///|
pub fn StaticSamplesBuffer::new(
channels : ChannelCount,
sample_rate : SampleRate,
samples : Array[Sample],
) -> StaticSamplesBuffer {
guard channels > 0 else { panic() }
guard sample_rate > 0 else { panic() }
{ channels, sample_rate, samples, cursor: @ref.new(0) }
}
///|
pub fn StaticSamplesBuffer::channels(
self : StaticSamplesBuffer,
) -> ChannelCount {
self.channels
}
///|
pub fn StaticSamplesBuffer::sample_rate(
self : StaticSamplesBuffer,
) -> SampleRate {
self.sample_rate
}
///|
pub fn StaticSamplesBuffer::next(self : StaticSamplesBuffer) -> Sample? {
if self.cursor.val >= self.samples.length() {
None
} else {
let v = self.samples[self.cursor.val]
self.cursor.val += 1
Some(v)
}
}
///|
pub impl Source for StaticSamplesBuffer with fn next(self : StaticSamplesBuffer) {
self.next()
}
///|
pub impl Source for StaticSamplesBuffer with fn channels(
self : StaticSamplesBuffer,
) {
self.channels()
}
///|
pub impl Source for StaticSamplesBuffer with fn sample_rate(
self : StaticSamplesBuffer,
) {
self.sample_rate()
}
///|
pub impl Source for StaticSamplesBuffer with fn current_span_len(
_self : StaticSamplesBuffer,
) {
None
}
///|
pub impl Source for StaticSamplesBuffer with fn total_duration(
self : StaticSamplesBuffer,
) {
duration_from_sample_count(
self.samples.length(),
self.channels(),
self.sample_rate(),
)
}
///|
pub impl Source for StaticSamplesBuffer with fn try_seek(
_self : StaticSamplesBuffer,
_pos : @moon_cpal.Duration,
) -> Unit raise SeekError {
raise NotSupported
}
///|
pub fn buffer_from_iter(
channels : ChannelCount,
sample_rate : SampleRate,
samples : Array[Sample],
) -> SamplesBuffer {
SamplesBuffer::new(channels, sample_rate, samples)
}