Как сделать звук в python tkinter
Перейти к содержимому

Как сделать звук в python tkinter

  • автор:

Класс Sound и модуль pygame.mixer.music

В Pygame для работы с аудио предназначены модули pygame.mixer и pygame.mixer.music. Модули похожи, однако pygame.mixer в первую очередь адаптирован для добавления и настройки звуковых эффектов в игре. В то время как pygame.mixer.music – для добавления фоновой музыки.

Функция pygame.mixer.music.load() загружает потоковое аудио, т. е. не грузит файл целиком, а делает это отдельными порциями. В результате можно проигрывать только один файл за раз. Однако можно ставить файлы в очередь функцией queue() . Поддерживает в том числе формат mp3 (но не в Ubuntu).

С другой стороны, в pygame.mixer ключевым является класс Sound . Он позволяет загружать, проигрывать и выполнять ряд других действий с файлами форматов wav или ogg. При создании экземпляра Sound в конструктор передается имя файла.

В примере ниже подгружается фоновая музыка: pygame.mixer.music.load() . Функция не возвращает никакого «музыкального» объекта, поэтому результат ее вызова не присваивается переменной.

С помощью функции music.play() файл начинает проигрываться. Если требуется зациклить композицию, то в play() передается число -1. Положительный аргумент указывает на количество повторов + одно дополнительное. То есть, если надо проиграть композицию 2 раза, то в функцию передается число 1.

В программе при нажатии на клавишу 1 клавиатуры музыка ставится на паузу: music.pause() . Клавиша 2 уменьшает громкость в два раза: music.set_volum(0.5) . Нажатие 3 возвращает громкость на прежний уровень. Функция unpause() вызывается на случай, если до этого музыка была выключена (клавишей 1).

В примере создаются два объекта типа Sound . У них есть свой метод play() . В данном случае файлы проигрываются при клике левой и правой кнопками мыши. Объекты Sound могут проигрываться одновременно, так как обычно принадлежат разным каналам. Если требуется более тонкое управление звуками, дополнительно используют класс Channel .

import pygame as pg import sys pg.init() sc = pg.display.set_mode((400, 300)) pg.mixer.music.load('Beethoven.ogg') pg.mixer.music.play() sound1 = pg.mixer.Sound('boom.wav') sound2 = pg.mixer.Sound('one.ogg') while 1: for i in pg.event.get(): if i.type == pg.QUIT: sys.exit() elif i.type == pg.KEYUP: if i.key == pg.K_1: pg.mixer.music.pause() # pygame.mixer.music.stop() elif i.key == pg.K_2: pg.mixer.music.unpause() # pygame.mixer.music.play() pg.mixer.music.set_volume(0.5) elif i.key == pg.K_3: pg.mixer.music.unpause() # pygame.mixer.music.play() pg.mixer.music.set_volume(1) elif i.type == pg.MOUSEBUTTONUP: if i.button == 1: sound1.play() elif i.button == 3: sound2.play() pg.time.delay(20)

Если закомментировать вызовы функций pause() и unpause() и раскомментировать stop() и play() , то результат будет схож. Разница в том, что при использовании комбинации stop-play файл начнет проигрываться сначала, а при pause-unpause продолжится с места останова.

Если у вас нет файлов wav или ogg для тестов, можете найти немного в каталоге data модуля pygame.examples . Модуль находится в папке библиотеки pygame, адрес которой можно посмотреть так:

>>> import pygame >>> pygame.__file__ '/home/. /pygame/__init__.py'

Практическая работа

Добавьте фоновую музыку и звук столкновения в игру из практической работы предыдущего урока.

Окно игры должно закрываться только после того, как звук столкновения полностью проиграется. В зависимости от решения вам может понадобиться метод get_length() объекта типа Sound . Метод возвращает продолжительность звука, выраженную в секундах (тип float ).

Курс с примерами решений практических работ:
pdf-версия

X Скрыть Наверх

Pygame. Введение в разработку игр на Python

10 аудиомодулей Python для воспроизведения и записи

В настоящее время язык программирования Python является ведущим из-за его удобных функций. Python также имеет много интересных модулей и библиотек, с помощью которых пользователи могут многое сделать, используя их. Одна из самых интересных особенностей языка Python – это его аудиомодули.

