melody_bay/webaudio/
node.rs1#[allow(private_bounds)]
2pub trait AudioNodeHandle: private::AudioNodeHandlePrivate {}
3
4impl<T: private::AudioNodeHandlePrivate + ?Sized> AudioNodeHandle for T {}
5
6impl private::AudioNodeHandlePrivate for NodeId {
7 fn node_id(&self) -> NodeId {
8 *self
9 }
10}
11
12impl<T: private::AudioNodeHandlePrivate + ?Sized> private::AudioNodeHandlePrivate for &T {
13 fn node_id(&self) -> NodeId {
14 (*self).node_id()
15 }
16
17 fn context_identity(&self) -> Option<usize> {
18 (*self).context_identity()
19 }
20}
21
22#[derive(Clone)]
23pub struct AudioDestinationNode {
24 id: NodeId,
25 graph: Arc<Mutex<GraphInner>>,
26}
27
28impl fmt::Debug for AudioDestinationNode {
29 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
30 formatter
31 .debug_tuple("AudioDestinationNode")
32 .field(&self.id)
33 .finish()
34 }
35}
36
37impl private::AudioNodeHandlePrivate for AudioDestinationNode {
38 fn node_id(&self) -> NodeId {
39 self.id
40 }
41
42 fn context_identity(&self) -> Option<usize> {
43 Some(Arc::as_ptr(&self.graph) as usize)
44 }
45}
46
47impl From<AudioDestinationNode> for NodeId {
48 fn from(value: AudioDestinationNode) -> Self {
49 value.id
50 }
51}
52
53impl From<&AudioDestinationNode> for NodeId {
54 fn from(value: &AudioDestinationNode) -> Self {
55 value.id
56 }
57}
58
59impl AudioDestinationNode {
60 #[must_use]
61 pub fn max_channel_count(&self) -> usize {
62 node_channel_config(&self.graph, self.id).channel_count
63 }
64}
65
66#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
67pub(crate) struct ParamId {
68 node: NodeId,
69 param: ParamKind,
70}
71
72#[derive(Debug, Clone, Copy, PartialEq, Eq)]
73pub enum ChannelCountMode {
74 Max,
75 ClampedMax,
76 Explicit,
77}
78
79#[derive(Debug, Clone, Copy, PartialEq, Eq)]
80pub enum ChannelInterpretation {
81 Speakers,
82 Discrete,
83}
84
85#[derive(Debug, Clone, Copy, PartialEq, Eq)]
86pub struct AudioNodeInfo {
87 pub number_of_inputs: usize,
88 pub number_of_outputs: usize,
89 pub channel_count: usize,
90 pub channel_count_mode: ChannelCountMode,
91 pub channel_interpretation: ChannelInterpretation,
92}
93
94#[derive(Debug, Clone, Copy, PartialEq, Eq)]
95struct ChannelConfig {
96 channel_count: usize,
97 channel_count_mode: ChannelCountMode,
98 channel_interpretation: ChannelInterpretation,
99}
100
101impl Default for ChannelConfig {
102 fn default() -> Self {
103 Self {
104 channel_count: 2,
105 channel_count_mode: ChannelCountMode::Max,
106 channel_interpretation: ChannelInterpretation::Speakers,
107 }
108 }
109}
110