🎵 Streamlit Advanced Audio - EN



README_CN.md
Features
While the original audio
component in Streamlit provides basic audio playback functionality, it lacks advanced features such as style customization and current playback time tracking.
Feature | audix | st.audio |
---|
Waveform Visualization | ✅ | ❌ |
Custom Time Region | ✅ | ❌ |
Playback Status | ✅ | ❌ |
Custom Appearance | ✅ | ❌ |
Multiple Format Support | ✅ | ✅ |
URL Support | ✅ | ✅ |
File Upload | ✅ | ✅ |
The audix
component, built with react
, wavesurfer.js
, and ant design
, offers the following features:
[!NOTE]
audix
means audio
+ extra
❌ Current limitations:
More DEMOs
Refer to: advanced-audio-example.streamlit.app
Installation
Local installation:
git clone https://github.com/keli-wen/streamlit-advanced-audio
cd streamlit-advanced-audio
pip install -e .
PyPI installation:
pip install streamlit-advanced-audio
Basic Usage
- Basic playback:
from streamlit_advanced_audio import audix
audix("path/to/your/audio/file.wav")
audix("https://example.com/audio.mp3")
import numpy as np
sample_rate = 44100
audio_array = np.sin(2 * np.pi * 440 * np.linspace(0, 1, sample_rate))
audix(audio_array, sample_rate=sample_rate)
- Custom waveform styling and playback status get:
from streamlit_advanced_audio import audix, WaveSurferOptions
options = WaveSurferOptions(
wave_color="#2B88D9",
progress_color="#b91d47",
height=100,
bar_width=2,
bar_gap=1
)
result = audix(
"audio.wav",
wavesurfer_options=options
)
if result:
current_time = result["currentTime"]
selected_region = result["selectedRegion"]
is_playing = result["isPlaying"]
st.write(f"Current Time: {current_time}s")
st.write(f"Is Playing: {is_playing}")
if selected_region:
st.write(f"Selected Region: {selected_region['start']} - {selected_region['end']}s")
- Add custom regions and customize regions style:
from streamlit_advanced_audio import audix, CustomizedRegion, RegionColorOptions
region_colors = RegionColorOptions(
interactive_region_color="rgba(160, 211, 251, 0.4)",
start_to_end_mask_region_color="rgba(160, 211, 251, 0.3)"
)
custom_regions = [
CustomizedRegion(start=6, end=6.5, color="#00b89466"),
CustomizedRegion(start=7, end=8, color="rgba(255, 255, 255, 0.6)")
]
result = audix(
"audio.wav",
start_time=0.5,
end_time=5.5,
mask_start_to_end=True,
region_color_options=region_colors,
customized_regions=custom_regions
)
- Set playback interval and looping:
audix(
"audio.wav",
start_time="1s",
end_time="5s",
loop=True,
autoplay=False
)
Development
This project is based on the Streamlit Component Templates.
For development details, please refer to the Quickstart section.
Here is the development guide:
- Ensure you have Python 3.6+, Node.js, and npm installed.
- Clone this project.
- Create a new Python virtual environment:
cd streamlit-advanced-audio
python -m venv venv
source venv/bin/activate
pip install streamlit
- Initialize and run the frontend component template:
cd streamlit-advanced-audio/frontend
npm install
npm run start
- From another terminal, run the component's Streamlit app (in development, set
__init__.py
中的 _RELEASE
to False
):
cd streamlit-advanced-audio
. venv/bin/activate
pip install -e .
streamlit run example.py
- Modify the frontend code:
streamlit-advanced-audio/frontend/src/
- Modify the backend code:
streamlit-advanced-audio/__init__.py
[!IMPORTANT]
You can use the following command to build and lint the project:
cd streamlit-advanced-audio/frontend
npm install
npm run build
cd ../../
bash lint.sh
Pull requests for further improvements are welcome!
Acknowledgments
This project builds upon several excellent open-source solutions:
🎵 Streamlit Advanced Audio - CN