В этой статье мы обсудим 10 различных типов аудиомодулей и библиотек на Python для воспроизведения и записи звука, их уникальные особенности и преимущества.

  • PYO
  • PyAudio
  • Dejavu
  • Mingus
  • hYPerSonic
  • Pydub
  • simpleaudio
  • winsound
  • python – sounddevice
  • playsound

Давайте разберемся с вышеуказанными аудиомодулями по очереди.

1. Аудиомодуль PYO

PYO – это модуль Python, написанный на языке программирования C для создания сценария цифровой обработки сигналов. Этот модуль Python содержит классы для обработки самых разных типов аудиосигналов. Благодаря этому пользователи могут импортировать цепочки обработки сигналов непосредственно в сценарии или проекты Python и могут манипулировать звуковыми сигналами в реальном времени с помощью интерпретатора.

Инструмент модулей PYO в Python имеет примитивы, такие как математические операции, базовую обработку сигналов: задержки, генераторы синтеза, фильтры и многое другое. Но он также объединяет алгоритмы для создания звуковой грануляции и многих других художественных звуковых операций.

# to play a sound file: from pyo import * sound = Server( ) .boot( ) sound.start ( ) sound_file = SFPlayer( " path /to /users /sound.aif ", speed = 1, loop = True ).out( ) # for Granulating an audio buffer: sound = Server( ) .boot( ) sound_nd = SndTable( " path /to /users /sound.aif " ) ev = HannTable( ) ps = Phasor( freq = sound_nd.getRate( )*.25, ml = sound_nd.getSize( ) ) dr = Noise( mul = .001, add = .1 ) granulate = Granulator( sound_nd, ev, [ 1, 1.001 ] , ps, dr, 32, ml = .1 ).out( ) # to generate melodies: sound = Server( ) .boot( ) sound.start( ) wv = SquareTable( ) ev = CosTable( [( 0, 0 ) ,( 100 , 1 ) ,( 500 , 0.3 ) ,( 8391 , 0 ) ] ) mt = Metro( 0.135 , 12 ).play( ) ap = TrigEnv( mt , table = ev , dr = 1 , ml = .1 ) pt = TrigXnoiseMidi( mt , dist = ' loopseg ' , x1 = 20 , scale = 1 , mrange =( 47, 74 ) ) out = Osc( table = wav , freq = pt , ml = ap ).out( )

2. Кроссплатформенный аудиовход – вывод с pyAudio

Pyaudio – это библиотека Python, которая представляет собой кроссплатформенный аудиовход – вывод с открытым исходным кодом. Он имеет широкий спектр функций, связанных со звуком и в основном ориентированных на сегментацию, извлечение функций, классификацию и визуализацию.

Используя библиотеку pyaudio, пользователи могут классифицировать неизвестные звуки, выполнять контролируемую и неконтролируемую сегментацию, извлекать звуковые функции и представления, обнаруживать звуковые события и отфильтровывать периоды тишины из длинных записей, применять уменьшение размерности для визуализации аудиоданных и сходства контента и многое другое.

Эта библиотека предоставляет привязки для PortAudio. Пользователи могут использовать эту библиотеку для воспроизведения и записи звука на разных платформах, таких как Windows, Mac и Linux. Для воспроизведения звука с помощью библиотеки pyaudio пользователь должен писать в .stream.

import pyaudio import wave filename = ' example.wav ' # Set chunk size of 1024 samples per data frame chunksize = 1024 # Now open the sound file, name as wavefile wavefile = wave.open( filename, ' rb ' ) # Create an interface to PortAudio portaudio = pyaudio.PyAudio( ) # Open a .Stream object to write the WAV file to play the audio using pyaudio # in this code, 'output = True' means that the audio will be played rather than recorded streamobject = portaudio.open(format = portaudio.get_format_from_width( wavefile.getsampwidth( ) ), channels = wavefile.getnchannels( ), rate = wavefile.getframerate( ), output = True( ) # Read data in chunksize Data_audio = wavefile.readframes( chunksize ) # Play the audio by writing the audio data to the streamobject while data != '': streamobject.write( data_audio ) data_audio = wavefile.readframes( chunksize ) # Close and terminate the streamobject streamobject.close( ) portaudio.terminate( )

Здесь пользователи могут заметить, что воспроизведение звука с использованием библиотеки pyaudio может быть немного сложнее по сравнению с другими библиотеками воспроизведения звука. Вот почему эта библиотека может быть не лучшим выбором пользователей для воспроизведения звука в своих проектах или приложениях.

