Python发出声音
使用winsound模块在Windows上发声。
在Windows操作系统上,Python可以使用标准库中的winsound模块发出声音。winsound模块提供了一个简单的接口来播放声音。具体而言,使用winsound.Beep(frequency, duration)该方法能够在指定的频率和持续时间内发出蜂鸣声。
import winsound # 发送频率为1000Hz,蜂鸣的持续时间为1000毫秒。 frequency = 1000 # Set Frequency To 1 KHz duration = 1000 # Set Duration To 1000 ms == 1 second winsound.Beep(frequency, duration)
winsound模块除了Beep函数外,还提供PlaySound函数,可以播放。.wav格式的声音文件。若要播放系统声音,可传入特定的系统声标。举例来说,下面的代码可以播放一个系统的“警告”声音。
import winsound # 播放系统的“警告”声音 winsound.PlaySound("SystemExclamation", winsound.SND_ALIAS)
使用pygame模块播放声音文件
Pygame模块是一个跨平台的Python模块,旨在编写视频游戏,它提供了丰富的音频播放功能。使用pygame.mixer模块可以很容易地加载和播放声音文件。在此之前,需要对pygame的mixer模块进行初始化,然后使用Sound对象来加载和播放声音文件。
import pygame # mixer模块初始化pygame pygame.mixer.init() # 载入声音文件 sound = pygame.mixer.Sound('sound_file.wav') # 播放声音 sound.play() # 在代码运行完成之前,让程序等一会儿,确保声音播放完成。 pygame.time.delay(5000) # 等待5000毫秒
Pygame模块支持WAV和MP3等多种音频文件的播放,既可用于播放简单的声音效果,又可用于播放背景音乐。
使用simpleaudio模块来播放声波。
在Python中,simpleaudio是一个轻量级的图书馆,它可以播放音频波形,而不需要复杂的配置。首先要安装simpleaudio,然后用这个图书馆创建一个WaveObject实例,通过调用play来播放声音。
import simpleaudio as sa # 读取wav格式的声音文件 wave_obj = sa.WaveObject.from_wave_file('sound_file.wav') # 播放声音 play_obj = wave_obj.play() # 等待播放结束 play_obj.wait_done()
simpleaudio适用于那些需要快速实现音频播放的场合,操作简单明了,没有pygame那样复杂的功能,但是足以满足大多数声音播放的需要。
结合NumPy生成和播放声波。
除播放预先录制的声音文件外,我们还可以使用Python来生成和播放声音波形。作为Python的强大数学库,NumPy可以帮助我们生成复杂的波形数据。将这些波形与simpleaudio一起播放,可以实现合成音符等功能。
import numpy as np import simpleaudio as sa # 产生440Hz的正弦波形 sample_rate = 44100 # 采样率为44100Hz duration = 1.0 # 持续时间为1秒 frequency = 440.0 # 波频为440Hz(音乐标准A音) t = np.linspace(0, duration, int(sample_rate * duration), False) # 时间轴 wave = np.sin(frequency * t * 2 * np.pi) # 生成正弦波数据 # 在16位PCM范围内归一化。 audio = np.int16(wave * 32767) # 使用simpleaudio播放音频波形 play_obj = sa.play_buffer(audio, 1, 2, sample_rate) play_obj.wait_done()
在上面的例子中,我们生成了一个音乐标准A音的正弦波音频信号,并且使用simpleaudio来播放这个声音。通过调整duration和frequency,可以改变声音的持续时间和音调。
TTS(文本到语音)功能集成操作系统
在操作系统中,Python也可以使用文本到语音。(TTS)功能性发声。pyttsx3库可用于Windows,它包装了Windows的SAPI5接口进行TTS操作。
import pyttsx3 # 初级TTS引擎 engine = pyttsx3.init() # 设置要转换为语音的文本 text = 'Hello, how are you?' # 将文字转换到语音并播放 engine.say(text) engine.runAndWait()
同样支持Linux3库的pyttsx3库、MacOS,但是底部接口会有所不同。本库可方便地将文本转换为语音输出,适用于需要语音反馈的应用场景。