Aynı anda ses çaldırma

Merhaba, amacım 2 farklı harfe 1 saniye farkla bassam da farklı sesleri aynı anda çaldırma yani:
a harfine bastım 1 sesi çalmaya başladı
sonra b harfine bastım 2 sesi çalmaya başladı
ama bunların aynı anda çalmasını istiyorum.
MultiThreading ile denedim ancak birşey değişmedi.

Şöyle bir kod denedim:

import pynput
from pynput.keyboard import Key, Listener
import pygame
import threading


def on_press(key):

    def a():
        pygame.mixer.init()
        pygame.mixer.music.load("C:/Users/Ahmett/Desktop/balina.mp3")
        pygame.mixer.music.play()

    def b():
        pygame.mixer.init()
        pygame.mixer.music.load("C:/Users/Ahmett/Desktop/troll.mp3")
        pygame.mixer.music.play()


    if str(key) == "'a'":
        athreading = threading.Thread(target=a)
        athreading.start()


    if str(key) == "'b'":
        bthreading = threading.Thread(target=b)
        bthreading.start()


def on_release(key):
    if key == Key.esc:
        print("Çıkış yapılıyor")
        return False



with Listener(on_press = on_press, on_release = on_release) as listener:
    listener.join()

ancak b harfine bastığımda ses çalarken a harfine basarsam b harfindeki ses duruyor ve a harfindeki ses çalmaya başlıyor benim isteğim bu sesin durmaması ve aynı anda çalmaya devam etmeleri.
Pygame kullanmamın nedeni bildiğim kadarıyla sadece pygame .mp3 uzantılı sesleri çalabiliyor.

pygame.mixer.music yerine pygame.mixer.sound kullanıp dener misin.

Şu hatayı veriyor

Exception in thread Thread-2 (b):
Traceback (most recent call last):
  File "C:\Users\Ahmett\AppData\Local\Programs\Python\Python310\lib\threading.py", line 1009, in _bootstrap_inner
    self.run()
  File "C:\Users\Ahmett\AppData\Local\Programs\Python\Python310\lib\threading.py", line 946, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\Ahmett\PycharmProjects\Project\sj.py", line 17, in b
    pygame.mixer.Sound.load("C:/Users/Ahmett/Desktop/troll.mp3")
AttributeError: type object 'Sound' has no attribute 'load'

sound un load diye bir özelliğinin olmadığını söyluyor. Kodlarını da atar mısın?

Maalesef Load kodunu da silmeme rağmen şöyle bir hata veriyor:

Exception in thread Thread-2 (a):
Traceback (most recent call last):
  File "C:\Users\Ahmett\AppData\Local\Programs\Python\Python310\lib\threading.py", line 1009, in _bootstrap_inner
    self.run()
  File "C:\Users\Ahmett\AppData\Local\Programs\Python\Python310\lib\threading.py", line 946, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\Ahmett\PycharmProjects\Project\sjj.py", line 11, in a
    pygame.mixer.Sound.play("C:/Users/Ahmett/Desktop/balina.mp3")
TypeError: descriptor 'play' for 'Sound' objects doesn't apply to a 'str' object

Kod:

import pynput
from pynput.keyboard import Key, Listener
import pygame
import threading


def on_press(key):

    def a():
        pygame.mixer.init()
        pygame.mixer.Sound.play("C:/Users/Ahmett/Desktop/balina.mp3")

    def b():
        pygame.mixer.init()
        pygame.mixer.Sound.play("C:/Users/Ahmett/Desktop/troll.mp3")


    if str(key) == "'a'":
        athreading = threading.Thread(target=a)
        athreading.start()


    if str(key) == "'b'":
        bthreading = threading.Thread(target=b)
        bthreading.start()


def on_release(key):
    if key == Key.esc:
        print("Çıkış yapılıyor")
        return False


with Listener(on_press = on_press, on_release = on_release) as listener:
    listener.join()

Tüm kodu inceleyip, tüm kodu yazmadan pek kod paylaşmam doğrudan. Bu durumda ancak laf salatası yapacağım.

  1. Multithread çalışırken eğer daemon kullanmazsan thread bitmeden main çalışmaya devam edemez.

Nedense her google aramasında hep geeksforgeeks linki geliyor.

Python Daemon Threads - GeeksforGeeks

Daeomon nedir nasıl kullanılır bakman gerekir.

aslında thread.daemon= True yapmak kadar kolay.

python - threading ignores KeyboardInterrupt exception - Stack Overflow

Bu linkten de bakabilirsin.

  1. Aynı anda birden çok tuşa bastığında tuşları aynı anda algılamak isteyebilirsin.

keypress - How do I detect multiple keypresses in python all at the same time? - Stack Overflow

Her ikisi üzerinde düşünüp deneyerek çözüme ulaşabileceğine inanıyorum.

Kolay gelsin.

2 Beğeni