Gradio的Audio组件介绍

news2024/11/19 21:21:33

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

博主原文链接:https://www.yourmetaverse.cn/nlp/332/

请添加图片描述

(封面图由文心一格生成)

Gradio的Audio组件介绍

声音是我们日常生活中不可或缺的一部分,它可以激发情感、传达信息和创造美妙的体验。今天,我们将介绍如何使用Gradio的Audio组件进行音频处理和展示。

在这个数字化时代,我们可以通过Gradio的Audio组件轻松地上传、录制和播放音频。无论是处理用户上传的音频数据还是展示音频输出,Gradio的Audio组件都能提供便捷的解决方案。

作为输入,Gradio的Audio组件接受上传的音频数据。根据type参数的不同,它将上传的音频数据作为(sample rate in Hz, audio data as a 16-bit int array whose values range from -32768 to 32767)的元组或字符串文件路径进行处理。

作为输出,Gradio的Audio组件期望(sample rate in Hz, audio data as a float or int numpy array)的元组或字符串文件路径或URL作为输入,用于展示音频数据。

为了更好地理解Gradio的Audio组件,让我们看一个实际的例子。我们可以利用该组件分析音频文件中的主音符。通过使用傅里叶变换和音频信号处理技术,我们可以计算出音频中各个音符的音量,并将其以字典形式返回。

from math import log2, pow
import os

import numpy as np
from scipy.fftpack import fft

import gradio as gr

A4 = 440
C0 = A4 * pow(2, -4.75)
name = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"]


def get_pitch(freq):
    h = round(12 * log2(freq / C0))
    n = h % 12
    return name[n]


