perl:用 MIDI::Simple 生成midi文件,用 pygame 播放 mid文件

在 csdn.net 下载 strawberry-perl-5.32.1.1-64bit.zip 解压安装在 D:\Strawberry\

运行  cpan

install MIDI::Simple

  D:\Strawberry\c\bin\gmake.exe test -- OK
Running make install for CONKLIN/MIDI-Perl-0.84.tar.gz
Installing D:\Strawberry\perl\site\lib\MIDI.pm
Installing D:\Strawberry\perl\site\lib\MIDI\Event.pm
Installing D:\Strawberry\perl\site\lib\MIDI\Filespec.pod
Installing D:\Strawberry\perl\site\lib\MIDI\Opus.pm
Installing D:\Strawberry\perl\site\lib\MIDI\Score.pm
Installing D:\Strawberry\perl\site\lib\MIDI\Simple.pm
Installing D:\Strawberry\perl\site\lib\MIDI\Track.pm
Appending installation info to D:\Strawberry\perl\lib/perllocal.pod
  CONKLIN/MIDI-Perl-0.84.tar.gz
  D:\Strawberry\c\bin\gmake.exe install UNINST=1 -- OK


官网文档:https://metacpan.org/pod/MIDI::Simple

编辑  test_midi.pl  如下

#!/usr/bin/perl
use warnings;
use MIDI::Simple;
new_score;
text_event 'http://www.ely.anglican.org/parishes/camgsm/bells/chimes.html';
text_event 'Lord through this hour/ be Thou our guide';
text_event 'so, by Thy power/ no foot shall slide';
set_tempo 500000;  # 1 qn => .5 seconds (500,000 microseconds)
patch_change 1, 8;  # Patch 8 = Celestanoop c1, f, o5;  # Setup
# Now play
n 'qn', 'Cs';    n 'F';   n 'Ds';  n 'hn', 'Gs_d1';
n 'qn', 'Cs';    n 'Ds';  n 'F';   n 'hn', 'Cs';
n 'qn', 'F';     n 'Cs';  n 'Ds';  n 'hn', 'Gs_d1';
n 'qn', 'Gs_d1'; n 'Ds';  n 'F';   n 'hn', 'Cs';write_score 'westminster_chimes.mid';

运行  perl test_midi.pl  生成 westminster_chimes.mid 文件

运行 python play_mid.py westminster_chimes.mid

play_mid.py 参见:python:用 mido 生成 midi文件,用 pygame 播放 mid文件


持续时间参数:当前的法定值以“wn”、“hn”、“qn”、“en”、“sn”开头,表示整音符、二分音符、四分音符、八分音符或十六分音符。

字母数字的形式是:一个字符串表示八度音程内的音符(由 确定),然后是一个可选参数“_u[number]”表示“从当前八度音阶上升这么多个八度音阶”或“_d[参数]”表示“从当前八度音阶下降这么多个八度音阶”。例如:“C”、“As”或“Asharp”、“Bflat”或“Bf”、“C_d3”、“As_d1”或“Asharp_d1”、“Bflat_u3”或“Bf_u3”。

