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

python:mido 提取 midi文件中某一音轨的音乐数据

pip install mido

使用 mido库可以方便地处理 MIDI 文件,提取其中音轨的音乐数据。

1.下面的程序会读取指定的 MIDI 文件,并提取指定编号音轨的音乐数据,主要包括音符事件等信息。

编写 mido_extract.py  如下

# -*- coding: utf-8 -*-
""" 用 mido 提取 midi文件中某一音轨的音乐数据 """
import os
import sys
from tkinter import filedialog
import midodef extract_track_data(midi_file, track_no):try:track_data = []tracks = midi_file.tracksfor i,track in enumerate(tracks):print(f"Track {i}: {track.name}")if track_no < len(tracks):track = tracks[track_no]for msg in track:if msg.type in ['note_on', 'note_off', 'control_change', 'program_change']:track_data.append(msg)            else:print(f"音轨编号 {track_no} 超出范围,该MIDI文件共有 {len(tracks)}条音轨。")return track_dataexcept:print(" 无法读取MIDI文件.")return Nonedef write_track_to_midi(track_data, output_file_path, original_mid):new_mid = mido.MidiFile(ticks_per_beat=original_mid.ticks_per_beat)new_track = mido.MidiTrack()for msg in track_data:new_track.append(msg)new_mid.tracks.append(new_track)new_mid.save(output_file_path)# main()
if len(sys.argv) ==1:filetypes = [('mid file','.mid')]f1 = filedialog.askopenfilename(initialdir='D:/Music', filetypes=filetypes)
elif len(sys.argv) ==2:f1 = sys.argv[1]
else:print('usage: python mido_extract.py file1.mid')sys.exit(1)if not os.path.exists(f1):print(f"{f1} is not exists.")sys.exit(2)fn,ext = os.path.splitext(f1)
if ext.lower() != '.mid':print('ext is not .mid ')sys.exit(2)midi_file_path = f1  # 替换为实际的MIDI文件路径
x = 1  # 替换为想要提取的音轨编号,从0开始
output_file_path = f"track_{x}.mid"  # 替换为输出的MIDI文件路径
try:original_mid = mido.MidiFile(midi_file_path)data = extract_track_data(original_mid, x)if data:write_track_to_midi(data, output_file_path, original_mid)print(f"已成功将track {x} 数据写入 {output_file_path}")
except mido.MidiFileError:print(f"无法读取MIDI文件 {midi_file_path}")

运行 python mido_extract.py moon_river.mid
生成 track_1.mid

上述代码中,extract_track_data函数负责提取指定音轨的数据,write_track_to_midi函数则将提取的数据写入新的 MIDI 文件。你需要把midi_file_path换成原始 MIDI 文件路径,track_number设为目标音轨编号,output_file_path指定输出文件路径。


2.下面的代码会复制保留原 MIDI 文件中 Track 0 的全部信息,同时提取 Track 1 的音乐数据,然后将它们合并到一个新的 MIDI 文件中。

编写 mido_extract1.py  如下

# -*- coding: utf-8 -*-
""" 用 mido 复制保留 Track 0 全部信息,提取 Track 1 音乐数据 """
import midodef copy_track0_and_extract_track1(midi_file_path, output_file_path):try:# 读取原 MIDI 文件original_mid = mido.MidiFile(midi_file_path)if len(original_mid.tracks) < 2:print("MIDI 文件中没有足够的音轨(至少需要 2 条音轨)。")return# 创建新的 MIDI 文件,复制原文件的 ticks_per_beatnew_mid = mido.MidiFile(ticks_per_beat=original_mid.ticks_per_beat)# 复制 Track 0 到新的 MIDI 文件new_mid.tracks.append(original_mid.tracks[0])# 提取 Track 1 的音乐数据track1 = original_mid.tracks[1]track1_data = []for msg in track1:if msg.type in ['note_on', 'note_off', 'control_change', 'program_change']:track1_data.append(msg)# 创建新的音轨并添加 Track 1 的数据new_track1 = mido.MidiTrack()for msg in track1_data:new_track1.append(msg)new_mid.tracks.append(new_track1)# 保存新的 MIDI 文件new_mid.save(output_file_path)print(f"已成功将 Track 0 信息和 Track 1 数据写入 {output_file_path}")except mido.MidiFileError:print(f"无法读取 MIDI 文件 {midi_file_path}")if __name__ == "__main__":midi_file_path = "your_midi_file.mid"  # 替换为实际的 MIDI 文件路径output_file_path = "new_midi_file.mid"  # 替换为输出的 MIDI 文件路径copy_track0_and_extract_track1(midi_file_path, output_file_path)

