Data update
This commit is contained in:
parent
35bcdeebf8
commit
74c69a0df6
2427 changed files with 31826 additions and 3468 deletions
48
Task/Musical-scale/Python/musical-scale-2.py
Normal file
48
Task/Musical-scale/Python/musical-scale-2.py
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
import sys
|
||||
import ctypes
|
||||
import math
|
||||
import time
|
||||
import struct
|
||||
import sdl2
|
||||
import sdl2.sdlmixer as mixer
|
||||
|
||||
|
||||
def create_sound(frequency, duration):
|
||||
"""Create a buffer with sound at given frequency and duration"""
|
||||
num_samples = int(48000 * duration)
|
||||
wave = struct.pack(
|
||||
f"<{num_samples}i",
|
||||
*[
|
||||
int(2**30 * math.sin(2 * math.pi * frequency / 48000 * t))
|
||||
for t in range(num_samples)
|
||||
]
|
||||
)
|
||||
length = num_samples * 4
|
||||
sound_buffer = (ctypes.c_ubyte * length).from_buffer_copy(wave)
|
||||
sound = mixer.Mix_QuickLoad_RAW(
|
||||
ctypes.cast(sound_buffer, ctypes.POINTER(ctypes.c_ubyte)), length
|
||||
)
|
||||
return sound
|
||||
|
||||
|
||||
def main():
|
||||
"""Play sine wave"""
|
||||
mixer.Mix_Init(0)
|
||||
|
||||
mixer.Mix_OpenAudioDevice(48000, sdl2.AUDIO_S32, 1, 2048, None, 0)
|
||||
|
||||
note = 261.63
|
||||
semitone = math.pow(2, 1 / 12)
|
||||
duration = 0.5 # seconds
|
||||
|
||||
for step in [0, 2, 2, 1, 2, 2, 2, 1]:
|
||||
note *= semitone**step
|
||||
sound = create_sound(note, duration)
|
||||
mixer.Mix_PlayChannel(0, sound, 1)
|
||||
time.sleep(duration)
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Loading…
Add table
Add a link
Reference in a new issue