欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

如何利用Python播放和錄制聲音

系統 2635 0

如果您想使用Python播放或錄制聲音,那么您來對地方了!在本教程中,您將學習如何使用一些最流行的音頻庫在Python中播放和錄制聲音。您將了解最直接的播放和錄制聲音的方法,然后您將了解一些提供更多功能的庫,以換取一些額外的代碼行。

在本教程結束時,您將了解如何:

  • 播放MP3和WAV文件,以及一系列其他音頻格式

  • 播放包含聲音的NumPy和Python數組

  • 使用Python錄制聲音

  • 以各種不同的文件格式保存錄制文件或音頻文件

播放音頻文件

下面,您將看到如何使用一系列Python庫播放音頻文件。其中一些庫允許您播放一系列音頻格式,包括MP3和NumPy陣列。下面的所有庫都允許您播放WAV文件,其中一些代碼行代碼比其他文件更多:

  • playsound如果你只是想播放WAV或MP3文件,是最簡單的包。除簡單播放外,它不提供任何功能。

  • simpleaudio 讓您播放WAV文件和NumPy數組,并為您提供檢查文件是否仍在播放的選項。

  • winsound 允許您播放WAV文件或發出嗶嗶聲,但它僅適用于Windows。

  • python-sounddevice并pyaudio為PortAudio庫提供綁定,以便跨平臺播放WAV文件。

  • pydub需要pyaudio進行音頻播放,但ffmpeg安裝后,只需幾行代碼即可播放各種音頻格式。

讓我們一起來看看這些用于音頻播放的庫。

  • playsound

playsound是一個“純Python,跨平臺,單一功能模塊,不依賴于播放聲音。” 使用此模塊,您可以使用一行代碼播放聲音文件:

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

            
          

該文件中playsound指出,它已在WAV和MP3文件進行測試,但它可能對其他文件格式正常工作。

該庫最后更新于2017年6月。在撰寫本文時似乎運行良好,但目前尚不清楚它是否仍然支持更新的Python版本。

simpleaudio

simpleaudio是一個跨平臺的庫,用于播放沒有依賴關系的(單聲道和立體聲)WAV文件。以下代碼可用于播放WAV文件,并在終止腳本之前等待文件完成播放:

            
              import 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

            
          

WAV文件包含表示原始音頻數據的一系列位,以及具有 RIFF(資源交換文件格式)格式的元數據的標題。

對于CD錄制,行業標準是將每個音頻樣本(與氣壓相關的單個音頻數據點)存儲為16位值,每秒44100個樣本。

為了減小文件大小,以較低的采樣率存儲一些記錄(例如人類語音)可能就足夠了,例如每秒8000個樣本,盡管這確實意味著較高的聲音頻率可能沒有準確表示。

本教程中討論的一些庫播放和記錄bytes對象,而其他庫使用NumPy數組來存儲原始音頻數據。

兩者都對應于一系列數據點,這些數據點可以以指定的采樣率播放以播放聲音。對于bytes對象,每個樣本存儲為一組兩個8位值,而在NumPy數組中,每個元素可以包含對應于單個樣本的16位值。

這兩種數據類型之間的一個重要區別是bytes對象是不可變的,而NumPy數組是可變的,使后者更適合生成聲音和更復雜的信號處理。有關如何使用NumPy的更多信息,請查看我們的NumPy教程。

simpleaudio允許您使用NumPy和Python數組和bytes對象simpleaudio.play_buffer()。確保安裝了NumPy以使以下示例正常工作simpleaudio。(pip安裝后,您可以通過pip install numpy從控制臺運行來執行此操作。)

有關如何使用pip安裝包的更多信息,

下面你將看到如何生成一個對應于440 Hz音調的NumPy數組并使用simpleaudio.play_buffer()以下方式播放:

            
              import numpy as np
import simpleaudio as sa

frequency = 440  # Our played note will be 440 Hz
fs = 44100  # 44100 samples per second
seconds = 3  # Note duration of 3 seconds

# Generate array with seconds*sample_rate steps, ranging between 0 and seconds
t = np.linspace(0, seconds, seconds * fs, False)

# Generate a 440 Hz sine wave
note = np.sin(frequency * t * 2 * np.pi)

# Ensure that highest value is in 16-bit range
audio = note * (2**15 - 1) / np.max(np.abs(note))
# Convert to 16-bit data
audio = audio.astype(np.int16)

# Start playback
play_obj = sa.play_buffer(audio, 1, 2, fs)

# Wait for playback to finish before exiting
play_obj.wait_done()

            
          

接下來,讓我們看看如何winsound在Windows機器上播放WAV文件。

winsound

如果使用Windows,則可以使用內置winsound模塊訪問其基本的聲音播放機器。播放WAV文件可以在幾行代碼中完成:

            
              import winsound

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

            
          