patch_change 通道、补丁;
key_after_touch 通道、音符、速度;
channel_after_touch 通道、速度;
control_change 通道,控制器(0-127),值(0-127);
pitch_wheel_change 频道,pitch_wheel;
set_tempo 节奏;(请参阅下面的速度部分。
smpte_offset 小时、明尼苏达州、东南、法国、ff;
time_signature nn、dd、cc、bb;
key_signature SF, MI ;
text_event 文本;
copyright_text_event 文本;
track_name 文本;
instrument_name 文本;
歌词文本;
set_sequence_number 序列;


铃声伴奏《祝你生日快乐》,编写  happy_birthday.pl  如下

#!/usr/bin/perl
use warnings;
use MIDI::Simple;
new_score;
text_event 'score: Happy birthday to you';
set_tempo 400000;  # 1 qn => .4 seconds (400,000 microseconds)
#patch_change 1, 8;  # Patch 8 = Celestanoop c1, f, o5;  # Setup
# Now play
n 'qn','Gs_d1'; n 'qn','Gs_d1'; n 'hn','A_d1'; n 'hn','G_d1';
n 'hn','C'; n 'wn','B_d1'; 
n 'qn','Gs_d1'; n 'qn','Gs_d1'; n 'hn','A_d1'; n 'hn','G_d1';
n 'hn','D'; n 'wn','C';
n 'qn','Gs_d1'; n 'qn','Gs_d1'; n 'hn','G'; n 'hn','E';
n 'hn','C'; n 'hn', 'B_d1'; n 'hn', 'A_d1';
n 'qn','Fs'; n 'qn','Fs'; n 'hn','E'; n 'hn','C';
n 'hn','D'; n 'wn','C';write_score 'happy_birthday.mid';

运行  perl happy_birthday.pl  生成 happy_birthday.mid 文件

运行 python play_mid.py happy_birthday.mid

my 太太说:听音调还是有些不准。请程序员网友指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/6591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

libcity 笔记:支持的数据集

1 支持的数据集(model) 1.1 traffic_state_pred HA历史平均值,将历史流量建模为季节性过程,然后使用前几个季节的加权平均值作为预测值。VAR向量自回归SVR支持向量回归ARIMAAutoEncoderSeq2Seq采用基于门控循环单元的编码器-解码…

kubebuilder(6)webhook

operator中的webhook也是很重要的一块功能。也是相对比较独立的模块,所以放在后面讲。 webhook是一个callback,注册到k8s的api-server上。当某个特定的时间发生时,api server就会查询注册的webhook,并根据一些逻辑确认转发消息给…

【ARM Cortex-M3指南】3:Cortex-M3基础

文章目录 三、Cortex-M3基础3.1 寄存器3.1.1 通用目的寄存器 R0~R73.1.2 通用目的寄存器 R8~R123.1.3 栈指针 R133.1.4 链接寄存器 R143.1.5 程序计数器 R15 3.2 特殊寄存器3.2.1 程序状态寄存器3.2.2 PRIMASK、FAULTMASK和BASEPRI寄存器3.2.3 控制寄存器 3.3 操作模式3.4 异常…

KNN算法详解

KNN分类算法 K最近邻(K-Nearest Neighbors,KNN)算法是一种简单且直观的监督学习算法,用于分类和回归问题。在KNN分类中,通过将新数据点的特征与训练数据中的所有点进行比较,确定其最近邻居,并将…

经典后台管理UI控制台

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>西门星空乐园管理后台</title><script src"../vue_js/vue.js"></script><style>body {margin: 0;padding: 0;width…

MRI学习笔记-spm独立样本t检验

SPM操作&#xff1a; 9-SPM-fmri任务态 二阶分析&#xff1a; 双样本t检验 - 知乎 (zhihu.com) 批处理脚本&#xff1a; clc; clear; nmodel 3; numsub 27; rootdir D:\LLYdata\motor_inhibition_data2\motor_inhibition_fmri;%数据最上层路径 ffxname data_05_1st_leve…

使用FPGA实现串-并型乘法器

介绍 其实我们知道&#xff0c;用FPGA实现乘法器并不是一件很简单的事&#xff0c;而且在FPGA中也有乘法器的IP核可以直接调用&#xff0c;我这里完全就是为了熟悉一些FPGA的语法然后写了这样一个电路。 串-并型乘法器模块 从字面上看&#xff0c;串-并乘法器就是其中一个乘数…

Java面试问题及答案

Java面试问题及答案 以下是几个Java面试中可能会问到的问题及其答案。 1. 解释Java中的多态性是什么&#xff0c;以及它是如何工作的&#xff1f; 问题&#xff1a; 在Java中&#xff0c;多态性是指允许不同类的对象对同一消息做出响应的能力&#xff0c;即同一个接口可以被…

FastApi个人笔记

FastApi笔记 学习FastApi建议直接看官方文档:官方文档 文章目录 FastApi笔记一、环境准备1.1 安装Fast Api 二、第一个Restful API2.1 创建第一个代码框架async作用[(引自CSDN)](https://blog.csdn.net/The_Time_Runner/article/details/105646363): 2.2 运行第一个代码2.3 Swa…

Nodejs process.nextTick() 使用详解

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

OpenCV 为轮廓创建边界框和圆(62)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV检测凸包(61) 下一篇 :OpenCV如何为等值线创建边界旋转框和椭圆(62) ​ 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 cv::boundingRect使用 OpenCV 函数 cv::mi…

数据库(MySQL)—— 事务

数据库&#xff08;MySQL&#xff09;—— 事务 什么是事务事务操作未控制事务测试异常情况 控制事务一查看/设置事务提交方式&#xff1a;提交事务回滚事务 控制事务二开启事务提交事务回滚事务 并发事务问题脏读&#xff08;Dirty Read&#xff09;不可重复读&#xff08;Non…

python在Django中,模板加载器(Template Loaders)是负责查找和加载模板文件的组件

在Django中&#xff0c;模板加载器&#xff08;Template Loaders&#xff09;是负责查找和加载模板文件的组件。Django默认使用django.template.loaders.filesystem.Loader和django.template.loaders.app_directories.Loader这两个加载器&#xff0c;它们分别用于从文件系统和D…

数据结构练习题---环形链表详解

链表成环&#xff0c;在力扣中有这样的两道题目 https://leetcode.cn/problems/linked-list-cycle/ https://leetcode.cn/problems/linked-list-cycle-ii/description/ 这道题的经典解法是利用快慢指针&#xff0c;如果链表是一个环形链表&#xff0c;那么快指针(fast)和慢指…

关于MS-DOS时代的回忆

目录 一、MS-DOS是什么&#xff1f; 二、MS-DOS的主要功能有哪些&#xff1f; 三、MS-DOS的怎么运行的&#xff1f; 四、微软开源MS-DOS源代码 五、高手与漂亮女同学 一、MS-DOS是什么&#xff1f; MS-DOS&#xff08;Microsoft Disk Operating System&#xff09;是微软公…

最基本的c++代码

#include <iostream> #include <string> using namespace std; void james_kobe(); std::string bas() {string name;cout << "请输入您的目的地" << endl;cin >> name;cin.get(); // 消耗掉输入的换行符return name; }std::string ca…

在Nacos中,如何注册和发现服务实例?

在Nacos中注册与发现服务实例 在微服务架构中&#xff0c;服务注册与发现是一个核心组件&#xff0c;它使得服务提供者能够注册自己的服务信息&#xff0c;服务消费者能够发现并调用所需的服务。Nacos&#xff0c;作为阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、…

【SHADER】Shader实例学习2:Loading Wheel

简介 shader代码来自github上一个项目&#xff0c;compose libraries&#xff0c;但是链接找不到了。。。&#xff0c;代码很简洁&#xff0c;但是里面的技巧适合我这种初学者领会。 Shader代码 const float PI 3.14159265359;// 按角度旋转。&#xff08;安卓的坐标由于从…

工作问题记录React(持续更新中)

一、backdrop-filter:blur(20px); 毛玻璃效果&#xff0c;在安卓机上有兼容问题&#xff0c;添加兼容前缀也无效&#xff1b; 解决方案&#xff1a;让设计师调整渐变&#xff0c;不要使用该属性! 复制代码 background: radial-gradient(33% 33% at 100% 5%, #e9e5e5 0%, rgba…

C++类定义时成员变量初始化

在C11中允许在类定义时对成员变量初始化。 class A { public:A() { }void show(){cout << "m_a " << m_a << endl;cout << "m_b " << m_b << endl;} private:int m_a 10;//类定义时初始化int m_b; //没有初始化…