用Python 播放音頻與錄音,我是有多無聊?

2021-02-14 戀習Python

這是戀習Python推薦的第87篇好文

來源:Python高級編程

作者:flywind

一到周末,總覺得不知道做什麼,覺得無聊狠!

之前說了太多度假、太多遠方、太多說走就走的旅行,可問題是,程序猿特麼的並不是說走真的就能走呀,指不定啥時伺服器崩了呢?

所以,我無聊的蛋疼,與大家一起,用Python 為自己錄一段動聽的音頻,然後葛優躺在搖椅上,聽聽自己的音頻,此處省略一萬字。。。

音頻預處理

主要介紹些音頻基本處理方式,為接下來的語音識別打基礎。

三種播放音頻的方式

使用 python 播放音頻有以下幾種方式:

os.system()

os.system(file) 調用系統應用來打開文件,file 可為圖片或者音頻文件。

缺點:要打開具體的應用,不能在後臺播放音頻。

pyaudio

安裝:pip install pyaudio

官方提供了播放音頻與錄音的 api ,使用十分方便,只要把Filename更改為你的音頻文件的文字,就可以播放音頻了。

"""PyAudio Example: Play a WAVE file."""

import pyaudio
import wave


CHUNK = 1024
FILENAME = '你的音頻文件'

def play(filename = FILENAME):
   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 != b'':
       stream.write(data)
       data = wf.readframes(CHUNK)

   stream.stop_stream()
   stream.close()

   p.terminate()

jupyter notebook

在 jupyer notebook 中播放音頻可以使用以下函數:

import IPython.display as ipd
ipd.Audio(文件名)

幾種讀取音頻的方式

python 有很多讀取音頻文件的方法,內置的庫 wave ,科學計算庫 scipy, 和方便易用的語音處理庫 librosa。

下面將介紹分別使用這幾種庫讀取音頻文件:

安裝

wave 是內置庫直接導入即可。

scipy: pip install scipy

librosa: pip install librosa

使用

wave.open:

參數 path 為文件名,mode 為打開方式

以'rb'方式打開文件返回一個 Wave_read 對象,而以'wb'方式打開文件返回一個 Wave_write 對象。

scipy.io.wavfile:

參數 path 為文件名

返回 rate : 採樣率(每秒採樣點的個數),data : 音頻數據

librosa.load:

參數 path 為文件名

返回 y 為音頻數據,sr 為採樣率

# read wav file from path
from scipy.io import wavfile
import librosa
import pyaudio

# wave
file = wave.open(path,'rb')
# wavfile
rate, data = wavfile.read(path)
# librosa
y, sr = librosa.load(path)

下面演示一個使用 wavfile 讀取音頻文件並且畫出波形的例子

首先要計算音頻到底持續了多長時間,wave 的 shape 就是總的採樣點個數,除以採樣頻率可以得到持續的總時間(秒),乘1000得到總持續時間(毫秒)。接著通過 np.linsapce 產生時間的序列,最後使用 matplotlib 畫出圖像。

from scipy.io import wavfile
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

# 一秒採樣數
sr, wave = wavfile.read('D://QQPCMgr/Desktop/python3/skip.wav')
sample_number = wave.shape[0]
total_time = int(sample_number / sr * 1000)
time_series = np.linspace(0,total_time,sample_number)
fig, ax = plt.subplots(1, 1)
ax.plot(time_series, wave)
ax.set_title('Time*Amplitude')
ax.set_xlabel('Time/ms')
ax.set_ylabel('Amplitude/dB')

最後再借用 pyaudio 的 api 我們可以實現連續錄音功能:

python 實現錄音功能

其中,函數 multi_record每結束一次錄音會詢問 「是否進行下一次錄音?」,按回車就可以進行下一次錄音了。

import wave
import pyaudio
import matplotlib.pyplot as plt
import time

CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5


def record(filename='output.wav'):
   """官方錄音教程
   """
   
   p = pyaudio.PyAudio()
   
   stream = p.open(format=FORMAT,
                   channels=CHANNELS,
                   rate=RATE,
                   input=True,
                   frames_per_buffer=CHUNK)
   
   print("* recording")
   
   frames = []

   for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
       data = stream.read(CHUNK)
       frames.append(data)
   
   print("* done recording")
   
   stream.stop_stream()
   stream.close()
   p.terminate()
   
   wf = wave.open(filename, 'wb')
   wf.setnchannels(CHANNELS)
   wf.setsampwidth(p.get_sample_size(FORMAT))
   wf.setframerate(RATE)
   wf.writeframes(b''.join(frames))
   wf.close()


