canvas 画录音波形图

随机数获取音量大小

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>
</head>
<style>
    * {
        padding: 0;
        margin: 0;
    }

    #myCanvas {
        width: 100%;
    }
</style>

<body>

    <canvas id="myCanvas" width="1000" height="300" style="border-bottom:1px solid #d3d3d3">
        您的浏览器不支持 HTML5 canvas 标签。</canvas>

    <script>

        var c = document.getElementById("myCanvas");
        var ctx = c.getContext("2d");
        ctx.translate(500, 150)
        var grad = ctx.createLinearGradient(-500, -150, -500, 150);
        grad.addColorStop(0, "red");
        grad.addColorStop(0.5, "blue");
        grad.addColorStop(1, "yellow");
        ctx.lineWidth = 1;

        function init(val) {
            // ctx.fillStyle = "#f00"
            // ctx.fillRect(-400, -150, 800, 300)
            ctx.clearRect(-400, -150, 1000, 300)
            ctx.beginPath()
            let m = 10
            let n = 3
            let len = 100
            let ran = 16
            ran = Math.random() * 100
            // ran = val
            console.log(ran);
            for (let i = len; i > 0; i--) {
                let x = -(i * m)
                // ran = Math.sin(ran * 10 * Math.PI / 180) * 60
                let y1 = (ran - i / 2) * n
                let y2 = -(ran - i / 2) * n
                // let y1 = Math.sin((ran - i) / 1) * 300
                // let y2 = -Math.sin((ran - i) / 1) * 300

                if (y1 < 0) y1 = 0
                if (y2 > 0) y2 = 0
                if (y1 > len) y1 = len
                if (y2 < -len) y2 = -len

                ctx.moveTo(x, y1);
                ctx.lineTo(x, y2);
            }
            for (let i = 0; i < len; i++) {
                let x = i * m
                // ran = Math.sin(ran * 10 * Math.PI / 180) * 60
                // console.log(ran);
                let y1 = (ran - i / 2) * n
                let y2 = -(ran - i / 2) * n
                // let y1 = Math.sin((ran - i)) * 100
                // let y2 = -Math.sin((ran - i)) * 100
                // console.log(y1, y2);

                if (y1 < 0) y1 = 0
                if (y2 > 0) y2 = 0
                if (y1 > len) y1 = len
                if (y2 < -len) y2 = -len

                ctx.moveTo(x, y1);
                ctx.lineTo(x, y2);

            }
        }
        init(4)
        ctx.strokeStyle = grad;
        ctx.stroke();

    </script>

</body>

</html>