代码说明:

  1. 读取原 MIDI 文件:使用 mido.MidiFile 读取指定路径的 MIDI 文件。
  2. 检查音轨数量:确保 MIDI 文件中至少有 2 条音轨。
  3. 创建新的 MIDI 文件:使用原文件的 ticks_per_beat 创建新的 MIDI 文件。
  4. 复制 Track 0:将原文件的 Track 0 直接添加到新的 MIDI 文件中。
  5. 提取 Track 1 数据:遍历 Track 1,提取 note_onnote_offcontrol_change 和 program_change 类型的消息。
  6. 创建新音轨并添加数据:创建一个新的音轨,并将提取的 Track 1 数据添加到该音轨中,然后将该音轨添加到新的 MIDI 文件中。
  7. 保存新的 MIDI 文件:将新的 MIDI 文件保存到指定的输出路径。

你需要将 midi_file_path 替换为实际的 MIDI 文件路径,将 output_file_path 替换为你希望保存的新 MIDI 文件的路径。

相关文章:

python:mido 提取 midi文件中某一音轨的音乐数据

pip install mido 使用 mido库可以方便地处理 MIDI 文件&#xff0c;提取其中音轨的音乐数据。 1.下面的程序会读取指定的 MIDI 文件&#xff0c;并提取指定编号音轨的音乐数据&#xff0c;主要包括音符事件等信息。 编写 mido_extract.py 如下 # -*- coding: utf-8 -*- &…...

将输入帧上下文打包到下一个帧的预测模型中用于视频生成

Paper Title: Packing Input Frame Context in Next-Frame Prediction Models for Video Generation 论文发布于2025年4月17日 Abstract部分 在这篇论文中,FramePack是一种新提出的网络结构,旨在解决视频生成中的两个主要问题:遗忘和漂移。 具体来说,遗忘指的是在生成视…...

第六章:Multi-Backend Configuration

Chapter 6: Multi-Backend Configuration 从交响乐团到变形金刚&#xff1a;如何让代理适应不同环境&#xff1f; 在上一章任务工作流编排&#xff0c;我们学会了如何像指挥家一样协调任务。但就像变形金刚能切换不同形态应对环境变化一样&#xff0c;你的AI代理也需要能灵活切…...

tomcat远程Debug

tomcat远程Debug -- /bin目录下 catalina.bat文件下加一行 SET CATALINA_OPTS-server -Xdebug -Xnoagent -Djava.compilerNONE -Xrunjdwp:transportdt_socket,servery,suspendn,address8088idea端配置如下...

Vue3:component(组件:uniapp版本)

目录 一、基本概述二、基本使用三、插槽 一、基本概述 在项目的开发过程中&#xff0c;页面上井场会出现一些通用的内容&#xff0c;例如头部的导航栏&#xff0c;如果我们每一个页面都去写一遍&#xff0c;那实在是太繁琐了&#xff0c;所以&#xff0c;我们使用组件来解决这…...

rust编程学习(三):8大容器类型

1简介 rust标准库std::collections也提供了像C STL库中的容器&#xff0c;分为4种通用的容器&#xff0c;8种类型&#xff0c;如下表所示。 线性容器类型&#xff1a; 名称简介Vec<T>内存空间连续&#xff0c;可变长度的数组&#xff0c;类似于C中Vector<T>容器…...

前端中阻止事件冒泡的几种方法

在 JavaScript 前端开发中&#xff0c;阻止事件冒泡是处理 DOM 事件时的常见需求。以下是几种阻止事件冒泡的方法&#xff1a; 1. 使用 event.stopPropagation() 这是最常用的阻止事件冒泡的方法。 element.addEventListener(click, function(event) {event.stopPropagation…...

ShenNiusModularity项目源码学习(20:ShenNius.Admin.Mvc项目分析-5)

ShenNiusModularity项目的系统管理模块主要用于配置系统的用户、角色、权限、基础数据等信息&#xff0c;上篇文章中学习的日志列表页面相对独立&#xff0c;而后面几个页面之间存在依赖关系&#xff0c;如角色页面依赖菜单页面定义菜单列表以便配置角色的权限&#xff0c;用户…...

