在电脑中播放声音的方法
2013-04-07 10:11
246 查看
我的目的就是在电脑上模拟各种乐器,利用音箱逼真的播放出乐器的声音。万事开头难,第一步首先让电脑播放出一个简单的音节来,这就跟初学c语言时的helloworld一样。
(1) 首先下载RtMidi库,这是一个开源的声音库。RtMidi is
a set of C++ classes (RtMidiIn, RtMidiOut and
API-specific classes) that provides a common API (Application Programming Interface) for realtime MIDI input/output across Linux (ALSA & Jack), Macintosh OS X (CoreMidi & Jack), and Windows (Multimedia Library & Kernel Streaming) operating systems. RtMidi significantly
simplifies the process of interacting with computer MIDI hardware and software. It was designed with the following goals:Rtmidi是一个c++语言编写的开源的实时的MIDi播放库,可以在macosx,Linux,windows上运行。
下载地址:http://www.music.mcgill.ca/~gary/rtmidi/release/rtmidi-2.0.1.tar.gz ;最新的版本是2.0.1的。
(2) 打开下载完的文件,解压到一个文件夹中,打开test文件夹,使用vs打开里面的*.sln文件。然后点击运行,一个声音就在音响里面播放出来了。
(3)然而这个库自己带的例子太复杂了,不太适合初学这个库的人做。于是我自己重新写了一个helloworld(当然也可以直接在官网上找到以下的源代码),程序如下:
(4)如果对术语不太懂的话,看其他几篇博文。尤其是:http://blog.csdn.net/jia_zhengshen/article/details/8777071
讲解完毕。本文http://my.csdn.net/jia_zhengshen原创。
(1) 首先下载RtMidi库,这是一个开源的声音库。RtMidi is
a set of C++ classes (RtMidiIn, RtMidiOut and
API-specific classes) that provides a common API (Application Programming Interface) for realtime MIDI input/output across Linux (ALSA & Jack), Macintosh OS X (CoreMidi & Jack), and Windows (Multimedia Library & Kernel Streaming) operating systems. RtMidi significantly
simplifies the process of interacting with computer MIDI hardware and software. It was designed with the following goals:Rtmidi是一个c++语言编写的开源的实时的MIDi播放库,可以在macosx,Linux,windows上运行。
下载地址:http://www.music.mcgill.ca/~gary/rtmidi/release/rtmidi-2.0.1.tar.gz ;最新的版本是2.0.1的。
(2) 打开下载完的文件,解压到一个文件夹中,打开test文件夹,使用vs打开里面的*.sln文件。然后点击运行,一个声音就在音响里面播放出来了。
(3)然而这个库自己带的例子太复杂了,不太适合初学这个库的人做。于是我自己重新写了一个helloworld(当然也可以直接在官网上找到以下的源代码),程序如下:
(4)如果对术语不太懂的话,看其他几篇博文。尤其是:http://blog.csdn.net/jia_zhengshen/article/details/8777071
#include <iostream> #include <cstdlib> #include "RtMidi.h" int main() { RtMidiOut *midiout = new RtMidiOut(); std::vector<unsigned char> message; // Check available ports. unsigned int nPorts = midiout->getPortCount(); if ( nPorts == 0 ) {//看看有多少个可以使用的midi接口。为0是什么意思?不解释。 std::cout << "No ports available!\n"; goto cleanup;//虽然goto语句少用,但是这里就这么少的代码,2,3根烂面条你总能分的青吧 } // Open first available port. midiout->openPort( 0 );//打开第一个midi口。 // Send out a series of MIDI messages. // Program change: 192, 5 message.push_back( 192 );//192==0xc0,这是什么意思?看http://blog.csdn.net/jia_zhengshen/article/details/8777071 这里用一篇文章来解释 message.push_back( 5 ); midiout->sendMessage( &message ); // Control Change: 176, 7, 100 (volume) message[0] = 176;//调节音量。//176==b0;看上面的网址的解释。太复杂了,虽然代码很简单,但是解释清楚很不容易。 message[1] = 7; message.push_back( 100 );//这里是push_back,如果是message【2】会导致出内存溢出问题。 midiout->sendMessage( &message ); // Note On: 144, 64, 90 message[0] = 144;//开始演奏 message[1] = 64;//演奏代码为64的音符 message[2] = 90;//速度为90,最高位7fh midiout->sendMessage( &message ); SLEEP( 500 ); // Platform-dependent ... see example in tests directory. // Note Off: 128, 64, 40 message[0] = 128;//终止演奏 message[1] = 64;//停止64的音符 message[2] = 40;//速度为40 midiout->sendMessage( &message ); // Clean up cleanup: delete midiout; getchar(); return 0; }这些代码比较简单。比较适合初学者。把test工程里的sysextest.cpp文件下的代码全部注释掉,复制进这些代码,一个音符近会通过音响输出出来。
讲解完毕。本文http://my.csdn.net/jia_zhengshen原创。
相关文章推荐
- VC++中播放声音的方法
- 【解决笔记本电脑声音音量低的方法】
- mp4v2同时录制视频和声音播放时会在中途自动终止的解决方法
- flex里播放声音的方法
- flash as3用代码播放声音的常用方法和属性
- WPF 播放声音的三种方法
- WPF 播放声音的三种方法
- python使用PyGame模块播放声音的方法
- Guitar Pro教程之播放无声音的解决方法
- VC++中播放声音的方法
- 解决电脑杀毒的后遗症:有声音但不能播放音乐
- 【分享】4412开发板ubuntu 12.0.4播放音乐没有声音解决方法
- WinForm中播放声音的三种方法
- AudioSource声音播放的静态方法
- 解决电脑杀毒的后遗症:有声音但不能播放音乐
- 低配置电脑播放 flash 视频时 占 cpu 资源过高的解决方法
- Windows 10 电脑在播放声音后突然增大的解决办法
- 插入USB麦克风电脑没有声音了的解决方法
- 在Swift3里面实现点击不同按钮播放不同声音的一种实现方法
- C#播放声音的四种方法