效果图

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在使用Pyaudio进行录音和实时波形显示的过程中,首先需要导入Pyaudio库并创建一个音频流对象。可以通过设置相关参数,如采样率、声道数、采样格式等来配置音频流。接下来,可以使用Pyaudio提供的start_stream()方法来开始录音。 在录音的同时,我们可以通过不断地读取音频流中的数据来实现实时波形显示。可以使用Pyaudio的read()方法来从音频流中读取指定数量的音频数据。读取到的音频数据可以通过matplotlib库中的plot()方法来绘制波形图。只需要将读取到的数据传入plot()方法即可将其显示出来。 但是需要注意的是,Pyaudio读取到的音频数据是以二进制形式存储的。因此,在绘制波形图之前,我们还需要将其转换为可识别的格式。可以使用numpy库中的frombuffer()方法将二进制数据转换为数组格式。这样便可以方便地进行波形绘制。 另外,在进行实时波形显示的过程中,为了实现连续的波形显示,我们需要不断地更新绘制的数据。可以使用matplotlib库中的ion()和draw()方法来实现动态的像显示效果。ion()方法用于启动交互模式,使得绘制的像可以实时更新。而draw()方法则用于更新绘制的像。 综上所述,使用Pyaudio录音和实时波形显示的步骤如下: 1. 导入Pyaudio库和其他相关库。 2. 创建音频流对象,并配置相关参数。 3. 使用start_stream()方法开始录音。 4. 处理音频流中的数据,将其转换为可识别的格式。 5. 利用matplotlib库中的plot()方法绘制波形图。 6. 使用ion()方法启动交互模式,使用draw()方法实现动态更新。 7. 循环处理步骤4-6,实现实时波形显示。 8. 使用stop_stream()方法停止录音。 通过以上步骤,我们可以实现Pyaudio录音和实时波形显示的功能。 ### 回答2: Pyaudio是一个功能强大的Python库,可以用于录音和播放音频。要实现录音与波形实时显示,可以按照以下步骤进行操作: 1. 导入必要的库:首先需要导入pyaudio库和其他必要的库,比如numpy和matplotlib。 2. 创建录音流:使用pyaudio库创建一个音频流对象,并设置音频流的参数,如采样率、声道数等。 3. 定义回调函数:为音频流设置一个回调函数,该函数会在每次读取到音频数据时被调用。在回调函数中,可以对音频数据进行处理或保存。 4. 创建形界面:使用matplotlib库创建一个形界面,用于显示波形数据。 5. 实时显示波形:在回调函数中,将读取到的音频数据转换为波形数据,并通过形界面实时显示出来。 6. 开始录音:调用音频流对象的start_stream()方法,开始录音和实时显示波形。 7. 结束录音:调用音频流对象的stop_stream()方法,停止录音。 8. 关闭音频流:调用音频流对象的close()方法,关闭音频流。 9. 关闭形界面:调用形界面的关闭函数,关闭形界面。 总结起来,实现pyaudio录音与波形实时显示的过程主要包括设置音频流参数、定义回调函数、创建形界面、实时显示波形、开始录音、结束录音和关闭流和界面等步骤。按照这个流程,就可以实现录音过程中的波形实时显示。 ### 回答3: 使用pyaudio模块可以实现音频录制功能,并利用matplotlib库来实时显示音频波形。 首先需要安装pyaudio和matplotlib库,可以通过以下命令安装: ``` pip install pyaudio matplotlib ``` 接下来,可以使用以下代码来录制音频并实时显示波形: ```python import pyaudio import matplotlib.pyplot as plt import numpy as np chunk = 1024 # 缓冲区大小 format = pyaudio.paInt16 # 采样位数 channels = 1 # 声道数 rate = 44100 # 采样率 p = pyaudio.PyAudio() stream = p.open(format=format, channels=channels, rate=rate, input=True, frames_per_buffer=chunk) fig, ax = plt.subplots() x = np.arange(0, 2 * chunk, 2) line, = ax.plot(x, np.random.rand(chunk), 'r') ax.set_ylim(0, 255) ax.set_xlim(0, chunk) plt.xlabel('Sample') plt.ylabel('Amplitude') while True: data = stream.read(chunk) data_int = np.frombuffer(data, dtype=np.int16) line.set_ydata(data_int) fig.canvas.draw() fig.canvas.flush_events() plt.close() stream.stop_stream() stream.close() p.terminate() ``` 在这段代码中,首先定义了一些参数,包括缓冲区大小、采样位数、声道数和采样率等。 然后使用pyaudio模块创建一个输入流,并打开该流进行录制。通过pyaudio.PyAudio()可以创建一个PyAudio对象,用来初始化和终止音频流。使用stream.read(chunk)可以读取指定大小的音频数据。 接下来,利用matplotlib库创建一个形窗口,其中包含一个坐标轴对象和一个初始的空线对象。通过设置x轴和y轴的范围、添加标签等参数,可以使形显示更加合理。 在循环中,不断从输入流中读取音频数据,将数据转换为整型数组,并赋给线对象的ydata属性。然后通过调用fig.canvas.draw()和fig.canvas.flush_events()可以更新并刷新形窗口,实现实时显示音频波形。 最后需要关闭输入流、结束PyAudio对象,并关闭形窗口。可以通过stream.stop_stream()、stream.close()和p.terminate()实现。 以上就是使用pyaudio录音并实时显示波形的基本方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值