Python——使用wave & pyaudio录音

一、编程之前

需要pip install wave和安装pyaudio库,开启麦克风
pyaudio安装经常出错的,参考以下教程

–>pyaudio安装错误解决方法<–

二、使用wave & pyaudio录音

import wave,pyaudio

#设定采样率、16位深度、声道、数据包大小、录制长度
RATE = 16000
FORMAT = pyaudio.paInt16
CHANNELS = 2
CHUNK = 1024
#实际录制长度=设置长度-1
RECODE_SECONDS = 5

def recode_fn(filename):
    p = pyaudio.PyAudio()
    #打开流
    stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)
    frames = []
    #音频写入列表
    for i in range(int(RATE / CHUNK * RECODE_SECONDS)):
        data = stream.read(CHUNK)
        frames.append(data)
    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()

if __name__ == "__main__"
	recode_fn("demo.wav")

欢迎在评论区交流
感谢浏览

### 关于 PyAudio 的教程与使用指南 #### 安装 PyAudio 及其依赖项 对于 macOS 用户而言,建议先通过 Homebrew 安装 PortAudio 库,之后再利用 pip 命令完成 PyAudio 的安装[^1]。 ```bash brew install portaudio pip install pyaudio ``` #### 利用 PyAudio 进行基本操作 PyAudio 提供了一套简单易用的应用程序接口(API),能够方便开发者获取来自麦克风的数据并即时回放经过处理的声音信号。下面给出一段基础示例代码用于展示如何打开音频流以及记录几秒钟内的声音片段: ```python import pyaudio import wave CHUNK = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 2 RATE = 44100 RECORD_SECONDS = 5 WAVE_OUTPUT_FILENAME = &quot;output.wav&quot; p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) print(&quot;* recording&quot;) frames = [] for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) frames.append(data) print(&quot;* done recording&quot;) stream.stop_stream() stream.close() p.terminate() wf = wave.open(WAVE_OUTPUT_FILENAME, &#39;wb&#39;) wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b&#39;&#39;.join(frames)) wf.close() ``` 这段 Python 脚本会启动录音功能五秒并将录制下来的内容保存成 WAV 文件格式存储到本地磁盘上[^2]。 #### 实现更复杂的功能&mdash;&mdash;实时音效变换 除了上述的基础用途之外,借助 PyAudio 开发者还可以实现更加复杂的场景比如创建一个可以改变说话人嗓音效果的小工具。这通常涉及到对原始采样点做各种数学运算或是滤波器设计等工作,在此过程中 FFT (快速傅里叶变换) 是一种常用的技术手段之一[^3]。 ```python import numpy as np from scipy.io import wavfile import matplotlib.pyplot as plt def apply_effect(signal): &quot;&quot;&quot;Apply some effect to the signal.&quot;&quot;&quot; # Example: shift pitch by changing playback speed slightly. factor = 0.9 # Change this value to adjust pitch up or down new_length = int(len(signal)*factor) y_resampled = np.interp( np.linspace(0, len(signal)-1, num=new_length), np.arange(len(signal)), signal).astype(np.int16) return y_resampled # Read an existing .wav file and modify it with our function above sample_rate, samples = wavfile.read(&#39;input_sound_file.wav&#39;) modified_samples = apply_effect(samples[:, 0]) # Assuming stereo audio; take one channel only. plt.plot(modified_samples[:100]) plt.title(&quot;Modified Signal Waveform&quot;) plt.show() # Save modified sound back into a new .wav file wavfile.write(&#39;altered_output.wav&#39;, sample_rate, modified_samples) ``` 该段代码展示了怎样加载现有的 WAV 文件并对其中的一轨声道施加特定的效果(这里是改变了播放速度从而影响到了音高),最后再次导出了修改后的版本作为新的 WAV 文件输出。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值