背景:

在图像上的风格变换(Style Transfer,论文,基于Torch的代码实现:neural-style)同样可以应用于音频中。
本文采用的是英文TravelingLight.mp3和东风破.mp3作为音频源和参考源。考虑到内存有限,仅仅截取音频中的10s进行风格的变换。

代码:

# -*- coding: utf-8 -*-
__author__ = 'jason'
import tensorflow as tf
import librosa# 用来提取音频文件, 参看<中文语音识别>
import numpy as np
import os
import pdb
#import shlex  # python2 pipes
# 音频文件路径
content_audio = "TravelingLight.mp3"
style_audio = "东风破.mp3"
# 为英文歌曲<Traveling Light>添加周杰伦风味
# 剪辑一段音频, 默认取开头的10s, 太大内存吃不消
def cut_audio(filename, start_pos='00:00:00', lens=10):newfile = os.path.splitext(os.path.basename(filename))[0] + '_' + str(lens) + 's.mp3'# 确保系统中已安装ffmpeg,这是ffmpeg的命令行方式,更加详细的使用方法可以googlecmd = "ffmpeg -i {} -ss {} -t {} -acodec copy {}".format(filename, start_pos, lens, newfile)os.system(cmd)return newfile#上面的ffmpeg注意-acodec copy参数,否则会报错
content_audio_10s = cut_audio(content_audio, start_pos='00:00:33')
style_audio_10s = cut_audio(style_audio, start_pos='00:00:38')
#content_audio_10s = "TravelingLight_10s.mp3"
#style_audio_10s = "东风破_10s.mp3"
# Short Time Fourier Transform音频转spectrogram(把1维信号转为2维, 可以被视作图像)
# https://en.wikipedia.org/wiki/Short-time_Fourier_transform
N_FFT = 2048
def read_audio(filename):x, fs = librosa.load(filename)S = librosa.stft(x, N_FFT)p = np.angle(S)S = np.log1p(np.abs(S[:,:430]))return S, fs
content_data, _ = read_audio(content_audio_10s)
style_data, fs = read_audio(style_audio_10s)
samples_n = content_data.shape[1]  # 430
channels_n = style_data.shape[0]   # 1025
style_data = style_data[:channels_n, :samples_n]
content_data_tf = np.ascontiguousarray(content_data.T[None,None,:,:])
style_data_tf = np.ascontiguousarray(style_data.T[None,None,:,:])
# filter shape "[filter_height, filter_width, in_channels, out_channels]"
N_FILTERS = 4096
std = np.sqrt(2) * np.sqrt(2.0 / ((channels_n + N_FILTERS) * 11))
kernel = np.random.randn(1, 11, channels_n, N_FILTERS)*std
# content and style features
g = tf.Graph()
with g.as_default(), g.device('/cpu:0'), tf.Session() as sess:# data shape "[batch, in_height, in_width, in_channels]",x = tf.placeholder('float32', [1, 1, samples_n, channels_n], name="x")kernel_tf = tf.constant(kernel, name="kernel", dtype='float32')conv = tf.nn.conv2d(x, kernel_tf, strides=[1, 1, 1, 1], padding="VALID", name="conv")net = tf.nn.relu(conv)content_features = net.eval(feed_dict={x: content_data_tf})style_features = net.eval(feed_dict={x: style_data_tf})features = np.reshape(style_features, (-1, N_FILTERS))style_gram = np.matmul(features.T, features) / samples_n
# Optimize
ALPHA= 0.01   # ALPHA越大,content越占主导; 如果ALPHA为0,表示没有content
result = None
with tf.Graph().as_default():learning_rate= 0.001x = tf.Variable(np.random.randn(1, 1, samples_n, channels_n).astype(np.float32)*learning_rate, name="x")kernel_tf = tf.constant(kernel, name="kernel", dtype='float32')conv = tf.nn.conv2d(x, kernel_tf, strides=[1, 1, 1, 1], padding="VALID", name="conv")net = tf.nn.relu(conv)content_loss = ALPHA * 2 * tf.nn.l2_loss(net - content_features)style_loss = 0_, height, width, number = map(lambda i: i.value, net.get_shape())size = height * width * numberfeats = tf.reshape(net, (-1, number))gram = tf.matmul(tf.transpose(feats), feats)  / samples_nstyle_loss = 2 * tf.nn.l2_loss(gram - style_gram)# lossloss = content_loss + style_lossopt = tf.contrib.opt.ScipyOptimizerInterface(loss, method='L-BFGS-B', options={'maxiter': 300})# Optimizationinit_op = tf.initialize_all_variables()#注意这里的初始化操作with tf.Session() as sess:#sess.run(tf.global_variables_initializer())#这是原来的初始化操作,会报错sess.run(init_op)opt.minimize(sess)result = x.eval()
# 把spectrogram转回wav音频
audio = np.zeros_like(content_data)
audio[:channels_n,:] = np.exp(result[0,0].T) - 1
p = 2 * np.pi * np.random.random_sample(audio.shape) - np.pi
for i in range(500):S = audio * np.exp(1j*p)x = librosa.istft(S)p = np.angle(librosa.stft(x, N_FFT))
librosa.output.write_wav("output.mp3", x, fs)