前端js需要连接后端c#的wss服务

背景 前端js需要连接后端wss服务 前端&#xff1a;js 后端&#xff1a;c# - 控制台搭建wss服务器 步骤1 wss需要ssl认证&#xff0c;所以需要个证书&#xff0c;随便找一台linux的服务器&#xff08;windows的话&#xff0c;自己安装下openssl即可&#xff09;&#xff0c;…...

MAGI-1自回归式大规模视频生成

1. 关于 MAGI-1 提出 MAGI-1——一种世界模型&#xff08;world model&#xff09;&#xff0c;通过自回归方式预测一系列视频块&#xff08;chunk&#xff0c;固定长度的连续帧片段&#xff09;来生成视频。 模型被训练为在时间维度上单调递增噪声的条件下对每个块进行去噪&a…...

深入剖析TCP协议(内容一):从OSI与TCP/IP网络模型到三次握手、四次挥手、状态管理、性能优化及Linux内核源码实现的全面技术指南

文章目录 TCP网络模型OSI参考模型TCP/IP五层模型 TCP状态TIME_WAIT 连接过程TCP三次握手TCP四次挥手 TCP优化TCP三次握手优化TCP四次挥手优化TCP数据传输优化 TCP TCP是面向连接的、可靠的、基于字节流的传输层通信协议&#xff1a; 面向连接&#xff1a;一定是一对一才能连接…...

基于deepseek的模型微调

使用 DeepSeek 模型(如 DeepSeek-VL、DeepSeek-Coder、DeepSeek-LLM)进行微调,可以分为几个关键步骤,下面以 DeepSeek-LLM 为例说明,适用于 Q&A、RAG、聊天机器人等方向的应用。 一、准备工作 1. 环境依赖 建议使用 transformers + accelerate 或 LoRA 等轻量微调方…...

node.js 实战——(path模块 知识点学习)

path 模块 提供了操作路径的功能 说明path. resolve拼接规范的绝对路径path. sep获取操作系统的路径分隔符path. parse解析路径并返回对象path. basename获取路径的基础名称path. dirname获取路径的目录名path. extname获得路径的扩展名 resolve 拼接规范的绝对路径 const…...

【k8s】docker、k8s、虚拟机的区别以及使用场景

一、Docker &#xff08;一&#xff09;概念 Docker 是一个开源的应用容器引擎&#xff0c;允许开发者将应用及其依赖打包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可实现虚拟化。 &#xff08;二&#xff09;隔离性 Docker 的隔离…...

校园外卖服务系统的设计与实现(代码+数据库+LW)

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;外卖信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广…...

Windows上使用Python 3.10结合Appium-实现APP自动化

一、准备工作 所需条件&#xff1a; Windows 10/11 操作系统 Python 3.10.x&#xff08;建议3.10.9&#xff09; Java JDK 8 或以上&#xff08;建议JDK 8u301&#xff09; Node.js 14.x 或以上&#xff08;建议14.21.3&#xff09; Appium Server 1.22.x 或以上&#xff08;建…...

【计算机视觉】CV项目实战- SiamMask 单阶段分割跟踪器

SiamMask 单阶段分割跟踪器 一、项目概述与技术原理1.1 核心技术创新1.2 性能优势 二、实战环境搭建2.1 系统要求与依赖安装2.2 项目编译与配置 三、模型推理实战3.1 快速体验Demo3.2 常见运行时错误处理 四、模型训练指南4.1 数据准备流程4.2 训练执行与监控 五、高级应用与优…...

计算机视觉基础

1. 数字图像的基本概念 像素&#xff08;Pixel&#xff09;&#xff1a;图像的最小构成单元&#xff0c;每个像素存储亮度或颜色信息。 灰度图像&#xff1a;每个像素是 0&#xff08;黑&#xff09;~255&#xff08;白&#xff09; 的标量值&#xff08;8位无符号整数&#x…...

系统编程_进程间通信机制_消息队列与共享内存

消息队列概述 消息有类型&#xff1a;每条消息都有一个类型&#xff0c;就像每封信都有一个标签&#xff0c;方便分类和查找。消息有格式&#xff1a;消息的内容有固定的格式&#xff0c;就像每封信都有固定的信纸格式。随机查询&#xff1a;你可以按类型读取消息&#xff0c;…...

