Difference between revisions of "Playing multiple sounds at once"
Jump to navigation
Jump to search
Line 82: | Line 82: | ||
swmixer.init(samplerate=44100, chunksize=1024, stereo=False) | swmixer.init(samplerate=44100, chunksize=1024, stereo=False) | ||
swmixer.start() | swmixer.start() | ||
− | + | def play1(): | |
− | a = swmixer.Sound('/home/pi/laserharp-sounds/1.wav') | + | if(lightlevell > 800): |
− | swmixer.play(-1) | + | a = swmixer.Sound('/home/pi/laserharp-sounds/1.wav') |
+ | swmixer.play(-1) | ||
+ | def play2(): | ||
+ | if(lightlevel2 > 800): | ||
+ | a = swmixer.Sound('/home/pi/laserharp-sounds/1.wav') | ||
+ | swmixer.play(-1) | ||
+ | threads = [] | ||
+ | if __name__=='__main__': | ||
+ | threads.append(Thread(target = play1)) | ||
+ | threads.append(Thread(target = play2)) | ||
+ | for thread in threads: | ||
+ | thread.start() | ||
+ | for thread in threads: | ||
+ | thread.join() | ||
= Pygame with Channels = | = Pygame with Channels = |
Revision as of 21:34, 25 April 2019
Contents
Introduction
This tutorial will explain different methods attempted in getting multiple sounds to play concurrently, as well as the method that was most valuable.
Steps
- Pick wav files desired to be played.
- Load wav files in code and save it to a variable that can be called later.
- Find a line of code that will play the sound.
- Find a line of code that will allow the sound to be played while different notes are being played at the same time.
Libraries tested
- pydub
- multiprocessing
- multithreading
- swmixer
- pygame
Pydub and Pygame
These two libraries were used in finding the best way to play a sound by itself.
Using pydub:
from pydub import AudioSegment from pydub.playback import play sound = AudioSegment.from_wav('/home/pi/laserharp-sounds/samples/harpSound1.wav') play(sound)
Using pygame:
import pygame pygame.init() pygame.mixer.init() firstSound = pygame.mixer.music('/home/pi/laserharp-sounds/samples/ambi_dark.wav') secondSound = pygame.mixer.music('/home/pi/laserharp-sounds/samples/ambi_choir.wav') firstSound.play() secondSound.play()
Multiprocessing and Multithreading
Using Multiprocessing:
from multiprocessing import Process def play1(): if(lightlevell > 800): s = pygame.mixer.sound.load('/home/pi/laserharp-sounds/1.wav') pygame.mixer.sound.play(-1) def play2(): if(lightlevel2 > 800): s = pygame.mixer.sound.load('/home/pi/laserharp-sounds/2.wav') pygame.mixer.sound.play(-1) processes = [] if __name__=='__main__': processes.append(Process(target = play1)) processes.append(Process(target = play2)) for process in processes: process.start() for process in processes: process.join()
Using Multithreading:
from threading import Thread def play1(): if(lightlevell > 800): s = pygame.mixer.sound.load('/home/pi/laserharp-sounds/1.wav') pygame.mixer.sound.play(-1) def play2(): if(lightlevel2 > 800): s = pygame.mixer.sound.load('/home/pi/laserharp-sounds/2.wav') pygame.mixer.sound.play(-1) threads = [] if __name__=='__main__': threads.append(Thread(target = play1)) threads.append(Thread(target = play2)) for thread in threads: thread.start() for thread in threads: thread.join()
Multithreading with Swmixer
from threading import Thread import swmixer import os swmixer.init(samplerate=44100, chunksize=1024, stereo=False) swmixer.start() def play1(): if(lightlevell > 800): a = swmixer.Sound('/home/pi/laserharp-sounds/1.wav') swmixer.play(-1) def play2(): if(lightlevel2 > 800): a = swmixer.Sound('/home/pi/laserharp-sounds/1.wav') swmixer.play(-1) threads = [] if __name__=='__main__': threads.append(Thread(target = play1)) threads.append(Thread(target = play2)) for thread in threads: thread.start() for thread in threads: thread.join()