def multi_record(num=3):
   """implement 多次錄音"""
   for i in range(1,num+1):
       print('第{}次錄音準備'.format(i))
       filename = 'record_{}.wav'.format(i)
       record(filename)
       time.sleep(second)
       _ = input('進行下一次錄音?')


def main():
   multi_record()

if __name__ == '__main__':
   main()

完畢!

相關焦點

  • 5個無聊Python程序,用Python整蠱你的朋友們吧
    打包命令如下:過程中如果出現 BUG(一般是編碼錯誤),文末有解決方案無聊程序之一while True: n = input("猜猜我在想啥?")  print("猜錯嘍")你的朋友將永遠無法知道你在想什麼。當然我安裝 360 之後,程序沒了。
  • Python處理音頻文件的實用姿勢
    人們用不同樂器、不同力度,在一段連續時間裡敲擊,就組合出了時間和頻率的關係。一切物體都有自己的頻率,所以整個世界也可以理解為一篇樂章。install pydub使用建議:日常用pydub足夠應付,更強大的信號處理則需要librosa,但有一定數學門檻,需要了解信號處理原理,掌握傅立葉變換等基本算法。
  • 音頻應用知識之:多軌錄音和多軌縮混
    1、多軌錄音——各種樂器和人聲的錄音與疊加錄音的過程,每種錄音都有各自的「音軌」。
  • 唱歌音頻用錄音軟體哪個好?具體錄製方法?
    日常生活中唱歌是很多人的愛好,可以為我們的生活帶來很多樂趣,也有很多人喜歡把自己的歌聲分享給大家,所以想要用錄音軟體,把自己的歌聲錄製下來,分享給一些朋友,那麼唱歌音頻用錄音軟體哪個好?具體錄製方法?我們今天就來看看具體如何錄製。
  • 用了這麼多錄音轉文字工具,我只推薦這2款,好用到尖叫!
    我是叨叨君~最近很多叨友讓我推薦好用的錄音轉文字工具,說整理錄音文件太痛苦了,簡直就是大腦與聽力的雙重折磨,因為你永遠不知道還要反覆的聽多少次才能整理完。為了解救大家於水火之中,今天就來跟大家推薦2款好用到尖叫的錄音轉文字工具。
  • 音頻應用知識:歌手在錄音棚如何錄音的流程
    試聽結束後,對於個別有問題進行逐一補錄, 對於有一定唱功的您來說,更會指導你唱出音樂裡內在的聲音表情。  最後一步,歌手在錄完音之後,一定要從頭到尾聽一遍,確認沒有問題之後,在混縮後導出歌曲。如何錄音以及音頻後期處理經驗AA3.0的前身是AA1.5,是一款功能齊全,佔用資源少,界面清新,操作容易,支持機器配置不高的音效卡,和SAM8.0錄音編輯軟體相比,有他的過人之處。那麼如何用好這款錄音軟體呢?
  • 多軌錄音的明智選擇——ESI U108 Pre 機架音頻接口評測
    2018上海樂展首次亮相的U108 Pre機架音頻接口為音樂製作行業提供了一個非常誘人的多軌錄音解決方案,該音頻接口允許同時接入
  • 如何用錄音軟體AU2020給音頻消除噪音?只需簡單幾步你也可以辦到!
    最近有好多朋友私信我,最近頭條音頻頻道單價很高,比視頻收益還要高,大家紛紛想通過自已錄製音頻上傳的方式,來獲取收益。問到如何才能給錄好的音頻文件降噪,還原出自已真實的聲音,得到一個好的音質。而對於平時就錄下視頻拍個抖音的朋友,也不想下本錢買音效卡,專業的錄音設備。
  • 人生苦短,我用Python
    我看麻省理工授課教授讀的是『拍賞』,我覺得國內大多是讀『拍森』吧。2017年python排第一也無可爭議,比較AI第一語言,在當下人工智慧大數據大火的情況下,python無愧第一語言的稱號,至於C、C++、java都是萬年的老大哥了,在代碼量比較方面,小編相信java肯定是完爆其它語言的。
  • 谷歌推出錄音程序Recorder,智能處理海量音頻信息
    對於冗長的會議、複雜的課程、高強度的採訪來說,記筆記很多時候已經無法滿足海量湧來的信息了,用錄音筆或者手機錄音成為記錄信息的常用方式。
  • 如何用PYTHON代碼寫出音樂
    我一直在做這樣的嘗試,就是通過人工智慧算法實現機器自動的作詞和編曲(在這裡預告下,通過深度學習寫歌詞已經實現了,之後會分享給大家),本文我們主要聊下如何寫曲。說到用代碼寫曲子,有一個東西大家一定要了解就是MIDI。MIDI是一種樂器數字接口,是編曲界最廣泛的音樂標準格式。MIDI並不是真正意義上的音樂文件,大家可以把它理解成樂譜,需要有環境編譯MIDI文件,才可以生成音樂。
  • 配音員在家錄樣音的錄音音頻軟體?
    配音員在家錄樣音的錄音音頻軟體?
  • 專業錄音音頻品牌
    錄音棚專業錄音音頻品牌 一、
  • 音頻應用錄音話筒—鐵三角
    Audio-Technica源於日本,也是目前知名的耳機及話筒等音頻設備製造廠商。其適用於錄音室錄音時用的高精度話筒主要是AT系列,也是音樂製作及錄音工作室常用品牌系列之一。其AT系列還細分為AT50/40/30/20等小系列,50係為旗艦級產品,40為高品質級,30為中級,20為入門級,和寶馬汽車的7/5/3/2系一個道理。整體感覺(哎~又是感覺,最怕說感覺這虛無縹緲的玩意。。)
  • 我要當主播,不會錄音怎麼破?!
    ——在主界面(有大旋鈕的界面)點擊三個小按鈕的最右邊那個(有「錄製」標示的按鈕),就能進入錄音界面咯。Q:支持的音頻格式(什麼格式的音樂才可以被插入節目呢?)——暫時只支持mp3和m4a格式的音頻文件哦 Q:怎麼添加/插入音樂呢?——進入錄音界面後,界面中間有兩個音樂符號,點擊加號就可以選擇音樂了。
  • 實操課 | 劇院音頻設備該如何用?
    若有錄音的需求,則選擇調音臺的輸出母線接口連接到MD機的模擬平衡輸入端。常用控制按鈕:播放、暫停、停止、前進、後退、錄音。A·Pause功能:自動暫停功能,指的是當前歌曲播放完後到了下一首歌曲開始會自動暫停。該功能在演出中比較常用。
  • 音頻製作軟體錄音及編輯製作推薦
    音頻製作軟體,可以錄音及編輯製作,大致分為單軌和多軌。單軌軟體只能錄音,不能配樂。
  • iOS 錄音、音頻的拼接剪切以及邊錄邊壓縮轉碼
    總體內容1、錄音實現2、錄音的編輯 (拼接音頻:可以設置多段,音頻的剪切:按照時間段剪切
  • 有聲有色還原音效,3D錄音耳機你用過嗎?
    左側的一邊有調節音樂曲目的後退/前進按鍵,還有個播放/暫停鍵,而且當手機來電時直接用這顆按鍵進行接聽。右側的一邊按鍵具有音量增加/減少,最小面帶有紅點的鍵則為我們的的錄音鍵。日常使用過程伴有指示燈進行閃爍。說到底是一款藍牙耳機,日常供電還需要通過USB接口連接進行供電,這樣的充電方式現在是很常見的了。
  • 錄音軟體有哪些值得使用的?簡單好用的電腦錄音軟體分享!
    關於錄音軟體有哪些值得使用的?簡單好用的電腦錄音軟體分享!這兩個問題最近很多人想了解,電腦錄音以前大家都喜歡用電腦自帶的,慢慢發現自帶的軟體錄製效果很差。每次都要錄製好幾遍才能用,現在市面上好用的錄音軟體不多,迅捷錄音軟體算一款,馬上來瞧瞧如何用軟體錄製音頻吧!