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

相关文章

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

SQLServer中生成雪花ID(Snowflake ID)的实现方法

《SQLServer中生成雪花ID(SnowflakeID)的实现方法》:本文主要介绍在SQLServer中生成雪花ID(SnowflakeID)的实现方法,文中通过示例代码介绍的非常详细,... 目录前言认识雪花ID雪花ID的核心特点雪花ID的结构(64位)雪花ID的优势雪花ID的局限性雪花ID的应用场景

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2