Python实现播放和录制声音的功能

    Python语言已经无所不能了,今天就来分享一下,如何使用Python来录制和播放音频文件。

    下面是一些可以播放和录制音频的Python第三方库:

    • playsound,支持MP3和WAV,目前只支持简单的回放。
    • simpleaudio,支持WAV,提供检查文件是否仍在播放的功能。
    • winsound,支持WAV,只支持windows。
    • python-sounddevice和pyaudio为PortAudio库提供绑定,以便跨平台回放WAV文件。
    • pydub,需要pyaudio来播放音频,但是安装了ffmpeg之后,它允许您使用几行代码来播放各种音频格式。

    一、播放音频文件

    使用playsound库

    1、安装

    
    $ pip install playsound

    2、使用播放音频

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

    使用simpleaudio库

    1、安装

    
    $ pip install simpleaudio

    2、使用播放音频

    
    mport simpleaudio as sa
    
    filename = 'myfile.wav'
    wave_obj = sa.WaveObject.from_wave_file(filename)
    play_obj = wave_obj.play()
    play_obj.wait_done() # Wait until sound has finished playing

    使用winsound库

    如果您使用Windows,您可以使用内置的winsound模块来访问其基本的声音播放机制。播放WAV文件可以在几行代码:

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

    使用python-sounddevice库

    1、安装

    
    $ pip install sounddevice

    2、使用播放音频

    
    import sounddevice as sd
    import soundfile as sf
    
    filename = 'myfile.wav'
    # Extract data and sampling rate from file
    data, fs = sf.read(filename, dtype='float32') 
    sd.play(data, fs)
    status = sd.wait() # Wait until file is done playing

    使用pydub库

    1、安装

    
    $ pip install pydub

    2、使用播放音频

    
    from pydub import AudioSegment
    from pydub.playback import play
    
    sound = AudioSegment.from_wav('myfile.wav')
    play(sound)

    默认情况下,pydub只支持播放wav格式音频。如果你想播放更多其他格式的音频文件。需要安装ffmpeg-python。

    
    $ pip install ffmpeg-python

    安装了ffmpeg后,播放MP3文件只需要在我们之前的代码中做一个小小的修改:

    
    from pydub import AudioSegment
    from pydub.playback import play
    
    sound = AudioSegment.from_mp3('myfile.mp3')
    play(sound)

    使用pyaudio库

    1、安装

    
    $ pip install pyaudio

    2、使用播放音频

    
    import pyaudio
    import wave
    
    filename = 'myfile.wav'
    
    
    chunk = 1024 
    wf = wave.open(filename, 'rb')
    p = pyaudio.PyAudio()
    stream = p.open(format = p.get_format_from_width(wf.getsampwidth()),
        channels = wf.getnchannels(),
        rate = wf.getframerate(),
        output = True)
    
    data = wf.readframes(chunk)
    
    while data != '':
     stream.write(data)
     data = wf.readframes(chunk)
    
    stream.close()
    p.terminate()

    您可能已经注意到,使用pyaudio播放声音比使用前面看到的库播放声音要复杂一些。这意味着如果您只想在Python应用程序中播放声音效果,那么它可能不是您的首选。

    但是,由于pyaudio提供了更低级的控制,因此可以获取和设置输入和输出设备的参数,并检查CPU负载和输入或输出延迟。

    它还允许您在回调模式下播放和录制音频,在回调模式中,当需要回放新数据或记录可用数据时,将调用指定的回调函数。如果您的音频需要的不仅仅是简单的回放,那么这些选项使pyaudio成为一个合适的库。

    既然您已经了解了如何使用许多不同的库来播放音频,现在就来看看如何使用Python自己录制音频。

    二、录音

    Python -sounddevice和pyaudio库提供了用Python录制音频的方法。

    1 、使用python-sounddevice录音

    
    import sounddevice as sd
    from scipy.io.wavfile import write
    
    fs = 44100 # Sample rate
    seconds = 3 # Duration of recording
    
    myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=2)
    sd.wait() # Wait until recording is finished
    write('output.wav', fs, myrecording) # Save as WAV file 

    2、使用pyaudio录音

    
    import pyaudio
    import wave
    
    chunk = 1024 # Record in chunks of 1024 samples
    sample_format = pyaudio.paInt16 # 16 bits per sample
    channels = 2
    fs = 44100 # Record at 44100 samples per second
    seconds = 3
    filename = "output.wav"
    
    p = pyaudio.PyAudio() # Create an interface to PortAudio
    
    print('Recording')
    
    stream = p.open(format=sample_format,
        channels=channels,
        rate=fs,
        frames_per_buffer=chunk,
        input=True)
    
    frames = [] # Initialize array to store frames
    
    # Store data in chunks for 3 seconds
    for i in range(0, int(fs / chunk * seconds)):
     data = stream.read(chunk)
     frames.append(data)
    
    # Stop and close the stream 
    stream.stop_stream()
    stream.close()
    # Terminate the PortAudio interface
    p.terminate()
    
    print('Finished recording')
    
    # Save the recorded data as a WAV file
    wf = wave.open(filename, 'wb')
    wf.setnchannels(channels)
    wf.setsampwidth(p.get_sample_size(sample_format))
    wf.setframerate(fs)
    wf.writeframes(b''.join(frames))
    wf.close()

    三、保存和格式转换

    1、使用pydub保存音频

    
    from pydub import AudioSegment
    sound = AudioSegment.from_wav('myfile.wav')
    sound.export('myfile.mp3', format='mp3')

    2、使用pydub完成格式转换

    
    from pydub import AudioSegment
    sound = AudioSegment.from_wav('myfile.wav')
    sound.export('myfile.mp3', format='mp3')

    如果觉得内容还不错,分享给更多朋友,一起提升编程技能。

    以上就是Python实现播放和录制声音的功能的详细内容,更多关于python 播放和录制声音的资料请关注lingkb其它相关文章!