chippymu 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chippymu-0.1.0/.gitignore +10 -0
- chippymu-0.1.0/.python-version +1 -0
- chippymu-0.1.0/PKG-INFO +8 -0
- chippymu-0.1.0/README.md +0 -0
- chippymu-0.1.0/pyproject.toml +20 -0
- chippymu-0.1.0/src/chippymu/__init__.py +0 -0
- chippymu-0.1.0/src/chippymu/channelgen.py +85 -0
- chippymu-0.1.0/src/chippymu/configs.py +28 -0
- chippymu-0.1.0/src/chippymu/models.py +27 -0
- chippymu-0.1.0/src/chippymu/sound.py +34 -0
- chippymu-0.1.0/src/chippymu/utils.py +168 -0
- chippymu-0.1.0/uv.lock +94 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|
chippymu-0.1.0/PKG-INFO
ADDED
chippymu-0.1.0/README.md
ADDED
|
File without changes
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "chippymu"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "一个用numpy实现的8bit音乐生成器"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
authors = [
|
|
7
|
+
{ name = "wolido", email = "270262953@qq.com" }
|
|
8
|
+
]
|
|
9
|
+
requires-python = ">=3.13"
|
|
10
|
+
dependencies = [
|
|
11
|
+
"numpy>=2.3.0",
|
|
12
|
+
"sounddevice>=0.5.2",
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
[project.scripts]
|
|
16
|
+
chippymu = "chippymu:main"
|
|
17
|
+
|
|
18
|
+
[build-system]
|
|
19
|
+
requires = ["hatchling"]
|
|
20
|
+
build-backend = "hatchling.build"
|
|
File without changes
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""
|
|
2
|
+
按通道生成音G
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
|
|
7
|
+
from chippymu.utils import basic_wave_gen, basic_drum_gen, note_to_freq
|
|
8
|
+
|
|
9
|
+
from numpy import ndarray
|
|
10
|
+
from chippymu.configs import BasicParams
|
|
11
|
+
from chippymu.models import DrumType, WaveType
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def generate_wave(
|
|
15
|
+
*, melody: list[tuple[float, int, float]], wave_type: WaveType, params: BasicParams
|
|
16
|
+
) -> ndarray:
|
|
17
|
+
"""
|
|
18
|
+
生成指定波形和旋律的通道
|
|
19
|
+
|
|
20
|
+
- 参数:
|
|
21
|
+
- melody: 旋律列表,每个元素为 (frequency, duration, amplitude)
|
|
22
|
+
- wave_type: 波形类型
|
|
23
|
+
- params: 基本参数
|
|
24
|
+
|
|
25
|
+
- 返回:
|
|
26
|
+
- 通道数据
|
|
27
|
+
"""
|
|
28
|
+
melody_beat: list[tuple[float, int, float]] = [
|
|
29
|
+
(start * params.beat_duration, note, dur * params.beat_duration)
|
|
30
|
+
for start, note, dur in melody
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
melody_audio = np.zeros(params.whole_duration)
|
|
34
|
+
|
|
35
|
+
for start, note, dur in melody_beat:
|
|
36
|
+
wave = basic_wave_gen(
|
|
37
|
+
wave_type=wave_type,
|
|
38
|
+
frequency=note_to_freq(note=note),
|
|
39
|
+
duration=dur,
|
|
40
|
+
sample_rate=params.sample_rate,
|
|
41
|
+
)
|
|
42
|
+
start_idx = int(start * params.sample_rate)
|
|
43
|
+
end_idx = start_idx + len(wave)
|
|
44
|
+
melody_audio[start_idx:end_idx] += wave
|
|
45
|
+
|
|
46
|
+
return melody_audio
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def generate_drums(
|
|
50
|
+
*, drums: list[tuple[float, str, float]], params: BasicParams
|
|
51
|
+
) -> ndarray:
|
|
52
|
+
"""
|
|
53
|
+
生成鼓声
|
|
54
|
+
|
|
55
|
+
- 参数:
|
|
56
|
+
- drums: 鼓声列表,每个元素是一个元组,包含起始时间,鼓声类型,持续时间
|
|
57
|
+
- params: 基础参数
|
|
58
|
+
|
|
59
|
+
- 返回:
|
|
60
|
+
- 通道数据
|
|
61
|
+
"""
|
|
62
|
+
drums_beat: list[tuple[float, str, float]] = [
|
|
63
|
+
(start * params.beat_duration, note, dur * params.beat_duration)
|
|
64
|
+
for start, note, dur in drums
|
|
65
|
+
]
|
|
66
|
+
|
|
67
|
+
drums_audio = np.zeros(params.whole_duration)
|
|
68
|
+
|
|
69
|
+
for start, note, dur in drums_beat:
|
|
70
|
+
try:
|
|
71
|
+
drum_type = DrumType(note)
|
|
72
|
+
except ValueError:
|
|
73
|
+
raise ValueError(f"无效的鼓类型名称: {note}")
|
|
74
|
+
|
|
75
|
+
wave = basic_drum_gen(
|
|
76
|
+
drum_type=drum_type,
|
|
77
|
+
duration=dur,
|
|
78
|
+
amplitude=1.0,
|
|
79
|
+
sample_rate=params.sample_rate,
|
|
80
|
+
)
|
|
81
|
+
start_idx = int(start * params.sample_rate)
|
|
82
|
+
end_idx = start_idx + len(wave)
|
|
83
|
+
drums_audio[start_idx:end_idx] += wave
|
|
84
|
+
|
|
85
|
+
return drums_audio
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""
|
|
2
|
+
基础参数的配置文件
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class BasicParams:
|
|
7
|
+
def __init__(self, *, sample_rate: int = 16000, bpm: int = 90, length: float):
|
|
8
|
+
# 定义采样率
|
|
9
|
+
self.sample_rate: int = sample_rate
|
|
10
|
+
# 定义BPM
|
|
11
|
+
self.bpm: int = bpm
|
|
12
|
+
# 定义音频总拍数
|
|
13
|
+
self.length: float = length
|
|
14
|
+
|
|
15
|
+
@property
|
|
16
|
+
def beat_duration(self) -> float:
|
|
17
|
+
"""
|
|
18
|
+
计算每拍的时长
|
|
19
|
+
"""
|
|
20
|
+
return 60.0 / self.bpm
|
|
21
|
+
|
|
22
|
+
@property
|
|
23
|
+
def whole_duration(self) -> int:
|
|
24
|
+
"""
|
|
25
|
+
计算音频矩阵总长
|
|
26
|
+
"""
|
|
27
|
+
return int(self.length * self.beat_duration * self.sample_rate)
|
|
28
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""
|
|
2
|
+
定义一些基础类型
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from enum import Enum
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class WaveType(str, Enum):
|
|
9
|
+
"""
|
|
10
|
+
几种波形
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
SINE = "sine"
|
|
14
|
+
SQUARE = "square"
|
|
15
|
+
TRIANGLE = "triangle"
|
|
16
|
+
SAWTOOTH = "sawtooth"
|
|
17
|
+
NOISE = "noise"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class DrumType(str, Enum):
|
|
21
|
+
"""
|
|
22
|
+
几种鼓声
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
KICK = "kick"
|
|
26
|
+
SNARE = "snare"
|
|
27
|
+
HIHAT = "hihat"
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""
|
|
2
|
+
后处理和音频播放
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import sounddevice as sd # type: ignore
|
|
6
|
+
import numpy as np
|
|
7
|
+
|
|
8
|
+
from numpy import ndarray
|
|
9
|
+
|
|
10
|
+
from chippymu.configs import BasicParams
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def post_processing(channels: list[ndarray], volumes: list[float]) -> ndarray:
|
|
14
|
+
"""
|
|
15
|
+
后处理过程,包括音量控制、混音、裁剪、量化
|
|
16
|
+
"""
|
|
17
|
+
if len(channels) != len(volumes):
|
|
18
|
+
raise ValueError("channels和volumes长度不一致")
|
|
19
|
+
|
|
20
|
+
mix = np.zeros_like(channels[0])
|
|
21
|
+
for i in range(len(channels)):
|
|
22
|
+
mix += channels[i] * volumes[i]
|
|
23
|
+
|
|
24
|
+
mix = np.clip(mix, -1, 1)
|
|
25
|
+
|
|
26
|
+
mix_8bit = np.round(mix * 127).astype(np.int8)
|
|
27
|
+
|
|
28
|
+
return mix_8bit
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def play(data: ndarray, params: BasicParams):
|
|
32
|
+
sd.play(data=data, samplerate=params.sample_rate)
|
|
33
|
+
sd.wait()
|
|
34
|
+
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"""
|
|
2
|
+
基础工具
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
|
|
7
|
+
from chippymu.models import DrumType, WaveType
|
|
8
|
+
from numpy import ndarray
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def note_to_freq(*, note: int) -> float:
|
|
12
|
+
"""
|
|
13
|
+
将 MIDI 音符编号转换为频率 (Hz)
|
|
14
|
+
|
|
15
|
+
- 参数
|
|
16
|
+
- note: MIDI 音符编号
|
|
17
|
+
|
|
18
|
+
- 返回
|
|
19
|
+
- 频率 (Hz)
|
|
20
|
+
"""
|
|
21
|
+
return 440 * 2 ** ((note - 69) / 12)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def basic_wave_gen(
|
|
25
|
+
*,
|
|
26
|
+
wave_type: WaveType,
|
|
27
|
+
frequency: float,
|
|
28
|
+
duration: float,
|
|
29
|
+
amplitude: float = 1.0,
|
|
30
|
+
duty_cycle: float = 0.5,
|
|
31
|
+
sample_rate: int = 16000,
|
|
32
|
+
) -> ndarray:
|
|
33
|
+
"""
|
|
34
|
+
生成指定类型的波形数组。
|
|
35
|
+
|
|
36
|
+
- 参数:
|
|
37
|
+
- wave_type: 波形的类型,可以是 "sine"、"square"、"triangle"、"sawtooth" 或 "noise"。
|
|
38
|
+
- frequency: 波形的频率,单位为赫兹(Hz)。
|
|
39
|
+
- duration: 波形的持续时间,单位为秒(s)。
|
|
40
|
+
- amplitude: 波形的振幅,范围从 0 到 1。
|
|
41
|
+
- duty_cycle: Square 波形的占空比,范围从 0 到 1。
|
|
42
|
+
- sample_rate: 采样率,单位为赫兹(Hz),默认为16000,使用时可能从Params中获取。
|
|
43
|
+
|
|
44
|
+
- 返回:
|
|
45
|
+
- 一个包含波形数据的 NumPy 数组。
|
|
46
|
+
"""
|
|
47
|
+
t: ndarray = np.linspace(
|
|
48
|
+
start=0, stop=duration, num=int(sample_rate * duration), endpoint=False
|
|
49
|
+
)
|
|
50
|
+
phase: ndarray = (t * frequency) % 1
|
|
51
|
+
|
|
52
|
+
match wave_type:
|
|
53
|
+
case WaveType.SINE:
|
|
54
|
+
return amplitude * np.sin(2 * np.pi * frequency * t)
|
|
55
|
+
case WaveType.SQUARE:
|
|
56
|
+
return amplitude * np.where(phase < duty_cycle, 1, -1)
|
|
57
|
+
case WaveType.TRIANGLE:
|
|
58
|
+
return amplitude * np.where(phase < 0.5, -1 + 4 * phase, 3 - 4 * phase)
|
|
59
|
+
case WaveType.SAWTOOTH:
|
|
60
|
+
return amplitude * (2 * phase - 1)
|
|
61
|
+
case WaveType.NOISE:
|
|
62
|
+
return amplitude * (2 * np.random.rand(len(t)) - 1)
|
|
63
|
+
case _:
|
|
64
|
+
raise ValueError("未知波形类型")
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def generate_kick(
|
|
68
|
+
*,
|
|
69
|
+
duration: float,
|
|
70
|
+
amplitude: float = 1.0,
|
|
71
|
+
sample_rate: int = 16000,
|
|
72
|
+
) -> ndarray:
|
|
73
|
+
"""
|
|
74
|
+
生成底鼓声音,低频正弦波带衰减。
|
|
75
|
+
|
|
76
|
+
- 参数:
|
|
77
|
+
- duration: 持续时间,单位秒
|
|
78
|
+
- frequency: 频率,单位赫兹
|
|
79
|
+
- amplitude: 振幅,范围0~1
|
|
80
|
+
- sample_rate: 采样率,默认16000
|
|
81
|
+
|
|
82
|
+
- 返回:
|
|
83
|
+
- 音频数据,ndarray
|
|
84
|
+
"""
|
|
85
|
+
frequency: int = 50
|
|
86
|
+
t: ndarray = np.linspace(0, duration, int(sample_rate * duration), endpoint=False)
|
|
87
|
+
envelope: ndarray = np.exp(-10 * t) # 衰减
|
|
88
|
+
return amplitude * envelope * np.sin(2 * np.pi * frequency * t)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def generate_snare(
|
|
92
|
+
*, duration: float, amplitude: float = 1.0, sample_rate: int = 16000
|
|
93
|
+
) -> ndarray:
|
|
94
|
+
"""
|
|
95
|
+
生成军鼓声音,噪声带衰减。
|
|
96
|
+
|
|
97
|
+
- 参数:
|
|
98
|
+
- duration: 持续时间,单位秒
|
|
99
|
+
- amplitude: 振幅,范围0~1
|
|
100
|
+
- sample_rate: 采样率,默认16000
|
|
101
|
+
|
|
102
|
+
- 返回:
|
|
103
|
+
- 音频数据,ndarray
|
|
104
|
+
"""
|
|
105
|
+
t: ndarray = np.linspace(0, duration, int(sample_rate * duration), endpoint=False)
|
|
106
|
+
noise: ndarray = 2 * np.random.rand(len(t)) - 1
|
|
107
|
+
envelope: ndarray = np.exp(-20 * t)
|
|
108
|
+
return amplitude * envelope * noise
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def generate_hihat(
|
|
112
|
+
*, duration: float, amplitude: float = 1.0, sample_rate: int = 16000
|
|
113
|
+
) -> ndarray:
|
|
114
|
+
"""
|
|
115
|
+
生成踩镲声音,短噪声带快速衰减。
|
|
116
|
+
|
|
117
|
+
- 参数:
|
|
118
|
+
- duration: 持续时间,单位秒
|
|
119
|
+
- amplitude: 音量
|
|
120
|
+
- sample_rate: 采样率,默认16000
|
|
121
|
+
|
|
122
|
+
- 返回:
|
|
123
|
+
- 噪声, ndarray
|
|
124
|
+
"""
|
|
125
|
+
t: ndarray = np.linspace(0, duration, int(sample_rate * duration), endpoint=False)
|
|
126
|
+
noise: ndarray = 2 * np.random.rand(len(t)) - 1
|
|
127
|
+
envelope: ndarray = np.exp(-50 * t)
|
|
128
|
+
return amplitude * envelope * noise
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def basic_drum_gen(
|
|
132
|
+
*,
|
|
133
|
+
drum_type: DrumType,
|
|
134
|
+
frequency: int = 50,
|
|
135
|
+
duration: float,
|
|
136
|
+
amplitude: float = 1.0,
|
|
137
|
+
sample_rate: int = 16000,
|
|
138
|
+
) -> ndarray:
|
|
139
|
+
"""
|
|
140
|
+
生成基本鼓声
|
|
141
|
+
|
|
142
|
+
- 参数:
|
|
143
|
+
- drum_type: 鼓声类型
|
|
144
|
+
- frequency: 频率,单位赫兹
|
|
145
|
+
- duration: 持续时间,单位秒
|
|
146
|
+
- amplitude: 振幅,范围0~1
|
|
147
|
+
- sample_rate: 采样率,单位赫兹
|
|
148
|
+
|
|
149
|
+
- 返回:
|
|
150
|
+
- 音频数据,ndarray
|
|
151
|
+
"""
|
|
152
|
+
match drum_type:
|
|
153
|
+
case DrumType.KICK:
|
|
154
|
+
return generate_kick(
|
|
155
|
+
duration=duration,
|
|
156
|
+
amplitude=amplitude,
|
|
157
|
+
sample_rate=sample_rate,
|
|
158
|
+
)
|
|
159
|
+
case DrumType.SNARE:
|
|
160
|
+
return generate_snare(
|
|
161
|
+
duration=duration, amplitude=amplitude, sample_rate=sample_rate
|
|
162
|
+
)
|
|
163
|
+
case DrumType.HIHAT:
|
|
164
|
+
return generate_hihat(
|
|
165
|
+
duration=duration, amplitude=amplitude, sample_rate=sample_rate
|
|
166
|
+
)
|
|
167
|
+
case _:
|
|
168
|
+
raise ValueError("未知鼓类型")
|
chippymu-0.1.0/uv.lock
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
version = 1
|
|
2
|
+
revision = 2
|
|
3
|
+
requires-python = ">=3.13"
|
|
4
|
+
|
|
5
|
+
[[package]]
|
|
6
|
+
name = "cffi"
|
|
7
|
+
version = "1.17.1"
|
|
8
|
+
source = { registry = "https://pypi.org/simple" }
|
|
9
|
+
dependencies = [
|
|
10
|
+
{ name = "pycparser" },
|
|
11
|
+
]
|
|
12
|
+
sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" }
|
|
13
|
+
wheels = [
|
|
14
|
+
{ url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload-time = "2024-09-04T20:44:28.956Z" },
|
|
15
|
+
{ url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload-time = "2024-09-04T20:44:30.289Z" },
|
|
16
|
+
{ url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload-time = "2024-09-04T20:44:32.01Z" },
|
|
17
|
+
{ url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload-time = "2024-09-04T20:44:33.606Z" },
|
|
18
|
+
{ url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload-time = "2024-09-04T20:44:35.191Z" },
|
|
19
|
+
{ url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload-time = "2024-09-04T20:44:36.743Z" },
|
|
20
|
+
{ url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload-time = "2024-09-04T20:44:38.492Z" },
|
|
21
|
+
{ url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload-time = "2024-09-04T20:44:40.046Z" },
|
|
22
|
+
{ url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload-time = "2024-09-04T20:44:41.616Z" },
|
|
23
|
+
{ url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload-time = "2024-09-04T20:44:43.733Z" },
|
|
24
|
+
{ url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" },
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
[[package]]
|
|
28
|
+
name = "chippymu"
|
|
29
|
+
version = "0.1.0"
|
|
30
|
+
source = { editable = "." }
|
|
31
|
+
dependencies = [
|
|
32
|
+
{ name = "numpy" },
|
|
33
|
+
{ name = "sounddevice" },
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
[package.metadata]
|
|
37
|
+
requires-dist = [
|
|
38
|
+
{ name = "numpy", specifier = ">=2.3.0" },
|
|
39
|
+
{ name = "sounddevice", specifier = ">=0.5.2" },
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
[[package]]
|
|
43
|
+
name = "numpy"
|
|
44
|
+
version = "2.3.0"
|
|
45
|
+
source = { registry = "https://pypi.org/simple" }
|
|
46
|
+
sdist = { url = "https://files.pythonhosted.org/packages/f3/db/8e12381333aea300890829a0a36bfa738cac95475d88982d538725143fd9/numpy-2.3.0.tar.gz", hash = "sha256:581f87f9e9e9db2cba2141400e160e9dd644ee248788d6f90636eeb8fd9260a6", size = 20382813, upload-time = "2025-06-07T14:54:32.608Z" }
|
|
47
|
+
wheels = [
|
|
48
|
+
{ url = "https://files.pythonhosted.org/packages/73/fc/1d67f751fd4dbafc5780244fe699bc4084268bad44b7c5deb0492473127b/numpy-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5754ab5595bfa2c2387d241296e0381c21f44a4b90a776c3c1d39eede13a746a", size = 20889633, upload-time = "2025-06-07T14:44:06.839Z" },
|
|
49
|
+
{ url = "https://files.pythonhosted.org/packages/e8/95/73ffdb69e5c3f19ec4530f8924c4386e7ba097efc94b9c0aff607178ad94/numpy-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d11fa02f77752d8099573d64e5fe33de3229b6632036ec08f7080f46b6649959", size = 14151683, upload-time = "2025-06-07T14:44:28.847Z" },
|
|
50
|
+
{ url = "https://files.pythonhosted.org/packages/64/d5/06d4bb31bb65a1d9c419eb5676173a2f90fd8da3c59f816cc54c640ce265/numpy-2.3.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:aba48d17e87688a765ab1cd557882052f238e2f36545dfa8e29e6a91aef77afe", size = 5102683, upload-time = "2025-06-07T14:44:38.417Z" },
|
|
51
|
+
{ url = "https://files.pythonhosted.org/packages/12/8b/6c2cef44f8ccdc231f6b56013dff1d71138c48124334aded36b1a1b30c5a/numpy-2.3.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4dc58865623023b63b10d52f18abaac3729346a7a46a778381e0e3af4b7f3beb", size = 6640253, upload-time = "2025-06-07T14:44:49.359Z" },
|
|
52
|
+
{ url = "https://files.pythonhosted.org/packages/62/aa/fca4bf8de3396ddb59544df9b75ffe5b73096174de97a9492d426f5cd4aa/numpy-2.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:df470d376f54e052c76517393fa443758fefcdd634645bc9c1f84eafc67087f0", size = 14258658, upload-time = "2025-06-07T14:45:10.156Z" },
|
|
53
|
+
{ url = "https://files.pythonhosted.org/packages/1c/12/734dce1087eed1875f2297f687e671cfe53a091b6f2f55f0c7241aad041b/numpy-2.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:87717eb24d4a8a64683b7a4e91ace04e2f5c7c77872f823f02a94feee186168f", size = 16628765, upload-time = "2025-06-07T14:45:35.076Z" },
|
|
54
|
+
{ url = "https://files.pythonhosted.org/packages/48/03/ffa41ade0e825cbcd5606a5669962419528212a16082763fc051a7247d76/numpy-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d8fa264d56882b59dcb5ea4d6ab6f31d0c58a57b41aec605848b6eb2ef4a43e8", size = 15564335, upload-time = "2025-06-07T14:45:58.797Z" },
|
|
55
|
+
{ url = "https://files.pythonhosted.org/packages/07/58/869398a11863310aee0ff85a3e13b4c12f20d032b90c4b3ee93c3b728393/numpy-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e651756066a0eaf900916497e20e02fe1ae544187cb0fe88de981671ee7f6270", size = 18360608, upload-time = "2025-06-07T14:46:25.687Z" },
|
|
56
|
+
{ url = "https://files.pythonhosted.org/packages/2f/8a/5756935752ad278c17e8a061eb2127c9a3edf4ba2c31779548b336f23c8d/numpy-2.3.0-cp313-cp313-win32.whl", hash = "sha256:e43c3cce3b6ae5f94696669ff2a6eafd9a6b9332008bafa4117af70f4b88be6f", size = 6310005, upload-time = "2025-06-07T14:50:13.138Z" },
|
|
57
|
+
{ url = "https://files.pythonhosted.org/packages/08/60/61d60cf0dfc0bf15381eaef46366ebc0c1a787856d1db0c80b006092af84/numpy-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:81ae0bf2564cf475f94be4a27ef7bcf8af0c3e28da46770fc904da9abd5279b5", size = 12729093, upload-time = "2025-06-07T14:50:31.82Z" },
|
|
58
|
+
{ url = "https://files.pythonhosted.org/packages/66/31/2f2f2d2b3e3c32d5753d01437240feaa32220b73258c9eef2e42a0832866/numpy-2.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:c8738baa52505fa6e82778580b23f945e3578412554d937093eac9205e845e6e", size = 9885689, upload-time = "2025-06-07T14:50:47.888Z" },
|
|
59
|
+
{ url = "https://files.pythonhosted.org/packages/f1/89/c7828f23cc50f607ceb912774bb4cff225ccae7131c431398ad8400e2c98/numpy-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:39b27d8b38942a647f048b675f134dd5a567f95bfff481f9109ec308515c51d8", size = 20986612, upload-time = "2025-06-07T14:46:56.077Z" },
|
|
60
|
+
{ url = "https://files.pythonhosted.org/packages/dd/46/79ecf47da34c4c50eedec7511e53d57ffdfd31c742c00be7dc1d5ffdb917/numpy-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0eba4a1ea88f9a6f30f56fdafdeb8da3774349eacddab9581a21234b8535d3d3", size = 14298953, upload-time = "2025-06-07T14:47:18.053Z" },
|
|
61
|
+
{ url = "https://files.pythonhosted.org/packages/59/44/f6caf50713d6ff4480640bccb2a534ce1d8e6e0960c8f864947439f0ee95/numpy-2.3.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0f1f11d0a1da54927436505a5a7670b154eac27f5672afc389661013dfe3d4f", size = 5225806, upload-time = "2025-06-07T14:47:27.524Z" },
|
|
62
|
+
{ url = "https://files.pythonhosted.org/packages/a6/43/e1fd1aca7c97e234dd05e66de4ab7a5be54548257efcdd1bc33637e72102/numpy-2.3.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:690d0a5b60a47e1f9dcec7b77750a4854c0d690e9058b7bef3106e3ae9117808", size = 6735169, upload-time = "2025-06-07T14:47:38.057Z" },
|
|
63
|
+
{ url = "https://files.pythonhosted.org/packages/84/89/f76f93b06a03177c0faa7ca94d0856c4e5c4bcaf3c5f77640c9ed0303e1c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:8b51ead2b258284458e570942137155978583e407babc22e3d0ed7af33ce06f8", size = 14330701, upload-time = "2025-06-07T14:47:59.113Z" },
|
|
64
|
+
{ url = "https://files.pythonhosted.org/packages/aa/f5/4858c3e9ff7a7d64561b20580cf7cc5d085794bd465a19604945d6501f6c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:aaf81c7b82c73bd9b45e79cfb9476cb9c29e937494bfe9092c26aece812818ad", size = 16692983, upload-time = "2025-06-07T14:48:24.196Z" },
|
|
65
|
+
{ url = "https://files.pythonhosted.org/packages/08/17/0e3b4182e691a10e9483bcc62b4bb8693dbf9ea5dc9ba0b77a60435074bb/numpy-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f420033a20b4f6a2a11f585f93c843ac40686a7c3fa514060a97d9de93e5e72b", size = 15641435, upload-time = "2025-06-07T14:48:47.712Z" },
|
|
66
|
+
{ url = "https://files.pythonhosted.org/packages/4e/d5/463279fda028d3c1efa74e7e8d507605ae87f33dbd0543cf4c4527c8b882/numpy-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d344ca32ab482bcf8735d8f95091ad081f97120546f3d250240868430ce52555", size = 18433798, upload-time = "2025-06-07T14:49:14.866Z" },
|
|
67
|
+
{ url = "https://files.pythonhosted.org/packages/0e/1e/7a9d98c886d4c39a2b4d3a7c026bffcf8fbcaf518782132d12a301cfc47a/numpy-2.3.0-cp313-cp313t-win32.whl", hash = "sha256:48a2e8eaf76364c32a1feaa60d6925eaf32ed7a040183b807e02674305beef61", size = 6438632, upload-time = "2025-06-07T14:49:25.67Z" },
|
|
68
|
+
{ url = "https://files.pythonhosted.org/packages/fe/ab/66fc909931d5eb230107d016861824f335ae2c0533f422e654e5ff556784/numpy-2.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ba17f93a94e503551f154de210e4d50c5e3ee20f7e7a1b5f6ce3f22d419b93bb", size = 12868491, upload-time = "2025-06-07T14:49:44.898Z" },
|
|
69
|
+
{ url = "https://files.pythonhosted.org/packages/ee/e8/2c8a1c9e34d6f6d600c83d5ce5b71646c32a13f34ca5c518cc060639841c/numpy-2.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f14e016d9409680959691c109be98c436c6249eaf7f118b424679793607b5944", size = 9935345, upload-time = "2025-06-07T14:50:02.311Z" },
|
|
70
|
+
]
|
|
71
|
+
|
|
72
|
+
[[package]]
|
|
73
|
+
name = "pycparser"
|
|
74
|
+
version = "2.22"
|
|
75
|
+
source = { registry = "https://pypi.org/simple" }
|
|
76
|
+
sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" }
|
|
77
|
+
wheels = [
|
|
78
|
+
{ url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" },
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
[[package]]
|
|
82
|
+
name = "sounddevice"
|
|
83
|
+
version = "0.5.2"
|
|
84
|
+
source = { registry = "https://pypi.org/simple" }
|
|
85
|
+
dependencies = [
|
|
86
|
+
{ name = "cffi" },
|
|
87
|
+
]
|
|
88
|
+
sdist = { url = "https://files.pythonhosted.org/packages/91/a6/91e9f08ed37c7c9f56b5227c6aea7f2ae63ba2d59520eefb24e82cbdd589/sounddevice-0.5.2.tar.gz", hash = "sha256:c634d51bd4e922d6f0fa5e1a975cc897c947f61d31da9f79ba7ea34dff448b49", size = 53150, upload-time = "2025-05-16T18:12:27.339Z" }
|
|
89
|
+
wheels = [
|
|
90
|
+
{ url = "https://files.pythonhosted.org/packages/75/2d/582738fc01352a5bc20acac9221e58538365cecb3bb264838f66419df219/sounddevice-0.5.2-py3-none-any.whl", hash = "sha256:82375859fac2e73295a4ab3fc60bd4782743157adc339561c1f1142af472f505", size = 32450, upload-time = "2025-05-16T18:12:21.919Z" },
|
|
91
|
+
{ url = "https://files.pythonhosted.org/packages/3f/6f/e3dd751face4fcb5be25e8abba22f25d8e6457ebd7e9ed79068b768dc0e5/sounddevice-0.5.2-py3-none-macosx_10_6_x86_64.macosx_10_6_universal2.whl", hash = "sha256:943f27e66037d41435bdd0293454072cdf657b594c9cde63cd01ee3daaac7ab3", size = 108088, upload-time = "2025-05-16T18:12:23.146Z" },
|
|
92
|
+
{ url = "https://files.pythonhosted.org/packages/45/0b/bfad79af0b380aa7c0bfe73e4b03e0af45354a48ad62549489bd7696c5b0/sounddevice-0.5.2-py3-none-win32.whl", hash = "sha256:3a113ce614a2c557f14737cb20123ae6298c91fc9301eb014ada0cba6d248c5f", size = 312665, upload-time = "2025-05-16T18:12:24.726Z" },
|
|
93
|
+
{ url = "https://files.pythonhosted.org/packages/e1/3e/61d88e6b0a7383127cdc779195cb9d83ebcf11d39bc961de5777e457075e/sounddevice-0.5.2-py3-none-win_amd64.whl", hash = "sha256:e18944b767d2dac3771a7771bdd7ff7d3acd7d334e72c4bedab17d1aed5dbc22", size = 363808, upload-time = "2025-05-16T18:12:26Z" },
|
|
94
|
+
]
|