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