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新标准快发布测试。