Bagaimana cara memutar audio (seperti suara 1 detik) dari skrip Python?
Akan lebih baik jika itu adalah platform independen, tetapi pertama-tama itu perlu bekerja di Mac.
Saya tahu saya bisa menjalankan afplay file.mp3
perintah dari dalam Python, tetapi apakah mungkin melakukannya dengan Python mentah? Saya juga akan lebih baik jika tidak bergantung pada perpustakaan eksternal.
Jawaban:
Anda dapat menemukan informasi tentang audio Python di sini: http://wiki.python.org/moin/Audio/
Sepertinya itu tidak dapat memutar file .mp3 tanpa perpustakaan eksternal. Anda dapat mengonversi file .mp3 Anda ke .wav atau format lain, atau menggunakan perpustakaan seperti PyMedia .
sumber
.wav
file?Taruhan terbaik Anda mungkin menggunakan pygame / SDL . Ini adalah perpustakaan eksternal, tetapi memiliki dukungan hebat di seluruh platform.
Anda dapat menemukan dokumentasi yang lebih spesifik tentang dukungan mixer audio di dokumentasi pygame.mixer.music
sumber
time.sleep(5)
di akhir dan itu berhasil. Python 3.6 pada Windows 8.1Lihatlah Simpleaudio , yang merupakan pustaka yang relatif baru dan ringan untuk tujuan ini:
Kemudian:
Pastikan untuk menggunakan file PCM 16 bit yang tidak terkompresi.
sumber
Coba playsound yang merupakan modul Pure Python, lintas platform, fungsi tunggal tanpa ketergantungan untuk memutar suara.
Instal melalui pip:
Setelah Anda menginstal, Anda dapat menggunakannya seperti ini:
sumber
playsound
. Saya baru saja menguji beberapa solusi di sini, dan yang ini bekerja paling mudah bagi saya. Sayangnyapygame
solusinya tidak berhasil untuk saya, selama pengujian singkat.Di pydub, kami baru-baru ini memilih untuk menggunakan ffplay (melalui subproses) dari rangkaian alat ffmpeg, yang secara internal menggunakan SDL.
Ini berfungsi untuk tujuan kami - terutama hanya mempermudah untuk menguji hasil kode pydub dalam mode interaktif - tetapi memiliki kelemahan, seperti menyebabkan program baru muncul di dok di mac.
Saya telah menautkan penerapan di atas, tetapi versi yang disederhanakan mengikuti:
The
-nodisp
bendera berhenti ffplay dari menampilkan jendela baru, dan-autoexit
bendera menyebabkan ffplay untuk keluar dan kembali kode status ketika file audio dilakukan bermain.edit : pydub sekarang menggunakan pyaudio untuk pemutaran ketika diinstal dan kembali ke ffplay untuk menghindari kerugian yang saya sebutkan. Tautan di atas menunjukkan implementasi itu juga.
sumber
Maaf atas balasan yang terlambat, tapi saya pikir ini adalah tempat yang bagus untuk mengiklankan perpustakaan saya ...
AFAIK, perpustakaan standar hanya memiliki satu modul untuk memutar audio: ossaudiodev . Sayangnya, ini hanya berfungsi di Linux dan FreeBSD.
UPDATE: Ada juga winsound , tetapi jelas ini juga khusus untuk platform.
Untuk sesuatu yang lebih mandiri dari platform, Anda harus menggunakan perpustakaan eksternal.
Rekomendasi saya adalah sounddevice modul (tapi hati-hati, aku penulis).
Paket ini menyertakan pustaka PortAudio yang telah dikompilasi sebelumnya untuk Mac OS X dan Windows, dan dapat dengan mudah diinstal dengan:
Ia dapat memutar ulang suara dari array NumPy, tetapi juga dapat menggunakan buffer Python biasa (jika NumPy tidak tersedia).
Untuk memutar ulang array NumPy, hanya itu yang Anda butuhkan (dengan asumsi bahwa data audio memiliki frekuensi sampling 44100 Hz):
Untuk lebih jelasnya, lihat dokumentasi .
Itu tidak dapat membaca / menulis file suara, Anda memerlukan perpustakaan terpisah untuk itu.
sumber
Anda dapat melihat ini: http://www.speech.kth.se/snack/
sumber
Jawaban Aaron tampaknya 10x lebih rumit dari yang seharusnya. Lakukan saja ini jika Anda hanya membutuhkan jawaban yang berfungsi di OS X:
Satu hal ... ini segera kembali. Jadi, Anda mungkin ingin melakukan ini juga, jika Anda ingin panggilan diblokir hingga suara selesai diputar.
Sunting: Saya mengambil fungsi ini dan menggabungkannya dengan varian untuk Windows dan Linux. Hasilnya adalah python murni, modul lintas platform tanpa ketergantungan yang disebut playsound . Saya telah mengunggahnya ke pypi.
Kemudian jalankan seperti ini:
File MP3 juga berfungsi di OS X. WAV harus berfungsi di semua platform. Saya tidak tahu kombinasi lain dari format platform / file apa yang berfungsi atau tidak - saya belum mencobanya.
sumber
playsound
modul yang saya tulis? Saya belum mengujinya pada sesuatu yang lebih baru dari Python 2.7.11 ... Saya pasti bisa memperbaiki ini di 3.5 ...Ini adalah iv'e termudah & terbaik yang ditemukan. Ini mendukung Linux / pulseaudio, Mac / coreaudio, dan Windows / WASAPI.
Lihat https://github.com/bastibe/PySoundFile dan https://github.com/bastibe/SoundCard untuk banyak fitur berguna lainnya.
sumber
Dimungkinkan untuk memutar audio di OS X tanpa pustaka pihak ketiga menggunakan analog dari kode berikut. Data audio mentah dapat dimasukkan dengan wave_wave.writeframes. Kode ini mengekstrak 4 detik audio dari file input.
sumber
Coba PySoundCard yang menggunakan PortAudio untuk pemutaran yang tersedia di banyak platform. Selain itu, ia mengenali perangkat suara "profesional" dengan banyak saluran.
Berikut contoh kecil dari Readme:
sumber
Juga di OSX - dari SO , menggunakan perintah afplay OSX :
UPDATE: Semua ini dilakukan adalah menentukan bagaimana melakukan apa yang OP ingin hindari lakukan di tempat pertama. Saya kira saya memposting ini di sini karena yang OP ingin hindari adalah info yang saya cari. Ups.
sumber
Pypi memiliki daftar modul untuk python dalam musik. Favorit saya adalah jython karena memiliki lebih banyak sumber daya dan perpustakaan untuk musik. Sebagai contoh kode untuk memainkan satu nada dari buku teks :
sumber
Mac OS Saya mencoba banyak kode tetapi hanya ini yang berhasil pada saya
sumber
Instal
playsound
paket menggunakan:Pemakaian:
sumber
sumber
Untuk memutar suara notifikasi menggunakan python, panggil pemutar musik, seperti vlc. VLC meminta saya untuk menggunakan versi baris perintahnya, cvlc, sebagai gantinya.
Ini membutuhkan vlc untuk diinstal sebelumnya pada perangkat. Diuji di Linux (Ubuntu 16.04 LTS); Menjalankan Python 3.5.
sumber
Coba perangkat suara
Jika Anda tidak memiliki modul, masuk
pip install sounddevice
ke terminal Anda.Kemudian di skrip Python pilihan Anda (saya menggunakan Juypter), masukkan
sd.play(audio, sr)
akan memainkan apa yang Anda inginkan melalui PythonCara terbaik untuk mendapatkan audio dan sampel yang Anda inginkan adalah dengan modul librosa. Masukkan ini di terminal jika Anda tidak memiliki modul librosa.
Apa pun file wav yang ingin Anda mainkan, pastikan saja itu ada di direktori yang sama dengan skrip Python Anda. Ini memungkinkan Anda untuk memutar file wav yang Anda inginkan melalui Python
Cheers, Charlie
PS
Setelah audio menjadi objek data "librosa", Python melihatnya sebagai array numpy. Sebagai percobaan, coba mainkan hal yang panjang (coba 20.000 titik data) dari larik numpy acak. Python harus memainkannya sebagai white noise. Modul perangkat suara juga memainkan larik dan daftar numpy.
sumber
Di notebook Colab, Anda dapat melakukan:
sumber
Saya baru-baru ini membuat Pemutar Musik saya mendukung semua file audio secara lokal. Saya melakukan ini dengan mencari cara untuk menggunakan modul vlc python dan juga file dll VLC. Anda dapat memeriksanya: https://github.com/elibroftw/music-caster/blob/master/audio_player.py
sumber
Jika Anda menggunakan OSX, Anda dapat menggunakan modul "os" atau "subprocess" dll. Untuk memanggil perintah "play" OSX. Dari shell OSX, sepertinya
mainkan "bah.wav"
Ini mulai diputar sekitar setengah detik di mesin saya.
sumber
Cukup Anda dapat melakukannya dengan bantuan cvlc- Saya melakukannya dengan cara ini:
/home/maulo/selfProject/task.mp3. Ini adalah lokasi file mp3 saya. dengan bantuan "--play-and-exit" Anda akan dapat memutar kembali suara tersebut tanpa mengakhiri proses vlc.
sumber