Хотя библиотека pyaudio обеспечивает более низкоуровневое управление, что позволяет пользователям устанавливать параметры для своих устройств ввода и вывода. Эта библиотека также позволяет пользователям проверять загрузку своего процессора и активность ввода-вывода.

Библиотека Pyaudio также позволяет пользователям воспроизводить и записывать звук в режиме обратного вызова, где указанная функция обратного вызова вызывается, когда новые данные необходимы для воспроизведения и доступны для записи. Это особенности библиотеки pyaudio, которые отличают ее от других аудиобиблиотек и модулей. Эта библиотека специально используется, если пользователь хочет воспроизвести звук помимо простого воспроизведения.

3. Dejavu

Dejavu – это аудиомодуль на Python с открытым исходным кодом. Он может запоминать записанный звук, прослушивая его один раз, и этот звук сохраняется в базе данных. После этого, когда проигрывается песня, микрофонный вход или дисковый файл, Dejavu пытается сопоставить звук с сохраненными в базе данными, и вернуть песню или запись, которая была воспроизведена ранее.

Модуль Dejavu превосходит распознавание отдельных сигналов с реалистичным количеством шума. Есть две формы, в которых пользователь может использовать Дежавю для распознавания звука:

  • Пользователь может распознавать аудио, читая и обрабатывая аудиофайлы на диске.
  • Пользователь может использовать микрофон компьютера.

Например:
#User should create a MySQL database where Dejavu can store fingerprints of the audio.
#on user local setup:
$ mysql -u root -p
Enter password: *************
mysql> HERE, USER SHOULD CREATE A DATABASE dejavu;
Готово.

from dejavu import Dejavu config = < " database ": < " host ": " 125.0.1.1 ", " user ": " root ", " password ": < password imported in Local setup >, " database ": < name of the database user has created in local setup >, > > dejv = Dejavu( config )

4. Mingus

Mingus – это пакет на Python. Его используют многие программисты, исследователи музыкантов и композиторы для создания и изучения музыки и песен. Этот пакет является кроссплатформенным и представляет собой очень продвинутую теорию музыки, представляющую пакет для Python вместе с файлами цифрового интерфейса музыкальных инструментов и поддержкой воспроизведения.

Пакет Mingus можно использовать для образовательных инструментов, для создания редакторов для песен, а также во многих других приложениях и программах, в которые пользователи хотят импортировать функцию обработки и воспроизведения музыки.

Этот пакет представляет собой теорию музыки и включает в себя такие темы, как гаммы, прогрессии, аккорды и интервалы. Mingus тестирует эти компоненты и использует для создания и распознавания музыкальных элементов с помощью удобных сокращений.

import mingus.core.notes as notes_m # for valid notes notes_m.is_valid_note("C") notes_m.is_valid_note("D#") notes_m.is_valid_note("Eb") notes_m.is_valid_note("Fbb") notes_m.is_valid_note("G##")
True True True True True

# для недействительных заметок:

notes_m.is_valid_note("c") notes_m.is_valid_note("D #") notes_m.is_valid_note("E-b")
False False False

5. hYPerSonic

hYPerSonic – это фреймворк на языках Python и C. Используется для разработки и эксплуатации конвейеров обработки звука, предназначенных для управления в реальном времени. Эта структура является низкоуровневой, в которой подсчитывается каждый байт, и это также включает объекты для звуковой карты, фильтрует операции с памятью, file – io и осцилляторы. Эта структура работает в операционных системах Linux и OSX.

6. Pydub

Pydub – это библиотека Python, используемая для управления аудио и добавления к нему эффектов. Эта библиотека представляет собой очень простой и легкий, но высокоуровневый интерфейс, основанный на FFmpeg и склонный к jquery. Эта библиотека используется для добавления тегов id3 в аудио, нарезки его и объединения аудиодорожек. Библиотека Pydub поддерживает версии Python 2.6, 2.7, 3.2 и 3.3.

Однако пользователи могут открывать и сохранять файл WAV с помощью библиотеки pydub без каких-либо зависимостей. Но пользователям необходимо установить пакет для воспроизведения звука, если они хотят воспроизводить звук.

Следующий код можно использовать для воспроизведения файла WAV с помощью pydub:

