当前位置: 首页 > wzjs >正文

做网站一定要用服务器吗汕头百度网站推广

做网站一定要用服务器吗,汕头百度网站推广,用dw制作影视网站怎样做,河南网站建设优化🎵 项目名称:AI音乐生成器(LSTM Melody Generator) 🧠 项目简介 这个项目的目标是:用 AI 来自动生成简单的旋律(MIDI格式),类似于基础的钢琴曲、背景音乐片段。 我们使…

🎵 项目名称:AI音乐生成器(LSTM Melody Generator)

🧠 项目简介

这个项目的目标是:用 AI 来自动生成简单的旋律(MIDI格式),类似于基础的钢琴曲、背景音乐片段。

我们使用一个 LSTM(长短期记忆网络)模型,它能学习并预测音符的序列结构,实现自动作曲。

🔧 技术栈

技术 用途
Python 编程语言
TensorFlow / Keras 构建神经网络
music21 分析、处理和播放 MIDI 音乐
Streamlit 构建图形界面(可视化生成结果)
🎹 音乐格式说明
我们使用的是 MIDI 格式(.mid 文件),它记录的是音符序列而不是录音,适合用于训练模型和自动生成旋律。

✅ 项目流程

📥 Step 1:数据准备(音乐序列)
读取一个或多个 .mid 文件,并用 music21 将其转为音符/和弦的序列,然后用于训练。

⚙️ Step 2:模型训练(LSTM)
用 LSTM 模型来学习音符之间的关系,通过预测下一个音符生成完整旋律。

🧪 Step 3:生成旋律(Predict)
给一个起始片段,自动预测接下来的 50~200 个音符。

💾 Step 4:保存为 MIDI 文件
把生成的音符序列转换成音乐文件(.mid)并保存或播放。

📄 项目代码(打包为 Python 文件)
保存为:music_generator.py

pythonimport numpy as np
from music21 import converter, instrument, note, chord, stream
from keras.models import Sequential
from keras.layers import LSTM, Dense, Dropout
import glob
import pickle

Step 1: 提取音符

def get_notes():notes = []for file in glob.glob("midi_songs/*.mid"):midi = converter.parse(file)parts = instrument.partitionByInstrument(midi)notes_to_parse = parts.parts[0].recurse() if parts else midi.flat.notesfor element in notes_to_parse:if isinstance(element, note.Note):notes.append(str(element.pitch))elif isinstance(element, chord.Chord):notes.append('.'.join(str(n) for n in element.normalOrder))with open("data/notes.pkl", "wb") as f:pickle.dump(notes, f)return notes

Step 2: 准备训练序列

def prepare_sequences(notes, sequence_length=100):pitchnames = sorted(set(notes))note_to_int = {note: i for i, note in enumerate(pitchnames)}network_input = []network_output = []for i in range(len(notes) - sequence_length):seq_in = notes[i:i + sequence_length]seq_out = notes[i + sequence_length]network_input.append([note_to_int[n] for n in seq_in])network_output.append(note_to_int[seq_out])n_patterns = len(network_input)network_input = np.reshape(network_input, (n_patterns, sequence_length, 1)) / float(len(pitchnames))network_output = np.eye(len(pitchnames))[network_output]return network_input, network_output, note_to_int, pitchnames

Step 3: 创建模型

def create_network(network_input, output_dim):model = Sequential()model.add(LSTM(256, input_shape=(network_input.shape[1], network_input.shape[2]), return_sequences=True))model.add(Dropout(0.3))model.add(LSTM(256))model.add(Dense(128, activation='relu'))model.add(Dropout(0.3))model.add(Dense(output_dim, activation='softmax'))model.compile(loss='categorical_crossentropy', optimizer='adam')return model

Step 4: 生成音符

def generate_notes(model, network_input, pitchnames, note_to_int, num_notes=100):int_to_note = {num: note for note, num in note_to_int.items()}start = np.random.randint(0, len(network_input) - 1)pattern = network_input[start]prediction_output = []for note_index in range(num_notes):prediction_input = np.reshape(pattern, (1, len(pattern), 1))prediction = model.predict(prediction_input, verbose=0)[0]index = np.argmax(prediction)result = int_to_note[index]prediction_output.append(result)pattern = np.append(pattern, [[index / float(len(pitchnames))]], axis=0)pattern = pattern[1:]return prediction_output

Step 5: 将音符输出为 MIDI 文件

def create_midi(prediction_output, filename="output.mid"):offset = 0output_notes = []for pattern in prediction_output:if "." in pattern or pattern.isdigit():notes_in_chord = pattern.split(".")notes = [note.Note(int(n)) for n in notes_in_chord]chord_notes = chord.Chord(notes)chord_notes.offset = offsetoutput_notes.append(chord_notes)else:new_note = note.Note(pattern)new_note.offset = offsetoutput_notes.append(new_note)offset += 0.5midi_stream = stream.Stream(output_notes)midi_stream.write('midi', fp=filename)

▶️ 使用说明

下载一些 MIDI 文件放入 midi_songs/ 文件夹

创建 data/ 文件夹用于保存训练数据

执行以下代码:

pythonnotes = get_notes()
network_input, network_output, note_to_int, pitchnames = prepare_sequences(notes)
model = create_network(network_input, output_dim=len(pitchnames))
model.fit(network_input, network_output, epochs=20, batch_size=64)

生成音乐

prediction = generate_notes(model, network_input, pitchnames, note_to_int, num_notes=200)
create_midi(prediction)
http://www.dtcms.com/wzjs/147069.html

相关文章:

  • 做网站的公司怎么发展业务广州市新闻最新消息
  • 迪庆北京网站建设百度收录查询方法
  • 网站设计 北京 010重庆seo网站
  • 大型网站开发 java后端seo排名软件
  • 做网站用的大图知乎推广渠道
  • 平面设计培训价格七台河网站seo
  • 湛江市建设局网站windows优化大师是电脑自带的吗
  • 博山信息港株洲seo优化
  • 怎么给网站加在线客服seo优化的技巧
  • 做的视频发到哪个网站百度地图打车客服人工电话
  • 如何给网站做二维码代写软文
  • 众筹网站建设费用宝塔没有域名直接做网站怎么弄
  • 哪个网站做logo设计公司怎么在百度上推广
  • 教你如何做好网站青岛网
  • 网站开发项目管理文档模板明星百度指数在线查询
  • 网站建设的公司开发方案安徽网络建站
  • 上海奉贤网站建设廊坊seo推广
  • 淘宝网站图片维护怎么做连接交换
  • 灰蓝 网站模板软文怎么写吸引人
  • 做一个网站需要多少时间长沙seo关键词排名优化
  • 网站业务员怎么给客户做方案宁波网络营销推广公司
  • 做的比较简约的网站品牌网络seo方案外包
  • 城阳建网站windows优化大师免费版
  • 传媒网站给行业做宣传朋友圈营销广告
  • 中国兰州网pc主站亚马逊跨境电商个人开店
  • 福州做网站设计中国制造网网站类型
  • 建设厅官方网站新资质标准可以免费发外链的论坛
  • 怎么做网页别人可以看到图片凌云seo博客
  • 西固网站建设平台如何在各大网站发布信息
  • 怎么做一个动态网站吗如何做友情链接