winsound不支持播放WAV文件以外的任何文件。它確實允許您使用揚聲器發出嗶嗶聲winsound.Beep(frequency, duration)。例如,您可以使用以下代碼將1000 Hz音調發出100毫秒的響聲:

            
              import winsound
winsound.Beep(1000, 100)  # Beep at 1000 Hz for 100 ms

            
          

接下來,您將學習如何使用該python-sounddevice模塊進行跨平臺音頻播放。

python-sounddevice

正如其文檔中所述,python-sounddevice“為PortAudio庫提供綁定,并提供一些便利功能來播放和記錄包含音頻信號的NumPy數組”。為了播放WAV文件,numpy而且soundfile需要安裝,打開WAV文件作為NumPy的陣列。

隨著python-sounddevice,numpy以及soundfile安裝,您現在可以讀取WAV文件作為與NumPy陣列和回放:

            
              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

            
          

該行包含sf.read()提取原始音頻數據,以及存儲在其RIFF標題中的文件的采樣率,并sounddevice.wait()確保腳本僅在聲音播放完畢后終止。

接下來,我們將學習如何使用pydub播放聲音。通過安裝正確的依賴項,它允許您播放各種音頻文件,并為您提供更多的音頻處理選項python-soundevice。

pydub

雖然pydub可以在沒有任何依賴性的情況下打開和保存WAV文件,但您需要安裝音頻播放包才能播放音頻。simpleaudio強烈建議,但是pyaudio,ffplay和avplay有其他選擇。

以下代碼可用于播放WAV文件pydub:

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

            
          

為了播放其他音頻類型,如MP3文件,ffmpeg或者libav應該安裝。看一看在文檔中pydub的說明。作為文檔中描述的步驟的替代,ffmpeg-python提供綁定ffmpeg,并可以使用pip安裝:

            
              $ pip install ffmpeg-python

            
          

隨著ffmpeg安裝,播放MP3文件,只需要在我們的前面的代碼一個小的變化:

            
              from pydub import AudioSegment
from pydub.playback import play

sound = AudioSegment.from_mp3('myfile.mp3')
play(sound)

            
          

使用該AudioSegment.from_file(filename, filetype)結構,您可以播放任何類型的支持音頻文件ffmpeg。例如,您可以使用以下方式播放WMA文件:

            
              sound  =  AudioSegment 。from_file ('myfile.wma' , 'wma' )

            
          

除了播放聲音文件之外,還pydub可以使用不同的文件格式保存音頻(稍后會詳細介紹),切片音頻,計算音頻文件的長度,淡入或淡出以及應用交叉淡入淡出。

AudioSegment.reverse()創建一個向后播放的AudioSegment的副本,該文檔描述為“對Pink Floyd有用,可以使用,以及一些音頻處理算法”。

pyaudio

            
              import pyaudio
import wave

filename = 'myfile.wav'

# Set chunk size of 1024 samples per data frame
chunk = 1024  

# Open the sound file 
wf = wave.open(filename, 'rb')

# Create an interface to PortAudio
p = pyaudio.PyAudio()

# Open a .Stream object to write the WAV file to
# 'output = True' indicates that the sound will be played rather than recorded
stream = p.open(format = p.get_format_from_width(wf.getsampwidth()),
                channels = wf.getnchannels(),
                rate = wf.getframerate(),
                output = True)

# Read data in chunks
data = wf.readframes(chunk)

# Play the sound by writing the audio data to the stream
while data != '':
    stream.write(data)
    data = wf.readframes(chunk)

# Close and terminate the stream
stream.close()
p.terminate()

            
          

您可能已經注意到,播放聲音pyaudio比使用您之前看到的庫播放聲音要復雜一些。這意味著如果您只想在Python應用程序中播放聲音效果,它可能不是您的首選。

但是,由于pyaudio為您提供了更多的低級控制,因此可以為輸入和輸出設備獲取和設置參數,并檢查CPU負載和輸入或輸出延遲。

它還允許您在回調模式下播放和錄制音頻,其中當需要播放或可用于錄制時需要新數據時調用指定的回調函數。pyaudio如果您的音頻需求不僅僅是簡單的播放,這些選項可以使用合適的庫。

現在您已經了解了如何使用許多不同的庫來播放音頻,現在是時候看看如何使用Python自己錄制音頻了。

錄制音頻

在python-sounddevice和pyaudio庫提供的方式來錄制音頻和Python。python-sounddevice記錄到NumPy數組和pyaudio記錄到bytes對象。這兩個都可以分別使用scipy和wave庫存儲為WAV文件。

python-sounddevice

