Jak mogę odtworzyć dźwięk (byłby to 1-sekundowy dźwięk) ze skryptu Python?
Najlepiej byłoby, gdyby był niezależny od platformy, ale najpierw musi działać na komputerze Mac.
Wiem, że mógłbym po prostu wykonać afplay file.mp3
polecenie z poziomu Pythona, ale czy można to zrobić w surowym Pythonie? Byłbym też lepszy, gdyby nie polegał na zewnętrznych bibliotekach.
Odpowiedzi:
Informacje o dźwięku w języku Python można znaleźć tutaj: http://wiki.python.org/moin/Audio/
Nie wygląda na to, że może odtwarzać pliki .mp3 bez zewnętrznych bibliotek. Możesz albo przekonwertować plik .mp3 do formatu .wav lub innego, albo użyć biblioteki takiej jak PyMedia .
źródło
.wav
plik?Najlepszym rozwiązaniem jest prawdopodobnie użycie pygame / SDL . Jest to biblioteka zewnętrzna, ale ma świetne wsparcie na różnych platformach.
Bardziej szczegółową dokumentację dotyczącą obsługi miksera audio można znaleźć w dokumentacji pygame.mixer.music
źródło
time.sleep(5)
na końcu i zadziałało. Python 3.6 w systemie Windows 8.1Spójrz na Simpleaudio , która jest stosunkowo nową i lekką biblioteką do tego celu:
Następnie:
Upewnij się, że używasz nieskompresowanych 16-bitowych plików PCM.
źródło
Spróbuj playound, który jest wieloplatformowym, wieloplatformowym modułem z pojedynczym modułem funkcyjnym w Pure Python, bez zależności od odtwarzania dźwięków.
Zainstaluj przez pip:
Po zainstalowaniu możesz go używać w następujący sposób:
źródło
playsound
. Właśnie przetestowałem tutaj kilka rozwiązań i ten zadziałał dla mnie najłatwiej. Niestetypygame
rozwiązanie u mnie nie zadziałało podczas krótkiego testu.W pydub ostatnio zdecydowaliśmy się na użycie ffplay (przez podproces) z zestawu narzędzi ffmpeg, który wewnętrznie używa SDL.
Działa do naszych celów - głównie po prostu ułatwia testowanie wyników kodu pydub w trybie interaktywnym - ale ma swoje wady, takie jak spowodowanie pojawienia się nowego programu w stacji dokującej na Macu.
Powyżej połączyłem implementację, ale następuje uproszczona wersja:
-nodisp
Flag zatrzymuje ffplay od pokazując nowe okno, a-autoexit
flaga powoduje ffplay do wyjścia i zwracają kod stanu, gdy plik audio odbywa się gra.edit : pydub używa teraz pyaudio do odtwarzania po zainstalowaniu i wraca do ffplay, aby uniknąć wad, o których wspomniałem. Powyższy link pokazuje również tę implementację.
źródło
Przepraszamy za spóźnioną odpowiedź, ale myślę, że to dobre miejsce na reklamowanie mojej biblioteki ...
AFAIK, standardowa biblioteka ma tylko jeden moduł do odtwarzania dźwięku: ossaudiodev . Niestety działa to tylko w Linuksie i FreeBSD.
AKTUALIZACJA: Jest też wygrana , ale oczywiście jest to również specyficzne dla platformy.
Aby uzyskać coś bardziej niezależnego od platformy, musisz użyć biblioteki zewnętrznej.
Moją rekomendacją jest moduł sounddevice (ale uwaga, ja jestem jego autorem).
Pakiet zawiera wstępnie skompilowaną bibliotekę PortAudio dla systemów Mac OS X i Windows i można go łatwo zainstalować za pomocą:
Może odtwarzać dźwięk z tablic NumPy, ale może również używać zwykłych buforów Pythona (jeśli NumPy nie jest dostępny).
Aby odtworzyć tablicę NumPy, to wszystko, czego potrzebujesz (zakładając, że dane audio mają częstotliwość próbkowania 44100 Hz):
Aby uzyskać więcej informacji, zapoznaj się z dokumentacją .
Nie może czytać / zapisywać plików dźwiękowych, będziesz potrzebować do tego osobnej biblioteki.
źródło
Możesz to zobaczyć: http://www.speech.kth.se/snack/
źródło
Odpowiedź Aarona wydaje się być około 10 razy bardziej skomplikowana niż to konieczne. Po prostu zrób to, jeśli potrzebujesz tylko odpowiedzi działającej w systemie OS X:
Jedna rzecz ... to wraca natychmiast. Więc możesz to również zrobić, jeśli chcesz, aby połączenie było blokowane do momentu zakończenia odtwarzania dźwięku.
Edycja: wziąłem tę funkcję i połączyłem ją z wariantami dla Windows i Linux. Rezultatem jest czysty, Pythonowy , wieloplatformowy moduł bez zależności o nazwie playsound . Przesłałem to do pypi.
Następnie uruchom to w ten sposób:
Pliki MP3 działają również na OS X. WAV powinien działać na wszystkich platformach. Nie wiem, jakie inne kombinacje platformy / formatu pliku działają lub nie działają - jeszcze ich nie wypróbowałem.
źródło
playsound
module, który napisałem? Nie testowałem tego na niczym nowszym niż Python 2.7.11 ... Z pewnością mogę to naprawić w 3.5 ...To jest najłatwiejszy i najlepszy znaleziony iv'e. Obsługuje Linux / pulseaudio, Mac / coreaudio i Windows / WASAPI.
Zobacz https://github.com/bastibe/PySoundFile i https://github.com/bastibe/SoundCard, aby uzyskać mnóstwo innych bardzo przydatnych funkcji.
źródło
Możliwe jest odtwarzanie dźwięku w systemie OS X bez żadnych bibliotek innych firm przy użyciu analogu następującego kodu. Surowe dane audio można wprowadzać za pomocą wave_wave.writeframes. Ten kod wyodrębnia 4 sekundy dźwięku z pliku wejściowego.
źródło
Wypróbuj PySoundCard, która używa PortAudio do odtwarzania, która jest dostępna na wielu platformach. Ponadto rozpoznaje „profesjonalne” urządzenia dźwiękowe z dużą ilością kanałów.
Oto mały przykład z pliku Readme:
źródło
Również na OSX - z SO , używając polecenia afplay OSX :
AKTUALIZACJA: Wszystko , co to robi, to przede wszystkim określenie, jak zrobić to, czego OP chciał uniknąć. Wydaje mi się, że opublikowałem to tutaj, ponieważ OP chciał uniknąć informacji, których szukałem. Ups.
źródło
Pypi zawiera listę modułów dla języka Python w muzyce. Moim ulubionym byłby jython, ponieważ ma więcej zasobów i bibliotek muzycznych. Jako przykład kodu do odtworzenia pojedynczej notatki z podręcznika :
źródło
Mac OS Próbowałem wielu kodów, ale to działa na mnie
źródło
Zainstaluj
playsound
pakiet przy użyciu:Stosowanie:
źródło
źródło
Aby odtworzyć dźwięk powiadomienia za pomocą Pythona, wywołaj odtwarzacz muzyki, taki jak vlc. VLC poprosił mnie, abym zamiast tego użył jego wersji wiersza poleceń, cvlc.
Wymaga preinstalacji vlc na urządzeniu. Przetestowano w systemie Linux (Ubuntu 16.04 LTS); Uruchamianie Pythona 3.5.
źródło
Wypróbuj sounddevice
Jeśli nie masz modułu, wejdź
pip install sounddevice
do swojego terminala.Następnie w preferowanym skrypcie Pythona (ja używam Juyptera) wpisz
sd.play(audio, sr)
będzie odtwarzać to, co chcesz za pośrednictwem PythonaNajlepszym sposobem na uzyskanie żądanego dźwięku i częstotliwości próbkowania jest użycie modułu librosa. Wpisz to w terminalu, jeśli nie masz modułu librosa.
Niezależnie od pliku wav, który chcesz odtworzyć, po prostu upewnij się, że znajduje się w tym samym katalogu, co skrypt Pythona. Powinno to umożliwić odtworzenie żądanego pliku wav przez Python
Pozdrawiam, Charlie
PS
Gdy dźwięk jest obiektem danych „librosa”, Python widzi go jako tablicę numpy. W ramach eksperymentu spróbuj odtworzyć długą (spróbuj 20 000 punktów danych) losową tablicę numpy. Python powinien odtwarzać to jako biały szum. Moduł sounddevice odtwarza również tablice numpy i listy.
źródło
W notatniku Colab możesz:
źródło
Niedawno mój odtwarzacz muzyki obsługuje wszystkie pliki audio lokalnie. Zrobiłem to, zastanawiając się, jak użyć modułu vlc python, a także plików dll VLC. Możesz to sprawdzić: https://github.com/elibroftw/music-caster/blob/master/audio_player.py
źródło
Jeśli używasz OSX, możesz użyć modułu „os” lub „podprocesu” itp., Aby wywołać polecenie OSX „play”. Wygląda na to, że z powłoki OSX
odtwórz „bah.wav”
Zaczyna grać za mniej więcej pół sekundy na moim komputerze.
źródło
Po prostu możesz to zrobić z pomocą cvlc - zrobiłem to w ten sposób:
/home/maulo/selfProject/task.mp3. To jest lokalizacja mojego pliku mp3. przy pomocy "--play-and-exit" będziesz mógł ponownie odtworzyć dźwięk bez kończenia procesu vlc.
źródło