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

2024-05-05 16:20

本文主要是介绍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 太太说:听音调还是有些不准。请程序员网友指正。

这篇关于perl:用 MIDI::Simple 生成midi文件,用 pygame 播放 mid文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/962122

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

hdu 1102 uva 10397(最小生成树prim)

hdu 1102: 题意: 给一个邻接矩阵,给一些村庄间已经修的路,问最小生成树。 解析: 把已经修的路的权值改为0,套个prim()。 注意prim 最外层循坏为n-1。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstri

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言