README.md
功能与特性
原始 streamlit 中的 audio
组件提供了基本的音频播放功能,但是缺乏一些高级的特性,比如缺乏样式定制,无法获取当前播放的时间等。
Feature | audix | st.audio |
---|
Waveform Visualization | ✅ | ❌ |
Custom Time Region | ✅ | ❌ |
Playback Status | ✅ | ❌ |
Custom Appearance | ✅ | ❌ |
Multiple Format Support | ✅ | ✅ |
URL Support | ✅ | ✅ |
File Upload | ✅ | ✅ |
audix
(audix
是 audio
+ extra
的缩写) 组件基于 react
,wavesurfer.js
和 ant design
开发,提供了如下的功能:
❌ 目前可能存在的不足之处:
更多 DEMO
可参考: advanced-audio-example.streamlit.app
安装与使用
从本地安装:
git clone https://github.com/keli-wen/streamlit-advanced-audio
cd streamlit-advanced-audio
pip install -e .
从 PyPI 安装:
pip install streamlit-advanced-audio
基础使用示例
- 基本播放功能:
from streamlit_advanced_audio import audix
audix("path/to/your/audio/file.wav")
audix("https://example.com/audio.mp3")
import numpy as np
sample_rate = 44100
audio_array = np.sin(2 * np.pi * 440 * np.linspace(0, 1, sample_rate))
audix(audio_array, sample_rate=sample_rate)
- 自定义波形样式以及播放状态获取:
from streamlit_advanced_audio import audix, WaveSurferOptions
options = WaveSurferOptions(
wave_color="#2B88D9",
progress_color="#b91d47",
height=100,
bar_width=2,
bar_gap=1
)
result = audix(
"audio.wav",
wavesurfer_options=options
)
if result:
current_time = result["currentTime"]
selected_region = result["selectedRegion"]
isPlaying = result["isPlaying"]
st.write(f"当前播放时间: {current_time}秒")
st.write(f"是否正在播放: {isPlaying}")
if selected_region:
st.write(f"选中区域: {selected_region['start']} - {selected_region['end']}秒")
- 自定义区域及颜色:
from streamlit_advanced_audio import audix, CustomizedRegion, RegionColorOptions
region_colors = RegionColorOptions(
interactive_region_color="rgba(160, 211, 251, 0.4)",
start_to_end_mask_region_color="rgba(160, 211, 251, 0.3)"
)
custom_regions = [
CustomizedRegion(start=6, end=6.5, color="#00b89466"),
CustomizedRegion(start=7, end=8, color="rgba(255, 255, 255, 0.6)")
]
result = audix(
"audio.wav",
start_time=0.5,
end_time=5.5,
mask_start_to_end=True,
region_color_options=region_colors,
customized_regions=custom_regions
)
自定义区域功能支持:
- 设置交互式区域和蒙版区域的颜色。
- 添加多个只读区域,支持 RGBA 和十六进制(带透明度)颜色格式。
- 通过
mask_start_to_end=True
在 start_time 和 end_time 之间显示蒙版。
- 设置播放区间和循环:
audix(
"audio.wav",
start_time="1s",
end_time="5s",
loop=True,
autoplay=False
)
进一步开发
本代码基于 Streamlit Component Templates 开发。
具体可以参考关键的章节 Quickstart。
这里给出简易的开发流程:
- 确保你已经安装了 Python 3.6+, Node.js, 和 npm。
- 克隆本项目。
- 创建一个新的 Python 虚拟环境:
cd streamlit-advanced-audio
python -m venv venv
source venv/bin/activate
pip install streamlit
cd streamlit-advanced-audio/frontend
npm install
npm run start
- 从另一个终端,运行组件的 Streamlit 应用(在开发时注意将
__init__.py
中的 _RELEASE
设置为 False
):
cd streamlit-advanced-audio
. venv/bin/activate
pip install -e .
streamlit run example.py
- 修改组件的前端代码:
streamlit-advanced-audio/frontend/src/Audix.tsx
。 - 修改组件的 Python 代码:
streamlit-advanced-audio/__init__.py
。
如果你有进一步的优化建议,欢迎提交 PR。
感谢
本项目的使用基于许多优秀的开源方案,在此特别感谢: