Python将图片写到音频频谱
来源:互联网 发布:大数据前沿技术 编辑:程序博客网 时间:2024/05/29 17:28
用到的库:pillow、numpy、matplotlib
# -*- coding: utf-8 -*-import waveimport matplotlib.pyplot as pltimport numpy as npfrom PIL import Imagefrom matplotlib.mlab import window_nonedef img2wav(img_path, wav_path, fft_size=1024): """ 把图片写到音频频域 :param img_path: 输入图片路径 :param wav_path: 输出音频路径 :param fft_size: 图片每列代表的音频长度,也是频域长度的两倍 """ # 读取图片,转为灰度图 img = Image.open(img_path).convert('L') # 缩放到高度 = fft_size / 2 (令负频率全为0) img = img.resize((img.width * fft_size // 2 // img.height, fft_size // 2), Image.BICUBIC) # 转为numpy数组 img = np.array(img, 'float') # 变换到-100~0分贝,太大了转到时域时可能会溢出 img = img * (100 / 255) - 100 # 单位从分贝转成1 # amp_dB = 20 * ln(amp / 32767) / ln(10) # amp = exp(amp_dB / 20 * ln(10)) * 32767 img = np.exp(img * (np.log(10) / 20)) * 32767 # 翻转(索引小的频率小)然后转置(要迭代列) img = img[::-1].T with wave.open(wav_path, 'wb') as f: # (nchannels, sampwidth, framerate, nframes, comptype, compname) f.setparams((1, 2, 44100, len(img) * fft_size, 'NONE', '')) for col in img: # 傅里叶反变换 data = np.fft.ifft(col, fft_size).real # 限制范围在-32768~32767 for index in np.where(data < -32768): data[index] = -32768 for index in np.where(data > 32767): data[index] = 32767 data = data.astype('short') # 写到wav文件 f.writeframesraw(data)def draw_spectrum(wav_path, fft_size=1024): """ 画音频频谱图 :param wav_path: 输入音频路径 :param fft_size: 傅里叶变换用的长度 """ # 读wav with wave.open(wav_path, 'rb') as f: n_samples = f.getnframes() data = f.readframes(n_samples) n_channels = f.getnchannels() sample_rate = f.getframerate() # 转为numpy数组 data = np.fromstring(data, 'short') # 取第一个声道 data.shape = (n_samples, n_channels) data = data.T[0] # 画频谱,无加窗和重叠 plt.specgram(data / 32767, fft_size, sample_rate, window=window_none, noverlap=0, scale='dB') plt.show()if __name__ == '__main__': img2wav('test.jpg', 'test.wav') draw_spectrum('test.wav')
测试图片:
自己画的频谱效果
AU的频谱效果,因为AU有加窗和重叠所以和自己画的不一样
阅读全文
0 0
- Python将图片写到音频频谱
- 使用Python对音频进行频谱分析
- 将图片写到excel中
- 转:使用Python对音频进行频谱分析
- 音频频谱分析柱状图
- 在OpenCV环境下写的灰度图像二维傅里叶换,幅值计算,频谱平移和将数值归一化到0到255区间的四个函数
- 将图片写到excel里的函数 c#.net
- 将图片和文字写到pdf文件中
- 将assets下的所有图片写到sd卡
- 将本地图片文件写到模拟器的相册中
- 用BASE64将二进制图片写到本地文件中
- python-opencv将图片 / 视频帧写为视频
- android,音频频谱的绘制
- android示波器,音频频谱绘制
- 如何将python中的数据写到mysql数据库中
- 【多媒体之音频】音频频谱设计 Visualizer
- 用python代码将tiff图片存储到jpg
- Python 绘制频谱
- <剑指offer 面试题3> 数组中重复的数字(Java实现)
- 第六章 ALDS1_5_C:Koch Curve 科赫曲线
- js获取两个数组的合集和差集
- UE4 虚幻4 C++项目Complile Failed问题的解决方法
- ubuntu 安装MySQL5.7.18
- Python将图片写到音频频谱
- 为什么最难不过二叉树的算法出现在面试题中都会被应聘者抱怨?
- 勇敢者的游戏——VC
- centos 下安装 thrift(为部署 vddk 服务做准备)
- Cocos框架Web Mobile平台,屏幕点击后自动进入全名模式解决方法!
- 12.21
- prctl PR_SET_SECCOMP failed vsftp
- 密码学原理_Crypto++实现3DES加密
- ConcurrentHashMap从1.7-1.8变化