| 226 | |
| 227 | |
| 228 | class Sound(Asset): |
| 229 | def __init__(self, |
| 230 | name: str = "pop", |
| 231 | file_name: str = "83a9787d4cb6f3b7632b4ddfebf74367.wav", |
| 232 | |
| 233 | rate: Optional[int] = None, |
| 234 | sample_count: Optional[int] = None, |
| 235 | _sprite: sprite.Sprite = build_defaulting.SPRITE_DEFAULT): |
| 236 | """ |
| 237 | A sound. An asset with additional properties |
| 238 | https://en.scratch-wiki.info/wiki/Scratch_File_Format#Sounds |
| 239 | """ |
| 240 | super().__init__(name, file_name, _sprite) |
| 241 | |
| 242 | self.rate = rate |
| 243 | self.sample_count = sample_count |
| 244 | |
| 245 | @staticmethod |
| 246 | def from_json(data): |
| 247 | """ |
| 248 | Load sound from project.json |
| 249 | """ |
| 250 | _asset_load = Asset.from_json(data) |
| 251 | |
| 252 | rate = data.get("rate") |
| 253 | sample_count = data.get("sampleCount") |
| 254 | return Sound(_asset_load.name, _asset_load.file_name, rate, sample_count) |
| 255 | |
| 256 | def to_json(self) -> dict: |
| 257 | """ |
| 258 | Convert Sound to project.json format |
| 259 | """ |
| 260 | _json = super().to_json() |
| 261 | commons.noneless_update(_json, { |
| 262 | "rate": self.rate, |
| 263 | "sampleCount": self.sample_count |
| 264 | }) |
| 265 | return _json |