【Python小技巧】获取音频文件时长

import librosa                                      #pip install librosa
file_url = "media/xx/cj.m4a"                        #音频文件路径
time = librosa.get_duration(filename=file_url)

 

windows下报错:

Error opening 'media/xx/cj.mp3':  File contains data in an unknown format

解决方案:

下载ffmpeg

找到其中的ffmpeg.exe文件,将其复制到项目目录下(文末附带了ffmpeg.exe文件,版本为 4.3.1 windows 64位)

然后打开 项目文件夹\venv\Lib\site-packages\audioread\ffdec.py

# COMMANDS = ('ffmpeg', 'avconv')                 #源代码
COMMANDS = ('./ffmpeg.exe', 'avconv')             #替换后的代码

linux下pip install librosa报错

Looking in indexes: http://mirrors.cloud.aliyuncs.com/pypi/simple/
Requirement already satisfied: librosa in ./.virtualenvs/music/lib/python3.6/site-packages (0.8.0)
Collecting audioread>=2.0.0
  Downloading http://mirrors.cloud.aliyuncs.com/pypi/packages/2e/0b/940ea7861e0e9049f09dcfd72a90c9ae55f697c17c299a323f0148f913d2/audioread-2.1.8.tar.gz (21 kB)
    ERROR: Command errored out with exit status 1:
     command: /root/.virtualenvs/music/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-bsstrwt7/audioread/setup.py'"'"'; __file__='"'"'/tmp/pip-install-bsstrwt7/audioread/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-qliwgemh
         cwd: /tmp/pip-install-bsstrwt7/audioread/
    Complete output (33 lines):
    WARNING: The repository located at mirrors.cloud.aliyuncs.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS we recommend you use HTTPS instead, otherwise you may silence this warning and allow it anyway with '--trusted-host mirrors.cloud.aliyuncs.com'.
    ERROR: Could not find a version that satisfies the requirement pytest-runner (from versions: none)
    ERROR: No matching distribution found for pytest-runner
    Traceback (most recent call last):
      File "/root/.virtualenvs/music/lib/python3.6/site-packages/setuptools/installer.py", line 128, in fetch_build_egg
        subprocess.check_call(cmd)
      File "/usr/lib/python3.6/subprocess.py", line 311, in check_call
        raise CalledProcessError(retcode, cmd)
    subprocess.CalledProcessError: Command '['/root/.virtualenvs/music/bin/python', '-m', 'pip', '--disable-pip-version-check', 'wheel', '--no-deps', '-w', '/tmp/tmpmlr7fab1', '--quiet', '--index-url', 'http://mirrors.cloud.aliyuncs.com/pypi/simple/', 'pytest-runner']' returned non-zero exit status 1.
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-bsstrwt7/audioread/setup.py", line 58, in <module>
        'Programming Language :: Python :: 3.6',
      File "/root/.virtualenvs/music/lib/python3.6/site-packages/setuptools/__init__.py", line 162, in setup
        _install_setup_requires(attrs)
      File "/root/.virtualenvs/music/lib/python3.6/site-packages/setuptools/__init__.py", line 157, in _install_setup_requires
        dist.fetch_build_eggs(dist.setup_requires)
      File "/root/.virtualenvs/music/lib/python3.6/site-packages/setuptools/dist.py", line 702, in fetch_build_eggs
        replace_conflicting=True,
      File "/root/.virtualenvs/music/lib/python3.6/site-packages/pkg_resources/__init__.py", line 781, in resolve
        replace_conflicting=replace_conflicting
      File "/root/.virtualenvs/music/lib/python3.6/site-packages/pkg_resources/__init__.py", line 1064, in best_match
        return self.obtain(req, installer)
      File "/root/.virtualenvs/music/lib/python3.6/site-packages/pkg_resources/__init__.py", line 1076, in obtain
        return installer(requirement)
      File "/root/.virtualenvs/music/lib/python3.6/site-packages/setuptools/dist.py", line 758, in fetch_build_egg
        return fetch_build_egg(self, req)
      File "/root/.virtualenvs/music/lib/python3.6/site-packages/setuptools/installer.py", line 130, in fetch_build_egg
        raise DistutilsError(str(e)) from e
    distutils.errors.DistutilsError: Command '['/root/.virtualenvs/music/bin/python', '-m', 'pip', '--disable-pip-version-check', 'wheel', '--no-deps', '-w', '/tmp/tmpmlr7fab1', '--quiet', '--index-url', 'http://mirrors.cloud.aliyuncs.com/pypi/simple/', 'pytest-runner']' returned non-zero exit status 1.
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

直接将windows上的\venv\Lib\site-packages\audioread上传到服务器的虚拟环境

ffmpeg.exe 下载 https://download.csdn.net/download/Swing0_0/12908760

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于m4a格式音频文件,需要使用其他库来读取和解码音频数据。常用的库包括FFmpeg、Pydub等。以下是使用Pydub和SciPy库对m4a音频文件进行频谱和音调分析的基本步骤: 1. 安装Pydub库 在命令行中使用pip安装Pydub库: ``` pip install pydub ``` 2. 读取m4a音频文件 使用Pydub库中的`AudioSegment.from_file()`函数来读取m4a音频文件,该函数返回音频数据和采样率。 ```python from pydub import AudioSegment # 读取m4a格式音频文件 audio_data = AudioSegment.from_file('audio_file.m4a', format='m4a') sample_rate = audio_data.frame_rate ``` 3. 将音频数据转换为NumPy数组 使用Pydub库中的`AudioSegment.raw_data`属性将音频数据转换为原始字节码,然后使用NumPy库中的`numpy.frombuffer()`函数将字节码转换为NumPy数组。 ```python import numpy as np # 将音频数据转换为NumPy数组 raw_data = audio_data.raw_data audio_array = np.frombuffer(raw_data, dtype=np.int16) ``` 4. 计算频谱 使用Scipy库中的`scipy.fft()`函数来计算音频数据的频谱,可以选择使用FFT或STFT算法。在计算频谱之前,需要确保音频数据的采样率与所选算法的参数相匹配。 ```python from scipy.fft import fft # 计算音频数据的FFT频谱 fft_spectrum = fft(audio_array) ``` 5. 分析音高 可以使用音高估计算法来分析音频数据的音高,其中常用的算法包括自相关法和基频追踪法。可以使用Scipy库中的`scipy.signal.find_peaks()`函数来查找频谱中的峰值,然后根据峰值位置计算音高。 ```python from scipy.signal import find_peaks # 查找频谱中的峰值 peaks, _ = find_peaks(fft_spectrum) # 计算音高 pitch = sample_rate / peaks[0] ``` 上述代码仅提供了基本的音频处理和频谱分析方法,具体的实现方法可能因数据类型和算法选择而有所不同。在实际应用中,还需要考虑信噪比、滤波器设计、谱图绘制等问题,以获得更准确的分析结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值