def main_note(audio):
    rate, y = audio
    if len(y.shape) == 2:
        y = y.T[0]
    N = len(y)
    T = 1.0 / rate
    yf = fft(y)
    yf2 = 2.0 / N * np.abs(yf[0 : N // 2])
    xf = np.linspace(0.0, 1.0 / (2.0 * T), N // 2)

    volume_per_pitch = {}
    total_volume = np.sum(yf2)
    for freq, volume in zip(xf, yf2):
        if freq == 0:
            continue
        pitch = get_pitch(freq)
        if pitch not in volume_per_pitch:
            volume_per_pitch[pitch] = 0
        volume_per_pitch[pitch] += 1.0 * volume / total_volume
    volume_per_pitch = {k: float(v) for k, v in volume_per_pitch.items()}
    return volume_per_pitch


demo = gr.Interface(
    main_note,
    gr.Audio(source="microphone"),
    gr.Label(num_top_classes=4),
    examples=[
        [os.path.join(os.path.dirname(__file__),"audio/recording1.wav")],
        [os.path.join(os.path.dirname(__file__),"audio/cantina.wav")],
    ],
    interpretation="default",
)

if __name__ == "__main__":
    demo.launch()

通过Gradio的界面定义,我们可以创建一个与用户交互的音频处理应用程序。用户可以上传音频文件,应用程序将自动计算并显示主音符的音量分布。这样,用户就可以更好地了解音频文件的特征和结构。

除了音频处理外,Gradio的Audio组件还可以用于音频播放。只需将组件用作输出,提供音频文件的路径或URL,即可在界面上播放音频。这对于展示音乐、声效或其他音频内容非常有用。

通过使用Gradio的Audio组件,我们可以轻松处理和展示音频数据,从而开启声音的无限可能。无论是进行音频分析还是提供交互式音频播放,Gradio的Audio组件都是一个强大而灵活的工具。

参数介绍

以下是Gradio的Audio模块的参数表格:

参数数据类型默认值描述
valuestr | tuple[int, np.ndarray] | Callable | NoneNoneAudio组件的默认值,可以是路径、URL或者包含(sample rate, audio data)的元组。如果是可调用对象,每次应用程序加载时会调用该函数来设置组件的初始值。
sourcestr“upload”音频的来源。"upload"表示用户可以上传音频文件,"microphone"表示使用麦克风输入。
typestr“numpy”音频文件在传递给预测函数之前的格式。"numpy"表示将音频转换为(sample rate, audio data)的元组,"filepath"表示传递一个包含音频的临时文件的路径。
labelstr | NoneNone组件在界面中的名称。
everyfloat | NoneNone如果value是可调用对象,在客户端连接打开时每隔指定秒数运行函数。否则没有影响。需要启用队列。可以通过此组件的 .load_event 属性访问事件。
show_labelboolTrue如果为True,将显示标签。
containerboolTrue如果为True,将在容器中放置组件,提供额外的边框间距。
scaleint | NoneNone相对于相邻组件的宽度比例。例如,如果组件A的scale=2,组件B的scale=1,则组件A的宽度是组件B的两倍。应该是一个整数。
min_widthint160最小像素宽度,如果屏幕空间不足以满足此值,将会换行。如果某个scale值导致该组件比min_width更窄,则优先考虑min_width参数。
interactivebool | NoneNone如果为True,允许用户上传和编辑音频文件;如果为False,只能用于播放音频。如果未提供,则根据组件用作输入还是输出进行推断。
visibleboolTrue如果为False,将隐藏组件。
streamingboolFalse如果在“live”界面中使用,并且source为“microphone”,则设置为True,将自动流式传输麦克风视频。
elem_idstr | NoneNone可选的字符串,用作此组件在HTML DOM中的id。可用于定位CSS样式。
elem_classeslist[str] | str | NoneNone可选的字符串列表,用作此组件在HTML DOM中的类。可用于定位CSS样式。
formatLiteral[‘wav’, ‘mp3’]“wav”保存音频文件的文件格式。可以选择’wav’或’mp3’。wav文件是无损的,但文件大小通常较大。mp3文件通常较小。默认为wav。适用于组件用作输入(当type为"format"时)和输出。
autoplayboolFalse如果为True,将自动播放音频。

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/680959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ImGUI项目建立(cmake+MinGW64)

Dear ImGUI ImGui是一个轻量级的C图形界面库,它可以用于创建各种交互式的工具和编辑器。具有跨平台、高性能的特点。 ImGUI自身不能创建窗口,需要使用Win32API或glfw或SDL等工具来创建窗口,另外需要使用OpenGL或DirectX、vulkan用于渲染图形…

excel数据的编排与整理——表格结构的整理(一)

excel数据的编排与整理——表格结构的整理(一) 1 快速移动一列数据到指定位置 1.1 移动到相邻行 1.1.1 题目内容 1.1.2 选中年龄列➡移动到左侧直到出现十字箭头 1.1.3 按下shift键和左键➡移动到指定位置,直到出现"T"字形 1.1.4 松开鼠标左键后,移动就完成了 1.2…

Debian 12中安装Rstudio

1.Debian 12中安装R 打开终端,执行命令:#apt search r-base (注:此图为安装r-base后再来截图的),Debian 12官方源中默认为r-base 4.2.2,如果想安装最新版(当前最新版为R-4.3.0),可参考上次写的博文“Debi…

thinkphp 反序列化漏洞

文章目录 配置xdebug反序列化漏洞利用链详细分析poc1(任意文件删除)poc2(任意命令执行) 补充代码 配置xdebug php.ini [Xdebug] zend_extensionD:/phpstudy_pro/Extensions/php/php7.3.4nts/ext/php_xdebug.dll xdebug.modedebu…

Windows系统下安装Hadoop

文章目录 安装步骤环境验证 前面我们已经讲过了在 Linux下安装配置Hadoop环境,还没看过的可以先去了解一下安装流程。今天我们来看一下如何在Window下安装Hadoop,这其实和在Linux下的安装都是大同小异的。下面我们具体来看一下安装步骤。 安装步骤 首先…

pytorch安装教程(Ubuntu22.04.1,Anaconda3-2023.03)

本文主要讲述了在Linux系统中,通过anaconda安装pytorch的具体步骤,即需要在Ubuntu已经安装好anaconda,其安装步骤可以参考此篇博客:Ubuntu安装Anaconda详细步骤(Ubuntu22.04.1,Anaconda3-2023.03&#xff0…

数据结构期末总结

数据结构绪论 数据结构的概念 数据结构 : 数据结构是相互之间存在一种或多种特定关系的数据元素的集合数据结构研究的问题 :数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科抽象数据类型ADT&#xff1a…

JWT漏洞

JWT介绍 1.1 JWT概念 JSON Web Token(JWT) 是一个开放标准。它定义了一种紧凑而独立的方法,用于在各方之间安全地将信息作为JSON对象传输。由于此信息是经过数字签名的,因此可以被验证和信任。可以使用secret(HMAC算法)或使用“…

SwinTransformer细节总结

SwinTransformer可以看成是披着ResNet外壳的vision transformer,swin 就是两个关键词:patch 多尺度。下面结合code来说一些重点的细节: 总览图 这里W-MSA缩写是window-multi head self attention,SW-MSA缩写是shifted window-mu…

JDK 8到JDK 17都有哪些吸引人的特性?

从JDK 8到JDK 17,Java语言和平台经历了许多变化和改进,引入了许多吸引人的新特性和功能。在这里,给大家列举一些我认为最有趣或最有用的新特性,并会以实际使用案例为大家展示新用法。希望大家多多点赞关注!&#xff01…

C语言的switch case函数

文章目录 1 函数结构2 执行过程3 break关键字4 补充说明参考 1 函数结构 switch 是另外一种选择结构的语句,用来代替简单的、拥有多个分枝的 if else 语句,基本格式如下: switch(表达式){ case 整型数值1: 语句 1; case 整型数值2: 语句 2; …

极致呈现系列之:Echarts词云图的数据共振

目录 什么是词云图词云图的特性及应用场景词云图的特性词云图的应用场景 Echarts中词云图的常用属性vue3中创建词云图 什么是词云图 词云图(Word Cloud)是一种以文字的形式展示数据的可视化图表。它通过将各个文字按照一定的规则排列,并根据…

车载软件架构 —— 闲聊几句AUTOSAR OS(六)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标准。到最…

centos版本的EDA虚拟机搭建2

这次教程主要介绍centos的必备软件的安装。 0、参考博客 1、VMware下CentOS 7虚拟机的安装 2、搭建属于自己的数字IC EDA环境(二):搭建Centos的基本使用环境和工具 3、cenos7基本配置 1、git安装 sudo yum install -y git2、gvim安装 su…

从大型语言模型LLM走向人工通用智能AGI的改进方向(public)

从大型语言模型走向人工通用智能AGI 返回论文和资料目录 1.导读 这篇博客主要基于《Sparks of Artificial General Intelligence: Early experiments with GPT-4》文中第9和第10节、以及我自己对当前LLM和AGI的理解。给出大型语言模型走向AGI时 改进的方向。 2.14个问题及改…

详解:阿里邮箱_阿里企业邮箱_阿里邮箱企业版

阿里邮箱是阿里云自主研发的,基于飞天平台自主研发的云原生分布式邮箱系统,阿里邮箱提供免费版、标准版、尊享版和集团版,企业邮箱版本不同支持的账号数也不同,共享网盘容量和个人网盘容量均不同,阿里云百科来详细介绍…

工厂方法模式(Factory Method)

别名 虚拟构造函数(Virtual Constructor)。 定义 工厂方法是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。 前言 1. 问题 假设你正在开发一款物流管理应用。最初版本只能处理卡车运…

【85 backtrader-cs因子测试的一些高级技巧-2】使用cython、c语言和c++加速某些函数的计算

在上一篇文章:【85 backtrader-cs因子测试的一些高级技巧】使用numba加速某些函数的计算中,使用了numba改进某些函数,实现加速,在这一篇文章中,尝试接着上一篇文章的主题,继续尝试用cython,c语言和c++尝试改进decayliear函数的计算速度。 结论: 从图上似乎可以得到下面…

Java程序性能优化技巧

1、慎用异常 在Java软件开发中,经常使用 try-catch 进行错误捕获,但是,try-catch 语句对系统性能而言是非常糟糕的。虽然在一次 try-catch中,无法察觉到它对性能带来的损失,但是,一旦try-catch被应用于循环…

从零开始 verilog 以太网交换机(五)帧合路单元的设计与实现

从零开始 verilog 以太网交换机(五)帧合路单元的设计与实现 🔈声明: 😃博主主页:王_嘻嘻的CSDN主页 🧨 从零开始 verilog 以太网交换机系列专栏:点击这里 🔑未经作者允许…