from pydub import AudioSegment from pydub.playback import play sound_audio = AudioSegment.from_wav( ' example.wav ' ) play( sound_audio )

Если пользователь хочет воспроизводить другие форматы аудиофайлов, такие как файлы MP3, им следует установить libav или FFmpeg.

После установки FFmpeg пользователю необходимо внести небольшое изменение в код для воспроизведения файла MP3.

from pydub import AudioSegment from pydub.playback import play sound_audio = AudioSegment.from_mp3( 'example.mp3 ' ) play( sound_audio )

Используя оператор AudioSegment.from_file(имя_файла, тип_файла), пользователи могут воспроизводить любой формат аудиофайла, поддерживаемый ffmpeg.

# Users can play a WMA file: sound = AudioSegment.from_file( 'example.wma ', ' wma ' )

Библиотека Pydub также позволяет пользователям сохранять аудио в различных форматах файлов. Пользователи также могут рассчитать длину аудиофайлов, использовать кроссфейды в аудио с помощью этой библиотеки.

7. Simpleaudio

Simpleaudio – это кроссплатформенная библиотека. Также используется для воспроизведения файлов WAV без каких-либо зависимостей. Библиотека simpleaudio ожидает, пока файл закончит воспроизведение звука в формате WAV, перед завершением скрипта.

import simpleaudio as simple_audio filename = ' example.wav ' wave_object = simple_audio.WaveObject.from_wave_file( filename ) play_object = wave_object.play( ) play_object.wait_done( ) # Wait until audio has finished playing

В файле формата WAV сохраняется категоризация битов, которая представляет необработанные аудиоданные, а также хранятся заголовки вместе с метаданными в формате файла обмена ресурсами.

Окончательная запись состоит в том, чтобы сохранять каждый аудиосэмпл, который представляет собой конкретную точку данных, относящуюся к давлению воздуха, как при 44200 выборок в секунду, 16-битное значение для записей компакт-дисков.

Для уменьшения размера файла этого достаточно для хранения нескольких записей, таких как человеческая речь, с более низкой частотой дискретизации, например 8000 выборок в секунду. Однако более высокие звуковые частоты не могут быть представлены достаточно точно.

Некоторые из библиотек и модулей, обсуждаемых в этой статье, воспроизводят и записывают байтовые объекты, а некоторые из них используют массивы NumPy для записи необработанных аудиоданных. Оба напоминают категоризацию точек данных, которые можно воспроизводить с определенной частотой дискретизации для воспроизведения звука.

В массиве NumPy каждый элемент может содержать 16-битное значение, эквивалентное отдельной выборке, а для объекта bytes каждая выборка сохраняется как набор из двух 8-битных значений. Важное различие между этими двумя типами данных заключается в том, что массивы NumPy изменяемы, а объекты байтов неизменны, что делает последние более подходящими для генерации аудио и обработки более сложных сигналов.

Пользователи могут воспроизводить массивы NumPy и байтовые объекты в библиотеке simpleaudio с помощью оператора simpleaudio.play_buffer(). Но перед этим пользователи должны убедиться, что они уже установили библиотеки NumPy и simpleaudio.

Пример: сгенерировать массив Numpy, соответствующий тону 410 Гц.

import numpy as numpy import simpleaudio as simple_audio frequency = 410 # user's played note will be 410 Hz fsample = 44200 # 44200 samples per second will be played second = 5 # Note duration of 5 seconds # Generate array with second*sample_rate steps, ranging between 0 and seconds tp = numpy.linspace( 0 , second , second * fsample, False ) # to generate a 410 Hz sine wave note = numpy.sin( frequency * tp * 2 * numpy.pi ) # user should Ensure that highest value is in 16-bit range audio = note *(2**15 - 1) / numpy.max( numpy.abs( note ) ) # now, Convert to 16-bit data ado = audio.astype( numpy.int16 ) # to Start the playback play_object = simple_audio.play_buffer( ado , 1 , 2 , fsample ) # user now Waits for playback to finish before exiting play_object.wait_done( )

8. winsound

winsound – это модуль в Python, который используется для доступа к основному механизму воспроизведения звука операционной системы Windows.

В модуле winsound файл WAV можно воспроизвести с помощью всего нескольких строк кода.

import winsound filename = ' example.wav ' winsound.PlaySound( filename, winsound.SND_FILENAME )

