linux fedora32 播放midi音乐
其实这个日志,没想记那么多,只是为了在linux下找一个midi的播放器,默认播放器只能播放普通格式,不支持midi格式。
最终找到一个类似winamp的播放器qmmp,挺好用的。
安装
sudo yum install qmmp
运行
qmmp
好了,已经实现播放midi的功能,新手下面不用看了,只是我手贱,顺便看了一下ALSA方面的文章,可以用其他的播放器,那装一个玩玩吧,tmd都是泪。
=============================================
一、ALSA MIDI
MIDI:Musical Instrument Digital Interface 音乐设备数字化接口)
https://alsa-project.org/wiki/Main_Page
上面有你找的包括源代码
ALSA:Advanced Linux Sound Architecture 高级Linux声音架构
二、安装ALSA驱动
(一)下载源码安装,自行下载编译。
(二)yum 安装
sudo yum install alsa-lib-devel.x86_64 
sudo yum install alsa-tools-firmware.x86_64 
sudo yum install alsa-utils.x86_64  
sudo yum install patchage.x86_64 
补丁:Jack and ALSA based audio/MIDI
应该会很顺利安装成功的
三、fluidsynth音频合成软件
(一)安装
sudo yum install fluidsynth

sudo yum install qsynth
sudo yum install fluid-soundfont-gm
sudo yum install qjackctl
#sudo yum install rosegarden 这个当时没有安装(幸亏放在后面,不然直接崩溃放弃)
如果顺利的话可执行下面命令,没有出错的话,那就大功告成。
(二)运行

喜欢用GUI界面的运行qsynth

下面可以不用启动GUI界面,命令行就可以运行。
fluidsynth -help 查看帮助 太多不详细介绍
参数说明:
-s 作为服务
--audio-driver=alsa                         (-a alsa)指通用的声卡驱动
-o audio.alsa.device=hw:0            (可以不要默认值)声卡设备位置,可以用aplay -l 查看
-l                        不联接服务器
-i             不读取shell
song.mid 要播放的音乐名称
/usr/share/sounds/sf2/FluidR3_GM.sf2 音色库
1、服务端播放midi
fluidsynth --server --audio-driver=jack --connect-jack-outputs /usr/share/soundfonts/FluidR3_GM.sf2 sond.mid
fluidsynth -s -a jack -j /usr/share/soundfonts/FluidR3_GM.sf2 sond.mid
上面两个命令均能运行,只不过第二个为简化版,如果等同效果一样,为什么还要两个命令呢,那要问开发者了,第一个比较清晰,他也可能是100个字符,不过程序员要挨骂了^_^。
当然也可以开启服务,其他登录端播放,命令如下格式
fluidsynth -s -a jack -j /usr/share/soundfonts/FluidR3_GM.sf2

ls -la /usr/share/sounds/sf/FluidR3_GM.sf2 这个文件其实是软链接,无所谓的,只要指向正确就可以。

sudo ln -s   /usr/share/soundfonts/FluidR3_GM.sf2  /usr/share/sounds/sf/FluidR3_GM.sf2
2、客户端播放midi
查看端口
aplaymidi -l
播放 
aplaymidi -p 128:0 song.mid
3、直接播放
fluidsynth -a alsa -l -i /usr/share/soundfonts/FluidR3_GM.sf2 sond.mid
fluidsynth -a alsa -m alsa_seq -l -i /usr/share/soundfonts/FluidR3_GM.sf2 song.mid
fluidsynth -a pulseaudio -m alsa_seq -l -i /usr/share/soundfonts/FluidR3_GM.sf2 song.mid

其实编辑 vi /.fluidsynth文件内容更好,如:

set synth.dynamic-sample-loading        True
set synth.lock-memory                   True
set audio.alsa.device                   hw:0
set audio.driver                        jack
set audio.file.endian                   auto
set audio.jack.autoconnect              True
set audio.jack.id                       fluidsynth
set audio.jack.multi                    True
set midi.autoconnect                    True
set midi.driver                         alsa_seq
set midi.realtime-prio                  90
set player.reset-synth                  True
set player.timing-source                sample
set synth.cpu-cores                     2
set synth.default-soundfont             /usr/share/soundfonts/FluidR3_GM.sf2
set synth.gain                          5
set synth.ladspa.active                 True
set synth.polyphony                     256
set synth.reverb.active                 True
set synth.sample-rate                   48000.000

4、服务命令

help all

settings

player_loop -1 一直重复播放 player_next 下一首 player_stop停止
quit  安全退出
shell 端不正常出错可用下面命令kill
sudo killall jackd