一种免费的离线ocr-汉字识别率100%

一般我们手机中常用的ocr库有&#xff0c;Tesseract&#xff0c;paddle ocr&#xff0c;EasyOCR&#xff0c; ocrLite等等&#xff0c;这些ocr库中百度的paddle ocr效果最好&#xff0c;但是再好的效果也会偶尔识别错几个汉字。当我们在做自动化脚本过程中&#xff0c;如果识别…...

Maven 工程中的pom.xml 文件(图文)

基本信息 单工程项目【pom.xml文件】中最基本的信息。 依赖引入 可以在Maven 中央仓库查找所需依赖&#xff1a;【直达&#xff1a;https://mvnrepository.com/】。 在【dependencies】标签中添加所需依赖。 <dependency><groupId>com.baomidou</groupId&g…...

图像预处理-模板匹配

就是用模板图在目标图像中不断的滑动比较&#xff0c;通过某种比较方法来判断是否匹配成功,找到模板图所在的位置。 - 不会有边缘填充。 - 类似于卷积&#xff0c;滑动比较&#xff0c;挨个比较象素。 - 返回结果res大小是&#xff1a;目标图大小-模板图大小1&#xff08;H-…...

操作系统学习笔记

2.4 死锁 在学习本节时&#xff0c;请读者思考以下问题&#xff1a; 1&#xff09;为什么会产生死锁&#xff1f;产生死锁有什么条件&#xff1f; 2&#xff09;有什么办法可以解决死锁问题&#xff1f; 学完本节&#xff0c;读者应了解死锁的由来、产…...

5.4.云原生与服务网格

目录 1. Kubernetes与微服务集成 1.1 容器化部署规范 • 多环境配置管理&#xff08;ConfigMap与Nacos联动&#xff09; • 健康检查探针配置&#xff08;Liveness/Readiness定制策略&#xff09; 1.2 弹性服务治理 • HPA自动扩缩容规则设计 • Sentinel指标驱动弹性伸缩 2…...

[特殊字符]‍[特殊字符]Linux驱动开发入门 | 并发与互斥机制详解

文章目录 &#x1f468;‍&#x1f4bb;Linux驱动开发入门 | 并发与互斥机制详解&#x1f4cc;为什么驱动中需要并发和互斥控制&#xff1f;&#x1f4a1;常见的并发控制机制&#x1f510;自旋锁和信号量通俗理解&#x1f300;自旋锁&#xff08;Spinlock&#xff09;——“厕所…...

时序数据库IoTDB自研的Timer模型介绍

一、引言 时序数据库在支持时序特性写入、存储、查询等功能的基础上&#xff0c;正逐步向深度分析领域迈进。自动化异常监测与智能化趋势预测已成为时序数据管理的核心需求。为了满足这些需求&#xff0c;时序数据库IoTDB团队积极探索&#xff0c;成功自研推出了面向时间序列的…...

RabbitMQ 详解(核心概念)

本文是博主在梳理 RabbitMQ 知识的过程中&#xff0c;将所遇到和可能会遇到的基础知识记录下来&#xff0c;用作梳理 RabbitMQ 的整体架构和功能的线索文章&#xff0c;通过查找对应的知识能够快速的了解对应的知识而解决相应的问题。 文章目录 一、RabbitMQ 是什么&#xff1f…...

【数据结构和算法】6. 哈希表

本文根据 数据结构和算法入门 视频记录 文章目录 1. 哈希表的概念1.1 哈希表的实现方式1.2 哈希函数&#xff08;Hash Function&#xff09;1.3 哈希表支持的操作 2. Java实现 在前几章的学习中&#xff0c;我们已经了解了数组和链表的基本特性&#xff0c;不管是数组还是链表…...

RHCE第三次作业 搭建dns的正向解析服务器

server为服务器 client为客户端 设置主配置文件 在server下&#xff1a; [rootServer ~]#vim /etc/named.conf #进入到配置页面&#xff0c;并修改 设置区域文件 [rootServer ~]# vim /etc/named.rfc1912.zones 设置域名解析文件 [rootServer named]# cd /var/named…...

【每天一个知识点】如何解决大模型幻觉(hallucination)问题?

