“实时获取声音信息”的版本间的差异
(→实时获取声音信息) |
(→代码分享) |
||
(未显示同一用户的1个中间版本) | |||
第2行: | 第2行: | ||
==实时收音的目的及意义== | ==实时收音的目的及意义== | ||
音乐测评的工作,有时会有实时录音并显示声音的音量、音高等信息这样的需求。下面展示实时获取声音数据的代码。 | 音乐测评的工作,有时会有实时录音并显示声音的音量、音高等信息这样的需求。下面展示实时获取声音数据的代码。 | ||
+ | |||
+ | ==代码分享== | ||
+ | |||
+ | <pre> | ||
+ | import matplotlib.pyplot as plt | ||
+ | import numpy as np | ||
+ | import pyaudio | ||
+ | |||
+ | # 创建音频实例 | ||
+ | p = pyaudio.PyAudio() | ||
+ | |||
+ | stream = p.open(format=FORMAT, channels=CHANNEL, rate=RATE, | ||
+ | input=True, frames_per_buffer=CHUNK) # 获取流 | ||
+ | |||
+ | # 数据可视化 | ||
+ | fig, ax = plt.subplots(figsize=(12, 3)) | ||
+ | x = np.arange(0, CHUNK) | ||
+ | line, = ax.plot(x, np.random.rand(CHUNK), color='#C04851') # 第一次画图线没有音频数据,故随机生成;ax.plot返回一组数据,我们只取line并持续更新它 | ||
+ | ax.set_xlim(0, CHUNK - 1) # 设置x坐标范围:单次处理数据量CHUNK | ||
+ | ax.set_ylim(-2 ** 15, 2 ** 15) # 设置y坐标范围:int8类型数值范围 | ||
+ | |||
+ | plt.ion() # i(intereactive)on作用:交互模式打开,以便更新图线 | ||
+ | plt.show() | ||
+ | |||
+ | while True: | ||
+ | # 从麦克风读取数据 | ||
+ | waveData = stream.read(CHUNK, exception_on_overflow=False) # 第二个参数设置意义:防止报错 | ||
+ | waveData = np.frombuffer(waveData, dtype=np.int16) # 将从流中读取的二进制数据转为int8 | ||
+ | # 显示音频波形图 | ||
+ | line.set_ydata(waveData) # 将实时收集的数据赋值给作图用的数组 | ||
+ | fig.canvas.draw() # 更新图线 | ||
+ | fig.canvas.flush_events() | ||
+ | plt.pause(0.01) # 使单次所画图线稍作停顿,便于观看 | ||
+ | |||
+ | </pre> |
2023年2月7日 (二) 10:38的最新版本
百科首页 | 3D虚拟世界 | 音乐与人工智能 | 人工智能机器人 | 关于我们 | 网站首页
实时收音的目的及意义
音乐测评的工作,有时会有实时录音并显示声音的音量、音高等信息这样的需求。下面展示实时获取声音数据的代码。
代码分享
import matplotlib.pyplot as plt import numpy as np import pyaudio # 创建音频实例 p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNEL, rate=RATE, input=True, frames_per_buffer=CHUNK) # 获取流 # 数据可视化 fig, ax = plt.subplots(figsize=(12, 3)) x = np.arange(0, CHUNK) line, = ax.plot(x, np.random.rand(CHUNK), color='#C04851') # 第一次画图线没有音频数据,故随机生成;ax.plot返回一组数据,我们只取line并持续更新它 ax.set_xlim(0, CHUNK - 1) # 设置x坐标范围:单次处理数据量CHUNK ax.set_ylim(-2 ** 15, 2 ** 15) # 设置y坐标范围:int8类型数值范围 plt.ion() # i(intereactive)on作用:交互模式打开,以便更新图线 plt.show() while True: # 从麦克风读取数据 waveData = stream.read(CHUNK, exception_on_overflow=False) # 第二个参数设置意义:防止报错 waveData = np.frombuffer(waveData, dtype=np.int16) # 将从流中读取的二进制数据转为int8 # 显示音频波形图 line.set_ydata(waveData) # 将实时收集的数据赋值给作图用的数组 fig.canvas.draw() # 更新图线 fig.canvas.flush_events() plt.pause(0.01) # 使单次所画图线稍作停顿,便于观看