python-sounddevice允許您錄制麥克風的音頻并將其存儲為NumPy陣列。這是一種方便的聲音處理數據類型,可以使用該scipy.io.wavfile模塊轉換為WAV格式進行存儲。確保安裝scipy以下示例的模塊(pip install scipy)。這會自動將NumPy安裝為其依賴項之一:

            
              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 

            
          

pyaudio

在本文的前面部分,您學習了如何通過閱讀來播放聲音pyaudio.Stream()。錄制音頻可以通過寫入此流來完成:

            
              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()

            
          

現在您已經了解了如何用python-sounddevice和記錄音頻pyaudio,您將學習如何將錄音(或任何其他音頻文件)轉換為一系列不同的音頻格式。

保存和轉換音頻

您之前看到可以使用該scipy.io.wavfile模塊將NumPy陣列存儲為WAV文件。該wavio模塊同樣允許您在WAV文件和NumPy數組之間進行轉換。如果您想以不同的文件格式存儲音頻,pydub并且soundfile派上用場,因為它們允許您讀取和寫入一系列流行的文件格式(例如MP3,FLAC,WMA和FLV)。

wavio

此模塊依賴于numpy并允許您將WAV文件讀取為NumPy陣列,并將NumPy陣列保存為WAV文件。

要將NumPy數組保存為WAV文件,您可以使用wavio.write():

            
              import wavio

wavio.write("myfile.wav", my_np_array, fs, sampwidth=2)

            
          

在此示例中,my_np_array包含音頻的NumPy數組fs是記錄的采樣率(通常為44100或44800 Hz),并且sampwidth是音頻的采樣寬度(每個采樣的字節數,通常為1或2個字節)。

soundfile

該soundfile庫可以讀寫所有支持的文件格式libsndfile。雖然它無法播放音頻,但它允許您將音頻轉換為FLAC,AIFF和一些不太常見的音頻格式。要將WAV文件轉換為FLAC,可以使用以下代碼:

            
              import soundfile as sf

# Extract audio data and sampling rate from file 
data, fs = sf.read('myfile.wav') 
# Save as FLAC file at correct sampling rate
sf.write('myfile.flac', data, fs)  

            
          

類似的代碼將用于轉換支持的其他文件格式libsndfile。

pydub

pydub讓您以任何ffmpeg支持的格式保存音頻,其中包括您日常生活中可能遇到的幾乎所有音頻類型。例如,您可以使用以下代碼將WAV文件轉換為MP3:

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

sound.export('myfile.mp3', format='mp3')

            
          

使用AudioSegment.from_file()是一種加載音頻文件的更通用的方法。例如,如果要將文件從MP3轉換回WAV,可以執行以下操作:

            
              from pydub import AudioSegment
sound = AudioSegment.from_file('myfile.mp3', format='mp3')

sound.export('myfile.wav', format='wav')

            
          

此代碼應適用于任何格式的音頻文件是ffmpeg支持。

結論:在Python中播放和錄制聲音
在本教程中,您學習了如何使用一些最流行的音頻庫來播放和錄制Python中的音頻。您還了解了如何以多種不同格式保存音頻。

你現在能夠:

播放各種音頻格式,包括WAV,MP3和NumPy陣列
將麥克風的音頻錄制到NumPy或Python陣列
將錄制的音頻存儲為各種格式,包括WAV和MP3
將聲音文件轉換為一系列不同的音頻格式


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲视频区 | 91欧美激情一区二区三区成人 | 天天天操 | 在线播放亚洲 | 久久久久久一级毛片免费野外 | 国产区视频在线观看 | 澳门av | 午夜在线| 五月婷婷丁香在线观看 | 日本中文字幕高清 | 在线观看91精品国产入口 | 999精品国产人妻无码系列久久 | 国产精品成人免费视频不卡 | 国产精品久久嫩一区二区免费 | 国产激情在线观看 | 国产日韩精品久久 | 在线亚洲一区二区 | 亚洲欧美日韩一级特黄在线 | 国产一区二区久久 | 国产在线视频2019最新视频 | 精品免费国产一区二区三区 | 日韩a在线看免费观看视频 五月天激情视频在线观看 成人97在线观看免费高清 | 日韩在线免费视频 | 亚洲激情91 | 视频精品久久 | 午夜影院免费视频 | 毛片免费观看视频 | 九九视频只有精品六 | 国产福利资源在线 | 中文字幕一区在线观看视频 | 日本AAA片爽快视频 波多在线 | 天天爽天天碰狠狠添 | 九九香蕉视频 | 欧美日韩一区二区在线 | 亚洲午夜国产精品无卡 | 一本一道久久a久久精品蜜桃 | 久草福利 | 无遮挡啪啪成人免费网站 | 天天操天天碰 | 国产无线乱码一区二三区 | 91麻豆精品一区二区三区 |