Модуль winsound не поддерживает никаких форматов файлов, кроме файлов WAV. Это позволяет пользователям подавать звуковой сигнал своим динамикам, используя выражение winsound.Beep(частота, продолжительность).

# User can beep a 1010 Hz tone for 110 milliseconds: import winsound winsound.Beep( 1010, 110 ) # Beep at 1010 Hz for 110 milliseconds

9. python-sounddevice

python – sounddevice – это модуль python для кроссплатформенного воспроизведения звука. Этот модуль предоставляет привязки для библиотеки PortAudio и имеет некоторые подходящие функции для воспроизведения и записи массивов NumPy, содержащих аудиосигналы.

Если пользователь хочет воспроизвести файл WAV, он должен установить NumPy и звуковой файл, чтобы открыть формат аудиофайла в файлах WAV в виде массивов NumPy.

import sounddevice as sound_device import soundfile as sound_file filename = ' example.wav ' # now, Extract the data and sampling rate from file data_set, fsample = sound_file.read( filename , dtype = ' float32 ' ) sound_device.play( data_set, fsample ) # Wait until file is done playing status = sound_device.wait( )

Оператор sound_file.read() используется для извлечения необработанных аудиоданных, а также частоты дискретизации файла, которые хранятся в заголовке формата файла обмена ресурсами. Оператор sound_device.wait() используется для того, чтобы убедиться, что сценарий завершается только после завершения воспроизведения звука.

10. playsound

playsound – это модуль Python, с помощью которого пользователи могут воспроизводить звук в одной строке кода. Это кроссплатформенный модуль, который представляет собой единую функцию без каких-либо зависимостей для воспроизведения звуков и аудио.

from playsound import playsound playsound( ' example.wav ' )

Модуль playsound используется для файлов, отформатированных в файл WAV и файл MP3, а также может работать с другими форматами файлов.

Заключение:

В этой статье мы обсудили различные типы библиотеки Python и модулей, которые используются для воспроизведения и записи различных типов аудиофайлов и звуков. Здесь мы объяснили различные функции и важность каждой библиотеки и модулей для воспроизведения звуков в проекте разработки и модификации приложений и программного обеспечения.

Создание аудиофайла из текста с помощью Python-Tkinter

windows звук из текста

windows звук из текста

Привет всем! В рамках разбирательства с библиотекой Tkinter опираясь на библиотеку gTTS (о ней я рассказывал ранее) накропал примитивную программку, которая позволяет из файла с расширением .txt в кодировке utf-8 получить аудиофайл в формате .mp3

Озвучка получается так себе — в основе, повторюсь, лежит библиотека от Google, которая, на мой взгляд, по качеству голоса порядком проигрывает Алисе от Yandex, но в качестве эксперимента — вроде нормально ��

windows звук из текста

Интерфейс максимально прост — одна единственная кнопка, которая отвечает за выбор текстового файла. Как только файл выбран — начинается конвертация из текста в звук. Собственно — вот скрин программы:

Из выявленных минусов сразу вижу — отсутствие некой динамики — непонятно, когда идет конвертация из текста в звук — как долго она еще будет идти и прочее. Ну и внешний вид — очень даже хромает �� Но как для первого раза — вроде норм. А что вы скажете? И да — для экспериментов программа доступна по ссылке.

Спасибо за внимание!
В случае возникновения вопросов — пишите на почту или в Telegram.

Воспроизведение аудио в tkinter python?

Делаю свой плеер на python, используя tkinter и ещё много библиотек.
Но вот в чём проблема:
Как воспроизводить звук так, чтобы окно tkinter не зависало?
Пробовал playsound, pyglet, но ничего не вышло.

  • Вопрос задан более трёх лет назад
  • 528 просмотров

Комментировать
Решения вопроса 1
When you dont want to litter on stackoverflow @Andriy_Kosmenyuk

Попробуй PyGame, у меня при использовании PyQT + PyGame проблем не было, думаю с tkinter тоже не будет.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ответы на вопрос 1
MechanicZelenyy @MechanicZelenyy

Не блокировать поток в котором работает окно, для этого другие задачи надо запускать в других потоках.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python
  • +1 ещё

Почему при большом количестве строк async выдает ошибку?

  • 1 подписчик
  • 2 часа назад
  • 29 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *