You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python Azure函数读取Blob文件并实现音频谐波提取?

问题排查与解决方案

错误原因

  • 基础拼写错误:
    1. Azure Functions Python SDK的导入名称错误,应为azure.functions,你代码里写了azure.function缺少末尾的s
    2. 音频处理库导入名称错误,audioread库的正确导入语句是import audioread,你代码里写了import audio_read多了下划线
  • 核心报错根因:
    audioread.audio_open()方法仅支持传入本地音频文件路径或者可寻址的类文件对象,你直接传入myblob.read()返回的音频二进制字节流,audioread会默认将输入尝试用utf-8解码为文件路径字符串,遇到二进制音频字节就触发了UnicodeDecodeError。
  • 可选优化点缺失:
    blob触发绑定没有明确指定数据类型,Azure Functions运行时可能会默认尝试将blob内容识别为文本,增加额外的解码风险。

修复方案

1. 修正function.json配置

在输入绑定中添加"dataType": "binary"明确指定按二进制读取blob内容:

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "myblob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "examplecontainer/{name}",
      "connection": "AzureWebJobsStorage",
      "dataType": "binary"
    }
  ]
}

2. 修正Python函数代码

将blob读取的二进制内容写入临时文件后,再把临时文件路径传给audioread.audio_open()处理:

import logging
import azure.functions as func
import audioread
import tempfile
import os

def main(myblob: func.InputStream):
    logging.info(f"Python blob trigger function processed blob \n"
                 f"Name: {myblob.name}\n"
                 f"Blob Size: {myblob.length} bytes")
    
    # 将二进制音频内容写入临时文件
    with tempfile.NamedTemporaryFile(delete=False) as temp_file:
        temp_file.write(myblob.read())
        temp_path = temp_file.name
    
    try:
        audio_info = audioread.audio_open(temp_path)
        logging.info(f"读取音频信息成功:{audio_info}")
        # 此处添加你的谐波提取逻辑,处理完成后将结果JSON写入目标Blob容器即可
    finally:
        # 处理完成后删除临时文件,避免占用存储空间
        os.unlink(temp_path)

后续扩展说明

如果你需要将处理后的JSON结果写入另一个Blob容器,只需要在function.json中新增一个输出绑定,类型为blob,方向为out,指定目标容器路径,然后在Python代码中直接将JSON字符串赋值给对应的输出绑定参数即可。

内容的提问来源于stack exchange,提问作者user14834847

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:45:03