解决大模型幻觉&#xff08;hallucination&#xff09;问题&#xff0c;需要从模型架构、训练方式、推理机制和后处理策略多方面协同优化。 &#x1f9e0; 1. 引入 RAG 框架&#xff08;Retrieval-Augmented Generation&#xff09; 思路&#xff1a; 模型生成前先检索知识库中…...

Python深拷贝与浅拷贝:避开对象复制的陷阱

目录 一、为什么需要区分深浅拷贝&#xff1f; 二、内存中的对象真相 三、浅拷贝的真相 四、深拷贝的奥秘 五、自定义对象的拷贝 六、性能对比实验 七、常见陷阱与解决方案 八、最佳实践指南 九、现代Python的拷贝优化 结语 一、为什么需要区分深浅拷贝&#xff1f; …...

批量处理多个 Word 文档:插入和修改页眉页脚,添加页码的方法

Word 页眉页脚的设置在日常工作中非常常见&#xff0c;尤其是需要统一格式的文档&#xff0c;如毕业论文、公司内部资料等。在这些文档中&#xff0c;页眉页脚通常包含时间、公司标志、文档标题、文件名或作者姓名等信息。有时&#xff0c;我们不仅需要简单的文字页眉页脚&…...

大语言模型(LLM)的Prompt Engineering:从入门到精通

大语言模型&#xff08;LLM&#xff09;的Prompt Engineering&#xff1a;从入门到精通 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 引言&#xff1a;Prompt Engineering——解锁AI生产力的金钥匙 当ChatGPT在2023年引爆…...

poi生成横向文档以及复杂表头

代码: //创建页面并且创建横向A4XWPFDocument doc new XWPFDocument();CTDocument1 document doc.getDocument();CTBody body document.getBody();if (!body.isSetSectPr()) {body.addNewSectPr();}CTSectPr section body.getSectPr();if (!section.isSetPgSz()) {section.…...

深入剖析TCP协议(内容二):从OSI与TCP/IP网络模型到三次握手、四次挥手、状态管理、性能优化及Linux内核源码实现的全面技术指南

文章目录 常见问题TCP和UDPISNUDPTCP数据可靠性TCP协议如何提高传输效率TCP如何处理拥塞 SocketTCP源码tcp_v4_connect()sys_accept()tcp_accept()三次握手客户端发送SYN段服务端发送SYN和ACK处理客户端回复确认ACK段服务端收到ACK段 常见问题 TCP和UDP TCP和UDP的区别&#…...

流程架构是什么?为什么要构建流程架构,以及如何构建流程结构?

本文从&#xff1a;流程架构是什么&#xff1f;为什么要构建流程架构&#xff1f;如何构建流程结构三个方面来介绍。 一、首先&#xff0c;我们来了解流程架构是什么&#xff1f; 流程架构是人体的骨架&#xff0c;是大楼的砌筑&#xff0c;是课本的目录&#xff0c;是流程管理…...

Visium HD多样本拼片拆分

Visium HD实验的时候一个捕获区域内可以包含多个样本拼片&#xff08;例如多个组织切片或不同样本的排列&#xff09;是常见的实验设计&#xff0c;多样本拼片能够提升实验效率&#xff0c;单张玻片处理多个样本&#xff0c;降低试剂和测序成本&#xff0c;后续分析的时候只需要…...

3DMAX零售商店生成插件RetailStore自定义贴图库方法详解

3DMAX零售商店生成插件——RetailStore&#xff0c;是一款兼具简洁性与复杂性的工具&#xff0c;专为通过样条线快速创建零售商店而设计。用户只需绘制一条街道廓线&#xff0c;轻点鼠标&#xff0c;即可生成一排随机的零售商店。该插件会在每个样条线段上自动生成一个店铺&…...

从性能到安全:大型网站系统架构演化的 13 个核心维度

大型网站系统架构的演化是一个复杂的过程&#xff0c;涉及到多个维度的技术内容&#xff0c;从关键维度进行详细分析&#xff1a; 1.性能维度 缓存技术&#xff1a;包括浏览器缓存、CDN&#xff08;内容分发网络&#xff09;缓存、服务器端缓存&#xff08;如 Memcached、Red…...

昆仑万维开源SkyReels-V2,近屿智能紧跟AI技术趋势