结果:

运行后的数据结果下载

基于TensorFlow的歌曲曲风变换相关推荐

  1. [机器学习]AutoML---谷歌开源AdaNet:基于TensorFlow的AutoML框架

    谷歌开源了基于 TensorFlow 的轻量级框架 AdaNet,该框架可以使用少量专家干预来自动学习高质量模型.据介绍,AdaNet 在谷歌近期的强化学习和基于进化的 AutoML 的基础上构建,快 ...

  2. 基于Tensorflow的神经网络解决用户流失概率问题

    沙韬伟,苏宁易购高级算法工程师. 曾任职于Hewlett-Packard.滴滴出行. 数据学院特邀讲师. 主要研究方向包括风控.推荐和半监督学习.目前专注于基于深度学习及集成模型下的用户行为模式的识别 ...

  3. 基于Tensorflow 2.x手动复现BERT

    基于Tensorflow 2.x手动复现BERT What's I can't create, I don't understand. -- Richard Feynman 这次来造一个NLP领域的大 ...

  4. 基于TensorFlow的CNN卷积网络模型花卉分类GUI版(2)

    一.项目描述 10类花的图片1100张,按{牡丹,月季,百合,菊花,荷花,紫荆花,梅花,-}标注,其中1000张作为训练样本,100张作为测试样本,设计一个CNN卷积神经网络花卉分类器进行花卉的分类, ...

  5. 基于Tensorflow实现一个Transformer翻译器

    Transformer是谷歌在2017年的一篇论文"Attention is all you need"提出的一个seq2seq的模型架构,其创造性的提出了自注意力的思想,可以很好 ...

  6. YOLO V3基于Tensorflow 2.0的完整实现

    如果对Tensorflow实现最新的Yolo v7算法感兴趣的朋友,可以参见我最新发布的文章,Yolo v7的最简TensorFlow实现_gzroy的博客-CSDN博客 YOLO V3版本是一个强大 ...

  7. 实战:基于tensorflow 的中文语音识别模型 | CSDN博文精选

    作者 | Pelhans 来源 | CSDN博客 目前网上关于tensorflow 的中文语音识别实现较少,而且结构功能较为简单.而百度在PaddlePaddle上的 Deepspeech2 实现功能 ...

  8. 深度学习实战—基于TensorFlow 2.0的人工智能开发应用

    作者:辛大奇 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2020-10-01 深度学习实战-基于TensorFlow 2.0的人工智能开发应用

  9. Python深度学习:基于TensorFlow

    作者:吴茂贵,王冬,李涛,杨本法 出版社:机械工业出版社 品牌:机工出版 出版时间:2018-10-01 Python深度学习:基于TensorFlow

最新文章

  1. 更改管理GPO的域控制器
  2. 一个下载Windows镜像的地址
  3. python求数组最大值_Python算法与数据结构--求所有子数组的和的最大值
  4. 基于面向对象的图片轮播(js原生代码)
  5. 问题解决:QtCreator屏蔽指定警告:如C4819等
  6. python题库刷题训练软件
  7. EXCEL自定义填充柄
  8. Android Studio的复制一行快捷键与Windows7屏幕旋转快捷键冲突
  9. react大数据量渲染_React大量数据渲染的绝佳解决方案——React虚拟化组件
  10. Asp.net 路由详解
  11. Linux服务详解(主要基于RedHat系的及Centos默认服务详解)(综合整理)
  12. Windows 11快捷键功能大全 28个Windows 11快捷键功能介绍
  13. 传教士与野人过河问题 人工智能实验算法
  14. 即时通讯源码,包含安卓,iOS,H5,MacOS,PC,Java后端
  15. python模拟器ipad_Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP【转载】
  16. 大型直播平台应用架构浅谈
  17. c语言函数已知底数和幂求指数,用C语言求幂函数和指数函数的方法
  18. 实现同网段不同vlan通信有几种方式?纯二层网络下又是如何实现的?
  19. 浅谈搜索引擎工作原理
  20. Django项目实践(商城):十一、收货地址

热门文章

  1. linux如何编写.sh脚本,linux sh脚本编写奇刃
  2. 鸿蒙系统不能自动连wifi,Hi3861_WiFi IoT工程:WiFi自动连接
  3. Invalid data found when processing input
  4. BSN开放联盟链巡礼——文昌链的技术、架构、应用介绍
  5. Android实例之必应每日一图
  6. python opencv录制视频_Python27+Opencv3 捕获网络摄像头IPCamera实时视频
  7. javaweb基于SSM流浪动物收养平台
  8. TeaTalk·Online 大数据+云原生,再度风云起
  9. 正大国际:做期货交易的方法
  10. 常见软件系统的供应商