sudo jack_control stop
四、常用辅助工具

aplay -l
命令行声音调整,好多参数,控制ALSA的调节器,并且支持多声卡.可查看help
amixer
调整音量
amixer set Master 100%
alsa有一个带界面声音调整工具
自动打开默认声卡
alsamixer -c 0
aplaymidi -l

alsactl store保存声卡配置文件

alsactl restor恢复默认值
播放
aplaymidi -p 128:0 song.mid
加上参-d 10 测试中好像播放完成后延迟时间

alsactl 声卡设置工具
alsactl -h
arecord,aplay是命令行录音播放工具
aplaymidi播放MIDI文件
alsamixer终端界面声卡音量调器
arecordmidi录制标准的MIDI文件
amidi端口进行读写工具

四、问题及解决方法
系统设置声卡一定要选对,不然没声音的^_^。
alsa基本是不会出问题的,主要是fluidsynth的问题。
(一)基本调试
1、查看启用频率1000
grep ^CONFIG_HZ /boot/config-`uname -r`
CONFIG_HZ_1000=y
CONFIG_HZ=1000
2、查看设备
cat /proc/asound/cards
 0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xd0700000 irq 28
3、查看驱动
aplay -L
card 0: PCH [HDA Intel PCH], device 0: ALC272 Analog [ALC272 Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC272 Digital [ALC272 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
4、查看midi端口
aplaymidi -l
Port    Client name                      Port name
 14:0    Midi Through                     Midi Through Port-0
128:0    FLUID Synth (7076)               Synth input port (7076:0)
5、发送数据到端口
aplaymidi -p 128:0 song.mid
6、查看权限
sudo fuser -v /dev/snd/*
(二)出错调试
1、出错信息1
The capture device "hw:0" is already in use jackd(KILL掉谁在使用声卡)
Trying to load portnames from /etc/jack/cards/HDA Intel PCH.ss.ports.out
Trying to load portnames from /etc/jack/cards/HDA Intel PCH.ports.out
lash_open_socket: could not connect to host 'localhost', service '14541'
解决办法:
sudo vi /etc/fstab
添加或修改这两行后reboot
/dev/shm                                        tmpfs   defaults                0 0
/dev/pts                                        devpts  defaults                0 0
2、出错信息2
cannot lock down memory area
ulimit -l   查看
max locked memory       (kbytes, -l) 65536
第一种方法:修改这两个文件,linux系统配置文件,不建议修改,如果系统管理员在不影响稳定的情况下可编辑。
/etc/systemd/system.conf
/etc/systemd/user.conf
DefaultLimitMEMLOCK=131072  DefaultLimitMEMLOCK=134217728 
好奇怪,为什么是这样的数据,原来是1024单位啊。
128kb=128*1024=131072
128mb=131072*1024=134217728
第二种方法修改下面文件,测试通过
/etc/security/limits.d/audio.conf
@audio - rtprio 95 
@audio - memlock unlimited
其实很简单,就是内存修改为无限制。
添加abc用户的audio、jackuser权限

sudo groupadd realtime
sudo groupadd jackuser
sudo fuser -v /dev/snd/*
sudo usermod -a -G audio abc
sudo usermod -a -G jackuser abc

sudo usermod -a -G realtime abc

第三种方法修改下面文件,测试后没成功失败。
vi /etc/security/limits.d/99-realtime-privileges.conf 
@realtime - rtprio 98 
@realtime - memlock unlimited

vi /etc/security/limits.d/99-realtime-privileges.conf 
@jackuser - rtprio 98\9 
@jackuser - memlock unlimited

sudo yum install -y sysfsutils
vi /etc/udev/rules.d/40-timer-permissions.rules
KERNEL=="rtc0", GROUP="audio"
KERNEL=="hpet", GROUP="audio"
vi /etc/sysfs.conf
class/rtc/rtc0/max_user_freq = 2048
vi /etc/sysctl.conf
dev.hpet.max-user-freq=2048
chmod 660 /dev/hpet /dev/rtc0
chgrp audio /dev/hpet /dev/rtc0

五、安装rosegarden

https://rosegardenmusic.com/
最新版本为20.12
===============================
cmake安装 版本要3以上。
yum install -y gcc gcc-c++ make automake
wget cmake-3.19.3.tar.gz
tar -zxvf cmake-3.19.3.tar.gz
cd cmake-3.19.3
sudo ./bootstrap 
sudo make 
sudo make install
============================
下载解压缩
cd rosegarden-20.12
vi README
可以先看下。
下面开始安装
pwd
/home/abc/rosegarden-20.12
显示当前路径
sudo cmake3 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug
===================
不行,有很多的出错提示,大部分为Qt5组件缺失,本人一直GNOME或XFCE,也就是GTK组件。算了还是装个KDE吧

sudo yum install @KDE

==============================
yum install swithcdesk
界面切换命令
swithcdesk KDE
swithcdesk xfce
startxfce4
============================
仍然不行,还是老实按提示安装吧
sudo yum search  XX
sudo yum install XX
配合www.bing.com搜索

yum install qt-creator
yum isntall Qt5
yum isntall libudev-devel
yum install mesa-libGL-devel

https://www.esaracco.fr/documentation/linuxaudio/linuxaudio/build-ladspa.html
http://www.ladspa.org/download/ladspa_sdk_1.15.tgz

cd src
sudo make
sudo make install

dssi
sudo yum install dssi-devel-1.1.1-8.el7.nux.x86_64.rpm
.......
终于没错误提示

上面大部分是源码安装,数不完的wget tar config make make installl

下面是通过yum search 找到安装包,64位,经测试成功,不用编译源码。

=====================================
sudo yum install cmake3
sudo yum install qt5-qtbase-devel.x86_64
sudo yum install ladspa-devel.x86_64
sudo yum install liblo.x86_64
sudo yum install dssi-devel.x86_64
sudo yum install liblo-devel.x86_64
sudo yum install liblrdf-devel.x86_64
sudo yum install fftw-devel.x86_64
sudo yum install libsamplerate-devel.x86_64
sudo yum install libsndfile-devel.x86_64
sudo yum install lirc-devel.x86_64
sudo yum install jack-audio-connection-kit-devel.x86_64
sudo yum install qt5-qttools-devel.x86_64
======================================

rosegarden-20.12编译要用cmake3.0以上版本,如果电脑已经安装cmake3,可以直接cmake,如果是2.0版本,通过yum install 安装cmake3,要执行cmake3
sudo cmake3 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug
sudo make3 -j4
sudo make3 install
编译时间估计要10分钟
rosegarden 
界面终出来了。

======================
安装完成后才看到,rosegarden维基网站安装说明。
https://rosegardenmusic.com/wiki/dev:contributing
ubuntu debian arch 都有安装包可以下载,fedora 只有9以前的,下面是必须的组件。
gcc
gcc-c++
cmake
make
pkgconfig
qt5-qtbase-devel
alsa-lib-devel
jack-audio-connection-kit-devel
ladspa-devel
dssi-devel
liblo-devel
lirc-devel
liblrdf-devel
fftw3-devel
lilypond
libsamplerate-devel
libsndfile-devel
perl
bash
tar
gzip
libSM-devel
======================

yum 安装的FluidSynth qsynth的版本太旧了,闲来无事,更新版本吧,当然不想更新的
下面的这部分内容不要看了,编译过程会有出错提示,按提示修正就可以。
========================================
FluidSynth runtime version 2.1.6
当前版本

yum install libtool        :inet_ntop... yes

git clone https://github.com/FluidSynth/fluidsynth
cd fluidsynth
sudo cmake3 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug
sudo make -j4
sudo make install

Qsynth - A fluidsynth Qt GUI Interface version: 0.9.0.10
当前版本
git clone https://github.com/rncbc/qsynth
cd qsynth
sudo cmake3 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug
sudo make -j4
sudo make install
=========================================

顺便更新一下JACK

www.jackaudio.org

jack1源码安装https://jackaudio.org/downloads/

git clone git://github.com/jackaudio/jack1.git

cd jack1

git submodule init

git submodule update

./autogen.sh ./configure make make install

jack2 JACK 1.9.17.

下载解压后执行命令编译,感觉linux 上面好多的新软件最好用源码编译,打包软件更新速度太慢了。

./waf --help 可加参数--dbus  --samplerate=yes

./waf --prefix=/usr configure

./waf build

sudo ./waf install

=====================================================================

六、运行(centos7 fedora32通过测试)

===============
打开三个命令行窗口分别执行
qsynth
qjackctl
rosegarden
===============

^_^

以后有时间分析一下midi格式,毕竟midi1.0标准已经使用近40年,midi2.0新标准快发布测试。

linux centos fedora rosegarden 播放 midi 音乐相关推荐

  1. CentOS 6.x 播放 mp3 音乐 —— 成功

    CentOS 6.x 播放 mp3 音乐 -- 成功 参考:http://blog.chinaunix.net/uid-14735472-id-3472898.html centos 6.x  添加 ...

  2. java channel midi_为Java程序中添加播放MIDI音乐功能

    下载本文示例代码 Java在多媒体处理方面的确优势不大,但是我们在程序中有些时候又需要一些音乐做为点缀,如果播放的音乐是wav等波形音频文件,又挺大,所以背景音乐最好就是MIDI了,可是网上很多播放M ...

  3. MIDI应用: 播放midi音乐文件的方法 [Win32版本+ C语言版本]

    播放midi音乐文件的方法 背景说明: 在游戏编程中,给程序增加音效几乎是必须的;在普通程序中增加音效也会给使用者带来更好的体验;而mid格式的音效文件体积最小(大约1k到数十k),效果却不亚于MP3 ...

  4. linux centos fedora audio root 普通用户声卡驱动安装 加载 声音

    linux  centos fedora Audio root 及普通用户声卡及声音的问题 大家用linux大部分当作服务器用的,谁用这玩意听歌,看电影啊,毕竟是玩吗,玩来玩去,声音给浪丢了,那也不能 ...

  5. 游戏编程入门(11):播放MIDI 音乐

    MIDI音乐是将音乐结合到游戏的最佳方式之一,本章就将介绍究竟如何使用相对较少的代码播放MIDI音乐. 本章内容包括: 如何使用MCI播放MIDI音乐 如何向游戏添加MIDI音乐 接上文 游戏编程入门 ...

  6. linux centos fedora 扩展硬盘分区操作命令 fdisk df lvm pvcreate vgcreate lvcreate

    linux centos fedora 扩展 硬盘分区 lvm fdisk df pvcreate vgcreate lvcreate 操作 命令 一.硬盘分区 在Linux系统中一个硬盘分区上限为1 ...

  7. Java 添加播放MIDI音乐

         Java 在多媒体处理方面的确优势不大,但是我们在程序中有些时候又需要一些音乐. 如果播放的音乐是wav等波形音频文件,又很大的话,所以背景音乐最好就是MIDI了. 网上很多播放MIDI的教 ...

  8. midi java_Java程序中添加播放MIDI音乐功能的实现方法详解

    JAVA在多媒体处理方面的确优势不大,但是我们在程序中有些时候又需要一些音乐,如果播放的音乐是wav等波形音频文件,又很大的话,所以背景音乐最好就是MIDI了,可是网上很多播放MIDI的教程都是简单的 ...

  9. [收藏]播放MIDI音乐——使用DirectMusic

    ( 本文对象: DirectMusic 初学者,想快速知道使用 DirectMusic 播放音乐的人 ) 原作者By Kylinx, 2003-5-15 ,E-mail:game-diy@163.co ...

最新文章

  1. 特朗普“模仿”奥巴马?进阶版换脸技术DeepFakes来了
  2. “兼职开发的程序员,为什么不受企业待见?”
  3. CDIE-2021春季课程内容设计 | 火场逆行
  4. vue从入门到进阶:Vuex状态管理(十)
  5. mac java jdk_mac下java JDK的下载安装和配置
  6. springboot 解决跨域问题
  7. c语言常用的字符串处理函数
  8. 专题解读 |「知识图谱」领域近期值得读的 6 篇顶会论文
  9. 关于kafka生产者相关监控指标的理解(未解决)
  10. Python获取当前系统时间
  11. Java的getperiod_Java中的Period getYears()方法
  12. Spring MVC前后台交互(前台ajax传递数据,后台controller接收数据返回json对象)
  13. could not find a getter for ... in class ... 异常的解决
  14. python you-get ffmpeg 下载哔哩哔哩视频
  15. h5 标签video和audio标签的下载按钮
  16. 很好用的博客文章编辑器!!!!!
  17. godaddy 服务器位置,GoDaddy主机正确的网站根目录介绍 | Godaddy美国主机中文指南...
  18. OJ每日一练——乘方计算
  19. Android studio安装教程(2020/11/20最新版本的安装)
  20. SpringBoot(一)——入门

热门文章

  1. JAVA static是什么?修饰符总结整理
  2. Eclipse PHP 插件配置
  3. Android Gradle Task详解
  4. 使用vlc插件播放rtsp视频流遇到的问题
  5. 程序员的这几个坏毛病必须要改掉了
  6. 8254 定时/计数器应用实验
  7. 视频教程-MyBatis Generator代码生成器视频教程-Java
  8. TOA - TCP Option Address
  9. CF - 817C. Really Big Numbers
  10. 与庄子何干--听于丹教授讲庄子