昆仑万维 SkyReels 团队正式发布并开源全球首个采用扩散强迫框架的无限时长电影生成模型 SkyReels-V2&#xff0c;其通过融合多模态大语言模型、多阶段预训练、强化学习与扩散强迫框架实现协同优化&#xff0c;推动视频生成技术进入新阶段。该模型聚焦解决现有技术在提示词遵循…...

Milvus(4):创建 Collections

1 创建 Collections 可以通过定义 Schema、索引参数、度量类型以及创建时是否加载来创建一个 Collection。 1.1 集合概述 Collection 是一个二维表&#xff0c;具有固定的列和变化的行。每列代表一个字段&#xff0c;每行代表一个实体。要实现这样的结构化数据管理&#xff0c…...

数据预处理:前缀和算法详解

数据预处理&#xff1a;前缀和算法详解 文章目录 数据预处理&#xff1a;前缀和算法详解1.算法原理2.算法作用3.C代码实现4.实战题目 1.算法原理 基本概念 前缀和&#xff08;Prefix Sum&#xff09;是一种常用的数据预处理技术&#xff0c;它可以快速求解区间和问题&#xf…...

盈达科技:登顶GEO优化全球制高点,以AICC定义AI时代内容智能优化新标杆

一、技术制高点——全球独创AICC系统架构&#xff0c;构建AI内容优化新范式 作为全球首个实现AI内容全链路优化的技术供应商&#xff0c;盈达科技凭借AICC智能协同中心&#xff08;自适应内容改造、智能数据投喂、认知权重博弈、风险动态响应四大引擎&#xff09;&#…...

【Linux】详细介绍进程的概念

目录 一、初识进程概念 真正的进程概念如下&#xff1a; 二、Linux中PCB的操作系统学科叫法&#xff1a;task_struct 1、简单认识task_ struct内容分类 2、问题&#xff1a;操作系统怎么知道当前程序执行到哪一行代码了&#xff1f; 三、linux关于进程的常用指令&#xff…...

mybatis框架补充

一&#xff0c;#{} 和${}区别 1.传数值 #{} 占位符&#xff0c;是经过预编译的&#xff0c;编译好SQL语句再取值&#xff0c;#方式能够防止sql注入 eg&#xff1a;#{}&#xff1a;delete from admin where id #{id} 结果&#xff1a; dalete from admin where id &#x…...

Alertmanager的安装和详细使用步骤总结

一、安装步骤 1. 二进制安装 下载与解压 从GitHub下载最新版本&#xff08;如v0.23.0&#xff09;&#xff1a;wget https://github.com/prometheus/alertmanager/releases/download/v0.23.0/alertmanager-0.23.0.linux-amd64.tar.gz tar -xzf alertmanager-0.23.0.linux-amd6…...

C++学习:六个月从基础到就业——C++学习之旅:STL迭代器系统

C学习&#xff1a;六个月从基础到就业——C学习之旅&#xff1a;STL迭代器系统 本文是我C学习之旅系列的第二十四篇技术文章&#xff0c;也是第二阶段"C进阶特性"的第二篇&#xff0c;主要介绍C STL迭代器系统。查看完整系列目录了解更多内容。 引言 在上一篇文章中…...

缓存与数据库一致性方案

一、缓存更新策略概述 在现代分布式系统中&#xff0c;缓存作为数据库的前置层&#xff0c;能显著提升系统性能。然而&#xff0c;缓存与数据库之间的数据一致性是一个经典难题。以下是三种常见的缓存更新策略及其优缺点分析。 二、方案对比分析 方案一&#xff1a;直接更新…...

国内ip地址怎么改?详细教程

在中国&#xff0c;更改IP地址需要遵守规则&#xff0c;并确保所有操作合规。在特定情况下&#xff0c;可能需要修改IP地址以满足不同需求或解决特定问题。以下是一些常见且合法的IP地址变更方法及注意事项&#xff1a; 一、理解IP地址 IP地址是设备在网络中的唯一标识&#x…...

通过Quartus II实现Nios II编程

目录 一、认识Nios II二、使用Quartus II 18.0Lite搭建Nios II硬件部分三、软件部分四、运行项目 一、认识Nios II Nios II软核处理器简介 Nios II是Altera公司推出的一款32位RISC嵌入式处理器&#xff0c;专门设计用于在FPGA上运行。作为软核处理器&#xff0c;Nios II可以通…...