“实时获取声音信息”的版本间的差异

来自人工智能助力教育知识百科
跳转至: 导航搜索
实时获取声音信息
代码分享
 
(未显示同一用户的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)  # 使单次所画图线稍作停顿,便于观看